1 | import android.widget.*; |
2 | import android.view.*; |
3 | import android.content.Context; |
4 | import android.app.Activity; |
5 | import java.util.Timer; |
6 | import java.util.TimerTask; |
7 | import java.io.*; |
8 | import java.net.*; |
9 | |
10 | import com.sun.net.httpserver.HttpExchange; |
11 | import com.sun.net.httpserver.HttpHandler; |
12 | import com.sun.net.httpserver.HttpServer; |
13 | |
14 | public class main {
|
15 | private static HttpServer server; |
16 | private static int port = 8080; |
17 | private static String text = "blabla"; |
18 | |
19 | static class Lg {
|
20 | Activity context; |
21 | ScrollView sv; |
22 | TextView tv; |
23 | StringBuilder buf = new StringBuilder(); |
24 | |
25 | Lg(Activity context) {
|
26 | this.context = context; |
27 | sv = new ScrollView(context); |
28 | tv = new TextView(context); |
29 | tv.setText(buf.toString()); |
30 | sv.addView(tv); |
31 | } |
32 | |
33 | View getView() {
|
34 | return sv; |
35 | } |
36 | |
37 | void print(final String s) {
|
38 | context.runOnUiThread(new Runnable() {
|
39 | public void run() {
|
40 | buf.append(s); |
41 | tv.setText(buf.toString()); |
42 | } |
43 | }); |
44 | } |
45 | |
46 | void println(String s) {
|
47 | print(s + "\n"); |
48 | } |
49 | } |
50 | |
51 | static Lg lg; |
52 | |
53 | public static View main(final Activity context) {
|
54 | lg = new Lg(context); |
55 | |
56 | OutputStream outputStream = new OutputStream() {
|
57 | public void write(int b) {
|
58 | try {
|
59 | lg.print(new String(new byte[] {(byte) b}, "UTF-8")); // This is crap
|
60 | } catch (UnsupportedEncodingException e) {}
|
61 | } |
62 | |
63 | @Override |
64 | public void write(byte[] b, int off, int len) {
|
65 | try {
|
66 | lg.print(new String(b, off, len, "UTF-8")); // This is crap |
67 | } catch (UnsupportedEncodingException e) {}
|
68 | } |
69 | }; |
70 | |
71 | PrintStream ps = new PrintStream(outputStream, true); |
72 | System.setOut(ps); |
73 | System.setErr(ps); |
74 | |
75 | new Thread() {
|
76 | public void run() {
|
77 | try {
|
78 | server = HttpServer.create(new InetSocketAddress(port), 0); |
79 | createHttpContext("/", new MainContext());
|
80 | server.setExecutor(null); // creates a default executor |
81 | server.start(); |
82 | System.out.println("HTTP server started (listening on port " + port + "!)");
|
83 | } catch (Throwable e) {
|
84 | e.printStackTrace(); |
85 | } |
86 | } |
87 | }.start(); |
88 | |
89 | return lg.getView(); |
90 | } |
91 | |
92 | private static void createHttpContext(String path, HttpHandler handler) {
|
93 | server.createContext(path, new SafeHttpHandler(handler)); |
94 | } |
95 | |
96 | public static class SafeHttpHandler implements HttpHandler {
|
97 | private HttpHandler handler; |
98 | |
99 | public SafeHttpHandler(HttpHandler handler) {
|
100 | this.handler = handler; |
101 | } |
102 | |
103 | public void handle(HttpExchange exchange) throws IOException {
|
104 | System.out.println("[web server] Handling request: " + exchange.getRequestURI());
|
105 | try {
|
106 | handler.handle(exchange); |
107 | } catch (Throwable e) {
|
108 | String stackTrace = getStackTrace(e); |
109 | sendServerError(exchange, stackTrace); |
110 | System.out.println(stackTrace); |
111 | } finally {
|
112 | exchange.close(); |
113 | System.out.println("[web server] Done handling request: " + exchange.getRequestURI());
|
114 | } |
115 | } |
116 | } |
117 | |
118 | public static String getStackTrace(Throwable e) {
|
119 | StringWriter stringWriter = new StringWriter(); |
120 | e.printStackTrace(new PrintWriter(stringWriter)); |
121 | return stringWriter.toString(); |
122 | } |
123 | |
124 | public static void sendHtml(HttpExchange exchange, String content) throws IOException {
|
125 | int responseCode = 200; |
126 | String contentType = "text/html"; |
127 | sendHttpTextResponse(exchange, responseCode, content, contentType); |
128 | } |
129 | |
130 | public static void sendHttpTextResponse(HttpExchange exchange, int responseCode, String content, String contentType) throws IOException {
|
131 | byte[] bytes = content.getBytes("UTF-8");
|
132 | String header = contentType + "; charset=utf-8"; |
133 | System.out.println("Sending content type: " + header);
|
134 | exchange.getResponseHeaders().set("Content-Type", header);
|
135 | exchange.sendResponseHeaders(responseCode, bytes.length); |
136 | OutputStream os = exchange.getResponseBody(); |
137 | os.write(bytes); |
138 | os.close(); |
139 | } |
140 | |
141 | public static void sendServerError(HttpExchange exchange, String response) throws IOException {
|
142 | sendHttpTextResponse(exchange, 500, response, "text/plain"); |
143 | } |
144 | |
145 | public static class MainContext implements HttpHandler {
|
146 | public void handle(HttpExchange httpExchange) throws IOException {
|
147 | String html = "blabla" + System.currentTimeMillis(); |
148 | sendHtml(httpExchange, html); |
149 | } |
150 | } |
151 | } |
Began life as a copy of #1000406
download show line numbers debug dex old transpilations
Travelled to 13 computer(s): aoiabmzegqzx, bhatertpkbcr, cbybwowwnfue, cfunsshuasjs, gwrvuhgaqvyk, ishqpsrjomds, lpdgvwnxivlt, mqqgnosmbjvj, pyentgdyhuwx, pzhvpgtvlbxg, tslmcundralx, tvejysmllsmz, vouqrxazstgt
No comments. add comment
| Snippet ID: | #1000407 |
| Snippet name: | Android web server test |
| Eternal ID of this version: | #1000407/1 |
| Text MD5: | 6d2e5a9c0d2b048fbe6ed13f46c93302 |
| Author: | stefan |
| Category: | javax android |
| Type: | JavaX source code (Android) |
| Public (visible to everyone): | Yes |
| Archived (hidden from active list): | No |
| Created/modified: | 2015-08-03 03:30:28 |
| Source code size: | 4623 bytes / 151 lines |
| Pitched / IR pitched: | No / Yes |
| Views / Downloads: | 995 / 853 |
| Referenced in: | [show references] |