Mercurial Hosting > luan
comparison 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 |
comparison
equal
deleted
inserted
replaced
1166:7ef40e1923b7 | 1167:7e6f28c769a1 |
---|---|
12 import luan.webserver.Request; | 12 import luan.webserver.Request; |
13 import luan.webserver.Response; | 13 import luan.webserver.Response; |
14 import luan.webserver.ResponseOutputStream; | 14 import luan.webserver.ResponseOutputStream; |
15 | 15 |
16 | 16 |
17 public final class FileHandler implements Handler { | 17 public class FileHandler implements Handler { |
18 public boolean showDirs = true; | 18 final File dir; |
19 private final File dir; | |
20 | 19 |
21 public FileHandler() { | 20 public FileHandler() { |
22 this("."); | 21 this("."); |
23 } | 22 } |
24 | 23 |
33 } | 32 } |
34 | 33 |
35 public Response handle(Request request) { | 34 public Response handle(Request request) { |
36 try { | 35 try { |
37 File file = new File(dir,request.path); | 36 File file = new File(dir,request.path); |
38 if( file.isFile() ) { | 37 return handle(request,file); |
39 Response response = new Response(); | |
40 response.body = new Response.Body( file.length(), new FileInputStream(file) ); | |
41 return response; | |
42 } | |
43 if( request.path.endsWith("/") && file.isDirectory() && showDirs ) { | |
44 DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss zzz"); | |
45 Response response = new Response(); | |
46 response.headers.put( "content-type", "text/html; charset=utf-8" ); | |
47 Writer writer = new OutputStreamWriter( new ResponseOutputStream(response) ); | |
48 writer.write( "<!doctype html><html>" ); | |
49 writer.write( "<head><style>td{padding: 2px 8px}</style></head>" ); | |
50 writer.write( "<body>" ); | |
51 writer.write( "<h1>Directory: "+request.path+"</h1>" ); | |
52 writer.write( "<table border=0>" ); | |
53 for( File child : file.listFiles() ) { | |
54 String name = child.getName(); | |
55 if( child.isDirectory() ) | |
56 name += '/'; | |
57 writer.write( "<tr>" ); | |
58 writer.write( "<td><a href='"+name+"'>"+name+"</a></td>" ); | |
59 writer.write( "<td>"+child.length()+" bytes</td>" ); | |
60 writer.write( "<td>"+fmt.format(new Date(child.lastModified()))+"</td>" ); | |
61 writer.write( "</tr>" ); | |
62 } | |
63 writer.write( "</table>" ); | |
64 writer.write( "</body>" ); | |
65 writer.write( "</html>" ); | |
66 writer.close(); | |
67 return response; | |
68 } | |
69 return null; | |
70 } catch(IOException e) { | 38 } catch(IOException e) { |
71 throw new RuntimeException(e); | 39 throw new RuntimeException(e); |
72 } | 40 } |
73 } | 41 } |
42 | |
43 Response handle(Request request,File file) throws IOException { | |
44 if( file.isFile() ) { | |
45 Response response = new Response(); | |
46 response.body = new Response.Body( file.length(), new FileInputStream(file) ); | |
47 return response; | |
48 } | |
49 return null; | |
50 } | |
74 } | 51 } |