1. Java / Говнокод #4956

    +70

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 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/

    Запостил: Говногость, 17 Декабря 2010

    Комментарии (42) RSS

    • Yarr!
      Ответить
    • Ну и? Типичный хелловорлд. Кому-то будет полезен.
      Ответить
      • показать все, что скрытоВывод: Говногость - тупой мудак
        Ответить
        • Умный мудак детектед! :D
          Ответить
        • Все Ваши высказывания минусуют?
          Ответить
          • if ( shitlist.indexOf( author ) != -1 ) {
            			if ( votedown ) votedown.click();
            		}

            примерно так
            Ответить
            • точно, надо к хромому плаг поставить, что бы автоматом минусил = )
              Ответить
              • *Пошёл писать плаг.* Потом выложу на говнокоде. Все будем пользоваться.))
                Ответить
              • [facepalm.js]
                как маленькие дети со стековерфлоу, ёмоё
                плагины, это совсем, совсем другое

                у меня юзерскрипт в GM режиме этим занимается
                Ответить
                • пардон, я уже наднюхился ))
                  точно, я имел ввиду Жирную Обезьяну
                  Ответить
                  • тока, а для хромого такое есть? или тока для лисы?
                    Ответить
                    • порт гризманки для гоогле кроме? не в курсе, но вероятно есть
                      эта неведомая зверушка -- ложная лиса
                      у меня опера если чо, в ФФ по причине долбоебизма тех, кто попап-блокер делал клик надо диспатчить через три жопы
                      Ответить
                      • у оперы походу та же система плагов, что и в хромом... во всяком случае так выглядит (хтмл + жабаскрипт + бровзер-апи)
                        Ответить
                        • блжад! это не плагины! плагины это совсем другое

                          у оперы только позавчера в релиз пошло, я не поигрался еще толком, похоже на виджеты
                          Ответить
                          • гризманки это плагин, плюс скрипты для него

                            а я написал уже плаг с сиськаме
                            Ответить
                            • NPAPI это плагин, а скриптовое расширение совсем другое

                              а про ГМ интересная идея, мне тамошний набор API нра, надо поглянуть как оно внутри устроено
                              Ответить
                            • А в Опере UserJS изначально поддерживается и никаких гризманки не нужно!
                              Ответить
                              • там GM-специфических мулечек нет, а ScriptStorage запилили ок. года назад
                                Ответить
                          • "похоже на виджеты"
                            Виджеты уже оперы давно. http://www.opera.com/widgets/
                            Ответить
                            • эти виджеты малоинтересны поскольку мало что умеют
                              без UI свистоперделок букмарклетов вполне достаточно
                              Ответить
                    • TamperMonkey
                      Ответить
      • Абсолютно бесполезен. Аппатч пускай ставят, а не свои велосипеды дырявые пишут... А то кто-нибудь увидит и подумает, что так только и можно. Всех же прильщает название "HTTP Сервер за 15 минут"...
        Ответить
        • А ещё сервера, кроме Апача знаете? Тысячи их, и некоторые специализированные не намного сложнее этого примера.

          Хорошо бы понимать, что на самом деле происходит, прежде чем наворачивать десять уровней абстракций. А то так и появляются продукты для этого сайта.
          Ответить
    • Итого:
      1)Сильно громкое название (HTTP сервер) для почти ничего не делающей заглушки.
      2)Способ представления странцы и кодировка, который запрашивается браузером - здесь игнорируется. Opera скорее всего откроет нормально странцу, а IE её пошлёт.
      3)Вообще на любой запрос открывает одно и тоже. Во браузер удивиться, когда на запрос favicon.ico ему придёт HTML страница. О_о (Браузеры всегда запрашивают favicon.ico автоматически).

      >YarServer
      Название LolServer подошло бы больше.
      Ответить
      • А разве favicon.ico не обязана указываться в LINK rel="icon"?
        Ответить
        • фоллбэк, если нет иконки -- зрят в корень
          Ответить
        • favicon.ico нет в стандарте. Это самодеятельность MS IE (и тип файла-то Windows Icon нестандартный).
          Ответить
          • А Опера и Горящая Лиса тоже запрос favicon.ico делает, так что уже считай стандарт...
            Ответить
            • на что мокромягкие и рассчитывали: что их выдумка станет примером подражания для всех, а они будут только патентами всех насиловать
              Ответить
            • добавляю всякие коверканья малой панды в шитлист, заебался уже поправлять
              Ответить
      • Вы к любому хелловорлду такие претензии имеете? Откройте любой учебник -- там таких десятки, сотни (например -- Stevens R., "Unix network programming", vol.1, Figure 5.3). О-ло-ло!

        Пример вполне корректен.
        Ответить
        • Хеллоу ворд должен демонстрировать как верно, а не учить начинающих программистов делать что-то неверно. Это пример говнистого хелоуворда.

          Вот пример хелоуворда для Си:
          #include <stdio.h>
          int main()
          {
          printf("Hello, world!\n");
          return 0;
          }
          Где ошибки? Все верно. Плохому не учит.
          Ответить
    • Тут бы ещё многопоточную обработку, иначе при подключении нового клиента, пока предыдущий запрос не обработается - новые клиенты будут получать отказы.
      Ответить
      • >new Thread(new SocketProcessor(s)).start();
        >class SocketProcessor implements Runnable
        Ответить
        • И что? Где многопоточная обработка запросов? Это скорее пример того, что делать вообще не нужно.

          Должно быть так:
          При подключении нового клиента - из пула потоков береться новый поток и обрабатывает его запрос, а в это время основной поток ждет новых подключений клиентов.
          Ответить
    • >System.err.println("Client accepted");

      да, только то, что клиент смог подключится - ошибка )
      Ответить
      • Я не заметил. Ухахахааах.
        Ответить
      • Почему сразу ошибка ?
        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.
        Ответить

    Добавить комментарий