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.common.IoSession;
35 import org.apache.mina.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 * @version $Rev: 355016 $, $Date: 2005-12-08 16:00:30 +0900 (Thu, 08 Dec 2005) $
43 */
44 public class HttpProtocolHandler extends StreamIoHandler
45 {
46 protected void processStreamIo( IoSession session, InputStream in,
47 OutputStream out )
48 {
49
50 new Worker( in, out ).start();
51 }
52
53 private static class Worker extends Thread
54 {
55 private final InputStream in;
56 private final OutputStream out;
57
58 public Worker( InputStream in, OutputStream out )
59 {
60 setDaemon( true );
61 this.in = in;
62 this.out = out;
63 }
64
65 public void run()
66 {
67 String url;
68 Map headers = new TreeMap();
69 BufferedReader in = new BufferedReader(
70 new InputStreamReader( this.in ) );
71 PrintWriter out = new PrintWriter(
72 new BufferedWriter( new OutputStreamWriter( this.out ) ) );
73
74 try
75 {
76
77 url = in.readLine().split( " " )[1];
78
79
80 String line;
81 while ( ( line = in.readLine() ) != null && !line.equals( "" ) )
82 {
83 String[] tokens = line.split(": ");
84 headers.put( tokens[0], tokens[1] );
85 }
86
87
88 out.println( "HTTP/1.0 200 OK" );
89 out.println( "Content-Type: text/html" );
90 out.println( "Server: MINA Example" );
91 out.println();
92
93
94 out.println( "<html><head></head><body>" );
95 out.println( "<h3>Request Summary for: " + url + "</h3>" );
96 out.println( "<table border=\"1\"><tr><th>Key</th><th>Value</th></tr>" );
97
98 Iterator it = headers.entrySet().iterator();
99 while( it.hasNext() )
100 {
101 Entry e = ( Entry ) it.next();
102 out.println( "<tr><td>" + e.getKey() + "</td><td>" + e.getValue() + "</td></tr>" );
103 }
104
105 out.println( "</table>" );
106 out.println( "</body></html>" );
107 }
108 catch( Exception e )
109 {
110 e.printStackTrace();
111 }
112 finally
113 {
114 out.flush();
115 out.close();
116 try
117 {
118 in.close();
119 }
120 catch( IOException e )
121 {
122 }
123 }
124 }
125 }
126 }