annotate src/luan/webserver/handlers/FileHandler.java @ 1167:7e6f28c769a1

better handlers
author Franklin Schmidt <fschmidt@gmail.com>
date Thu, 08 Feb 2018 19:06:31 -0700
parents 668f29bc52ea
children 312e4cadd508
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1139
8126370ea8c0 webserver - add FileHandler
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
1 package luan.webserver.handlers;
8126370ea8c0 webserver - add FileHandler
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
2
8126370ea8c0 webserver - add FileHandler
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
3 import java.io.File;
8126370ea8c0 webserver - add FileHandler
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
4 import java.io.FileInputStream;
1140
bf03d687eaff webserver - add dir handling
Franklin Schmidt <fschmidt@gmail.com>
parents: 1139
diff changeset
5 import java.io.Writer;
bf03d687eaff webserver - add dir handling
Franklin Schmidt <fschmidt@gmail.com>
parents: 1139
diff changeset
6 import java.io.OutputStreamWriter;
bf03d687eaff webserver - add dir handling
Franklin Schmidt <fschmidt@gmail.com>
parents: 1139
diff changeset
7 import java.io.IOException;
bf03d687eaff webserver - add dir handling
Franklin Schmidt <fschmidt@gmail.com>
parents: 1139
diff changeset
8 import java.text.DateFormat;
bf03d687eaff webserver - add dir handling
Franklin Schmidt <fschmidt@gmail.com>
parents: 1139
diff changeset
9 import java.text.SimpleDateFormat;
bf03d687eaff webserver - add dir handling
Franklin Schmidt <fschmidt@gmail.com>
parents: 1139
diff changeset
10 import java.util.Date;
1139
8126370ea8c0 webserver - add FileHandler
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
11 import luan.webserver.Handler;
8126370ea8c0 webserver - add FileHandler
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
12 import luan.webserver.Request;
8126370ea8c0 webserver - add FileHandler
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
13 import luan.webserver.Response;
1140
bf03d687eaff webserver - add dir handling
Franklin Schmidt <fschmidt@gmail.com>
parents: 1139
diff changeset
14 import luan.webserver.ResponseOutputStream;
1139
8126370ea8c0 webserver - add FileHandler
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
15
8126370ea8c0 webserver - add FileHandler
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
16
1167
7e6f28c769a1 better handlers
Franklin Schmidt <fschmidt@gmail.com>
parents: 1165
diff changeset
17 public class FileHandler implements Handler {
7e6f28c769a1 better handlers
Franklin Schmidt <fschmidt@gmail.com>
parents: 1165
diff changeset
18 final File dir;
1139
8126370ea8c0 webserver - add FileHandler
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
19
8126370ea8c0 webserver - add FileHandler
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
20 public FileHandler() {
8126370ea8c0 webserver - add FileHandler
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
21 this(".");
8126370ea8c0 webserver - add FileHandler
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
22 }
8126370ea8c0 webserver - add FileHandler
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
23
8126370ea8c0 webserver - add FileHandler
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
24 public FileHandler(String pathname) {
8126370ea8c0 webserver - add FileHandler
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
25 this(new File(pathname));
8126370ea8c0 webserver - add FileHandler
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
26 }
8126370ea8c0 webserver - add FileHandler
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
27
8126370ea8c0 webserver - add FileHandler
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
28 public FileHandler(File dir) {
8126370ea8c0 webserver - add FileHandler
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
29 if( !dir.isDirectory() )
8126370ea8c0 webserver - add FileHandler
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
30 throw new RuntimeException("must be a directory");
8126370ea8c0 webserver - add FileHandler
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
31 this.dir = dir;
8126370ea8c0 webserver - add FileHandler
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
32 }
8126370ea8c0 webserver - add FileHandler
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
33
8126370ea8c0 webserver - add FileHandler
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
34 public Response handle(Request request) {
1140
bf03d687eaff webserver - add dir handling
Franklin Schmidt <fschmidt@gmail.com>
parents: 1139
diff changeset
35 try {
bf03d687eaff webserver - add dir handling
Franklin Schmidt <fschmidt@gmail.com>
parents: 1139
diff changeset
36 File file = new File(dir,request.path);
1167
7e6f28c769a1 better handlers
Franklin Schmidt <fschmidt@gmail.com>
parents: 1165
diff changeset
37 return handle(request,file);
1140
bf03d687eaff webserver - add dir handling
Franklin Schmidt <fschmidt@gmail.com>
parents: 1139
diff changeset
38 } catch(IOException e) {
bf03d687eaff webserver - add dir handling
Franklin Schmidt <fschmidt@gmail.com>
parents: 1139
diff changeset
39 throw new RuntimeException(e);
1139
8126370ea8c0 webserver - add FileHandler
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
40 }
8126370ea8c0 webserver - add FileHandler
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
41 }
1167
7e6f28c769a1 better handlers
Franklin Schmidt <fschmidt@gmail.com>
parents: 1165
diff changeset
42
7e6f28c769a1 better handlers
Franklin Schmidt <fschmidt@gmail.com>
parents: 1165
diff changeset
43 Response handle(Request request,File file) throws IOException {
7e6f28c769a1 better handlers
Franklin Schmidt <fschmidt@gmail.com>
parents: 1165
diff changeset
44 if( file.isFile() ) {
7e6f28c769a1 better handlers
Franklin Schmidt <fschmidt@gmail.com>
parents: 1165
diff changeset
45 Response response = new Response();
7e6f28c769a1 better handlers
Franklin Schmidt <fschmidt@gmail.com>
parents: 1165
diff changeset
46 response.body = new Response.Body( file.length(), new FileInputStream(file) );
7e6f28c769a1 better handlers
Franklin Schmidt <fschmidt@gmail.com>
parents: 1165
diff changeset
47 return response;
7e6f28c769a1 better handlers
Franklin Schmidt <fschmidt@gmail.com>
parents: 1165
diff changeset
48 }
7e6f28c769a1 better handlers
Franklin Schmidt <fschmidt@gmail.com>
parents: 1165
diff changeset
49 return null;
7e6f28c769a1 better handlers
Franklin Schmidt <fschmidt@gmail.com>
parents: 1165
diff changeset
50 }
1139
8126370ea8c0 webserver - add FileHandler
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
51 }