- 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/
eth0 17.12.2010 18:47 # +2
gegMOPO4 17.12.2010 20:30 # −1
komprenda 17.12.2010 21:32 # −16
guest 17.12.2010 22:39 # +5
Говногость 17.12.2010 22:52 # +5
bugmenot 17.12.2010 23:01 # +3
примерно так
Lure Of Chaos 18.12.2010 00:06 # +2
guest 18.12.2010 00:08 # +2
istem 18.12.2010 00:19 # 0
В какой раздел?
Lure Of Chaos 18.12.2010 00:28 # 0
bugmenot 18.12.2010 00:29 # 0
как маленькие дети со стековерфлоу, ёмоё
плагины, это совсем, совсем другое
у меня юзерскрипт в GM режиме этим занимается
Lure Of Chaos 18.12.2010 00:32 # 0
точно, я имел ввиду Жирную Обезьяну
Lure Of Chaos 18.12.2010 00:33 # 0
bugmenot 18.12.2010 00:48 # +1
эта неведомая зверушка -- ложная лиса
у меня опера если чо, в ФФ по причине долбоебизма тех, кто попап-блокер делал клик надо диспатчить через три жопы
Lure Of Chaos 18.12.2010 00:55 # 0
bugmenot 18.12.2010 00:59 # +1
у оперы только позавчера в релиз пошло, я не поигрался еще толком, похоже на виджеты
Lure Of Chaos 18.12.2010 01:01 # 0
а я написал уже плаг с сиськаме
bugmenot 18.12.2010 01:13 # +1
а про ГМ интересная идея, мне тамошний набор API нра, надо поглянуть как оно внутри устроено
inkanus-gray 18.12.2010 01:58 # 0
bugmenot 19.12.2010 16:44 # 0
Oleg_quadro 20.12.2010 18:46 # 0
Виджеты уже оперы давно. http://www.opera.com/widgets/
bugmenot 20.12.2010 19:04 # 0
без UI свистоперделок букмарклетов вполне достаточно
Oleg_quadro 20.12.2010 18:39 # 0
guest 17.12.2010 22:38 # −2
gegMOPO4 18.12.2010 12:10 # +2
Хорошо бы понимать, что на самом деле происходит, прежде чем наворачивать десять уровней абстракций. А то так и появляются продукты для этого сайта.
Говногость 17.12.2010 22:49 # +3
1)Сильно громкое название (HTTP сервер) для почти ничего не делающей заглушки.
2)Способ представления странцы и кодировка, который запрашивается браузером - здесь игнорируется. Opera скорее всего откроет нормально странцу, а IE её пошлёт.
3)Вообще на любой запрос открывает одно и тоже. Во браузер удивиться, когда на запрос favicon.ico ему придёт HTML страница. О_о (Браузеры всегда запрашивают favicon.ico автоматически).
>YarServer
Название LolServer подошло бы больше.
inkanus-gray 17.12.2010 22:58 # 0
bugmenot 17.12.2010 23:05 # +2
gegMOPO4 18.12.2010 12:02 # 0
guest 18.12.2010 15:45 # +1
Lure Of Chaos 19.12.2010 16:17 # 0
bugmenot 19.12.2010 16:42 # 0
gegMOPO4 18.12.2010 11:58 # −4
Пример вполне корректен.
guest 18.12.2010 15:48 # +2
Вот пример хелоуворда для Си:
#include <stdio.h>
int main()
{
printf("Hello, world!\n");
return 0;
}
Где ошибки? Все верно. Плохому не учит.
gegMOPO4 19.12.2010 22:32 # −1
danilissimus 28.12.2010 19:04 # 0
puts() быстрее чем printf()
guest 17.12.2010 23:25 # +2
danilissimus 18.12.2010 15:38 # 0
>class SocketProcessor implements Runnable
guest 18.12.2010 15:51 # +3
Должно быть так:
При подключении нового клиента - из пула потоков береться новый поток и обрабатывает его запрос, а в это время основной поток ждет новых подключений клиентов.
KoderZ 20.12.2010 11:50 # 0
да, только то, что клиент смог подключится - ошибка )
guest 20.12.2010 16:41 # 0
absolut 20.12.2010 23:37 # +1
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.