- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
public class HttpServer {
public static void main(String[] args) throws Throwable {
ServerSocket ss = new ServerSocket(8080);
while (true) {
Socket s = ss.accept();
System.err.println("Client accepted");
new Thread(new SocketProcessor(s)).start();
}
}
private static class SocketProcessor implements Runnable {
private Socket s;
private InputStream is;
private OutputStream os;
private SocketProcessor(Socket s) throws Throwable {
this.s = s;
this.is = s.getInputStream();
this.os = s.getOutputStream();
}
public void run() {
try {
readInputHeaders();
writeResponse("<html><body><h1>Hello from Habrahabr</h1></body></html>");
} catch (Throwable t) {
/*do nothing*/
} finally {
try {
s.close();
} catch (Throwable t) {
/*do nothing*/
}
}
System.err.println("Client processing finished");
}
private void writeResponse(String s) throws Throwable {
String response = "HTTP/1.1 200 OK\r\n" +
"Server: YarServer/2009-09-09\r\n" +
"Content-Type: text/html\r\n" +
"Content-Length: " + s.length() + "\r\n" +
"Connection: close\r\n\r\n";
String result = response + s;
os.write(result.getBytes());
os.flush();
}
private void readInputHeaders() throws Throwable {
BufferedReader br = new BufferedReader(new InputStreamReader(is));
while(true) {
String s = br.readLine();
if(s == null || s.trim().length() == 0) {
break;
}
}
}
}
}
Это весь код вебсервера.
К слову сказать, это от сюда:
http://habrahabr.ru/blogs/java/69136/
примерно так
В какой раздел?
как маленькие дети со стековерфлоу, ёмоё
плагины, это совсем, совсем другое
у меня юзерскрипт в GM режиме этим занимается
точно, я имел ввиду Жирную Обезьяну
эта неведомая зверушка -- ложная лиса
у меня опера если чо, в ФФ по причине долбоебизма тех, кто попап-блокер делал клик надо диспатчить через три жопы
у оперы только позавчера в релиз пошло, я не поигрался еще толком, похоже на виджеты
а я написал уже плаг с сиськаме
а про ГМ интересная идея, мне тамошний набор API нра, надо поглянуть как оно внутри устроено
Виджеты уже оперы давно. http://www.opera.com/widgets/
без UI свистоперделок букмарклетов вполне достаточно
Хорошо бы понимать, что на самом деле происходит, прежде чем наворачивать десять уровней абстракций. А то так и появляются продукты для этого сайта.
1)Сильно громкое название (HTTP сервер) для почти ничего не делающей заглушки.
2)Способ представления странцы и кодировка, который запрашивается браузером - здесь игнорируется. Opera скорее всего откроет нормально странцу, а IE её пошлёт.
3)Вообще на любой запрос открывает одно и тоже. Во браузер удивиться, когда на запрос favicon.ico ему придёт HTML страница. О_о (Браузеры всегда запрашивают favicon.ico автоматически).
>YarServer
Название LolServer подошло бы больше.
Пример вполне корректен.
Вот пример хелоуворда для Си:
#include <stdio.h>
int main()
{
printf("Hello, world!\n");
return 0;
}
Где ошибки? Все верно. Плохому не учит.
puts() быстрее чем printf()
>class SocketProcessor implements Runnable
Должно быть так:
При подключении нового клиента - из пула потоков береться новый поток и обрабатывает его запрос, а в это время основной поток ждет новых подключений клиентов.
да, только то, что клиент смог подключится - ошибка )
By convention, this output stream is used to display error messages or other information that should come to the immediate attention of a user even if the principal output stream, the value of the variable out, has been redirected to a file or other destination that is typically not continuously monitored.