1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.mina.examples.httpserver;
20
21 import java.io.BufferedReader;
22 import java.io.BufferedWriter;
23 import java.io.IOException;
24 import java.io.InputStream;
25 import java.io.InputStreamReader;
26 import java.io.OutputStream;
27 import java.io.OutputStreamWriter;
28 import java.io.PrintWriter;
29 import java.util.Iterator;
30 import java.util.Map;
31 import java.util.TreeMap;
32 import java.util.Map.Entry;
33
34 import org.apache.mina.io.IoSession;
35 import org.apache.mina.io.handler.StreamIoHandler;
36
37 /***
38 * A simplistic HTTP protocol handler that replies back the URL and headers
39 * which a client requested.
40 *
41 * @author The Apache Directory Project (dev@directory.apache.org)
42 * @author Trustin Lee (trustin@apache.org)
43 * @version $Rev: 210062 $, $Date: 2005-07-11 12:52:38 +0900 $
44 */
45 public class HttpProtocolHandler extends StreamIoHandler
46 {
47 protected void processStreamIo( IoSession session, InputStream in,
48 OutputStream out )
49 {
50
51 new Worker( in, out ).start();
52 }
53
54 private static class Worker extends Thread
55 {
56 private final InputStream in;
57 private final OutputStream out;
58
59 public Worker( InputStream in, OutputStream out )
60 {
61 setDaemon( true );
62 this.in = in;
63 this.out = out;
64 }
65
66 public void run()
67 {
68 String url;
69 Map headers = new TreeMap();
70 BufferedReader in = new BufferedReader(
71 new InputStreamReader( this.in ) );
72 PrintWriter out = new PrintWriter(
73 new BufferedWriter( new OutputStreamWriter( this.out ) ) );
74
75 try
76 {
77
78 url = in.readLine().split( " " )[1];
79
80
81 String line;
82 while ( ( line = in.readLine() ) != null && !line.equals( "" ) )
83 {
84 String[] tokens = line.split(": ");
85 headers.put( tokens[0], tokens[1] );
86 }
87
88
89 out.println( "HTTP/1.0 200 OK" );
90 out.println( "Content-Type: text/html" );
91 out.println( "Server: MINA Example" );
92 out.println();
93
94
95 out.println( "<html><head></head><body>" );
96 out.println( "<h3>Request Summary for: " + url + "</h3>" );
97 out.println( "<table border=\"1\"><tr><th>Key</th><th>Value</th></tr>" );
98
99 Iterator it = headers.entrySet().iterator();
100 while( it.hasNext() )
101 {
102 Entry e = ( Entry ) it.next();
103 out.println( "<tr><td>" + e.getKey() + "</td><td>" + e.getValue() + "</td></tr>" );
104 }
105
106 out.println( "</table>" );
107 out.println( "</body></html>" );
108 }
109 catch( Exception e )
110 {
111 e.printStackTrace();
112 }
113 finally
114 {
115 out.flush();
116 out.close();
117 try
118 {
119 in.close();
120 }
121 catch( IOException e )
122 {
123 }
124 }
125 }
126 }
127 }