annotate src/goodjava/webserver/handlers/ContentTypeHandler.java @ 1611:f67f972bd648

make postgres.luan optional
author Franklin Schmidt <fschmidt@gmail.com>
date Sat, 15 May 2021 17:24:07 -0600
parents fa066aaa068c
children fe611f6e3c28
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1402
27efb1fcbcb5 move luan.lib to goodjava
Franklin Schmidt <fschmidt@gmail.com>
parents: 1370
diff changeset
1 package goodjava.webserver.handlers;
1137
c123ee15f99b add webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
2
c123ee15f99b add webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
3 import java.util.Map;
c123ee15f99b add webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
4 import java.util.HashMap;
1607
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1510
diff changeset
5 import goodjava.logging.Logger;
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1510
diff changeset
6 import goodjava.logging.LoggerFactory;
1402
27efb1fcbcb5 move luan.lib to goodjava
Franklin Schmidt <fschmidt@gmail.com>
parents: 1370
diff changeset
7 import goodjava.webserver.Handler;
27efb1fcbcb5 move luan.lib to goodjava
Franklin Schmidt <fschmidt@gmail.com>
parents: 1370
diff changeset
8 import goodjava.webserver.Request;
27efb1fcbcb5 move luan.lib to goodjava
Franklin Schmidt <fschmidt@gmail.com>
parents: 1370
diff changeset
9 import goodjava.webserver.Response;
1137
c123ee15f99b add webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
10
c123ee15f99b add webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
11
c123ee15f99b add webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
12 public class ContentTypeHandler implements Handler {
1607
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1510
diff changeset
13 private static final Logger logger = LoggerFactory.getLogger(ContentTypeHandler.class);
1137
c123ee15f99b add webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
14
c123ee15f99b add webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
15 // maps extension to content-type
c123ee15f99b add webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
16 // key must be lower case
1607
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1510
diff changeset
17 public static final Map<String,String> map = new HashMap<String,String>();
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1510
diff changeset
18 static {
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1510
diff changeset
19 String textType = "text/plain; charset=utf-8";
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1510
diff changeset
20 map.put( "txt", textType );
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1510
diff changeset
21 map.put( "luan", textType );
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1510
diff changeset
22 map.put( "luano", textType );
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1510
diff changeset
23 map.put( "log", textType );
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1510
diff changeset
24 map.put( "html", "text/html; charset=utf-8" );
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1510
diff changeset
25 map.put( "css", "text/css; charset=utf-8" );
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1510
diff changeset
26 map.put( "js", "application/javascript; charset=utf-8" );
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1510
diff changeset
27 map.put( "json", "application/json; charset=utf-8" );
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1510
diff changeset
28 map.put( "mp4", "video/mp4" );
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1510
diff changeset
29 map.put( "jpg", "image/jpeg" );
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1510
diff changeset
30 map.put( "jpeg", "image/jpeg" );
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1510
diff changeset
31 map.put( "png", "image/png" );
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1510
diff changeset
32 // add more as need
1137
c123ee15f99b add webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
33 }
c123ee15f99b add webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
34
1607
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1510
diff changeset
35 public static String getExtension(String path) {
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1510
diff changeset
36 int iSlash = path.lastIndexOf('/');
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1510
diff changeset
37 int iDot = path.lastIndexOf('.');
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1510
diff changeset
38 return iDot > iSlash ? path.substring(iDot+1).toLowerCase() : null;
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1510
diff changeset
39 }
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1510
diff changeset
40
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1510
diff changeset
41 private final Handler handler;
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1510
diff changeset
42
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1510
diff changeset
43 public ContentTypeHandler(Handler handler) {
1137
c123ee15f99b add webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
44 this.handler = handler;
c123ee15f99b add webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
45 }
c123ee15f99b add webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
46
c123ee15f99b add webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
47 public Response handle(Request request) {
c123ee15f99b add webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
48 Response response = handler.handle(request);
1607
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1510
diff changeset
49 if( response!=null && response.status.code==200 && !response.headers.containsKey("Content-Type") ) {
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1510
diff changeset
50 String extension = getExtension(request.path);
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1510
diff changeset
51 if( extension != null ) {
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1510
diff changeset
52 String type = map.get(extension);
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1510
diff changeset
53 if( type != null )
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1510
diff changeset
54 response.headers.put("Content-Type",type);
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1510
diff changeset
55 else
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1510
diff changeset
56 logger.info("no type defined for extension: "+extension);
1137
c123ee15f99b add webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
57 }
c123ee15f99b add webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
58 }
c123ee15f99b add webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
59 return response;
c123ee15f99b add webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
60 }
c123ee15f99b add webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
61 }