1137
|
1 package luan.webserver.handlers;
|
|
2
|
|
3 import java.io.Writer;
|
|
4 import java.io.OutputStreamWriter;
|
|
5 import java.io.PrintWriter;
|
|
6 import java.io.IOException;
|
|
7 import luan.webserver.Handler;
|
|
8 import luan.webserver.Request;
|
|
9 import luan.webserver.Response;
|
|
10 import luan.webserver.ResponseOutputStream;
|
|
11 import luan.webserver.Status;
|
|
12
|
|
13
|
|
14 public final class SafeHandler implements Handler {
|
|
15 private final Handler handler;
|
|
16
|
|
17 public SafeHandler(Handler handler) {
|
|
18 this.handler = handler;
|
|
19 }
|
|
20
|
|
21 public Response handle(Request request) {
|
|
22 try {
|
|
23
|
|
24 Response response = handler.handle(request);
|
|
25 if( response != null )
|
|
26 return response;
|
|
27
|
|
28 } catch(RuntimeException e) {
|
|
29
|
|
30 Response response = new Response();
|
|
31 response.status = Status.INTERNAL_SERVER_ERROR;
|
|
32 response.headers.put( "Content-Type", "text/plain; charset=UTF-8" );
|
|
33 PrintWriter writer = new PrintWriter( new ResponseOutputStream(response) );
|
|
34 writer.write( "Internel Server Error\n\n" );
|
|
35 e.printStackTrace(writer);
|
|
36 writer.close();
|
|
37 return response;
|
|
38
|
|
39 }
|
|
40
|
|
41 Response response = new Response();
|
|
42 response.status = Status.NOT_FOUND;
|
|
43 response.headers.put( "Content-Type", "text/plain; charset=UTF-8" );
|
|
44 try {
|
|
45 Writer writer = new OutputStreamWriter( new ResponseOutputStream(response) );
|
|
46 writer.write( request.path+" not found\n" );
|
|
47 writer.close();
|
|
48 } catch(IOException e) {
|
|
49 throw new RuntimeException(e);
|
|
50 }
|
|
51 return response;
|
|
52 }
|
|
53
|
|
54 }
|