Mercurial Hosting > luan
diff src/goodjava/webserver/handlers/ContentTypeHandler.java @ 1402:27efb1fcbcb5
move luan.lib to goodjava
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Tue, 17 Sep 2019 01:35:01 -0400 |
parents | src/luan/lib/webserver/handlers/ContentTypeHandler.java@ba4fc39423a4 |
children | 2c06a7ff4173 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/goodjava/webserver/handlers/ContentTypeHandler.java Tue Sep 17 01:35:01 2019 -0400 @@ -0,0 +1,55 @@ +package goodjava.webserver.handlers; + +import java.util.Map; +import java.util.HashMap; +import goodjava.webserver.Handler; +import goodjava.webserver.Request; +import goodjava.webserver.Response; + + +public class ContentTypeHandler implements Handler { + private final Handler handler; + + // maps extension to content-type + // key must be lower case + public final Map<String,String> map = new HashMap<String,String>(); + + // set to null for none + public String contentTypeForNoExtension; + + public ContentTypeHandler(Handler handler) { + this(handler,"utf-8"); + } + + public ContentTypeHandler(Handler handler,String charset) { + this.handler = handler; + String attrs = charset== null ? "" : "; charset="+charset; + String htmlType = "text/html" + attrs; + String textType = "text/plain" + attrs; + contentTypeForNoExtension = htmlType; + map.put( "html", htmlType ); + map.put( "txt", textType ); + map.put( "css", "text/css" ); + map.put( "mp4", "video/mp4" ); + // add more as need + } + + public Response handle(Request request) { + Response response = handler.handle(request); + if( response!=null && !response.headers.containsKey("content-type") ) { + String path = request.path; + int iSlash = path.lastIndexOf('/'); + int iDot = path.lastIndexOf('.'); + String type; + if( iDot < iSlash ) { // no extension + type = contentTypeForNoExtension; + } else { // extension + String extension = path.substring(iDot+1); + type = map.get( extension.toLowerCase() ); + } + if( type != null ) + response.headers.put("content-type",type); + } + return response; + } +}