3

Подскажите, пожалуйста, как грамотно распарсить http-запрос, дабы фронт-контроллер смог определить тип запроса, и отдать его соответствующему обработчику?

private void readRequest() throws IOException {
    InputStream inputStream = socket.getInputStream();
    LineNumberReader reader = new LineNumberReader(
            new InputStreamReader(inputStream));
String line = reader.readLine();

while (!line.isEmpty()) {
    System.out.println(line);
    if (line.startsWith("GET")) {
        System.out.println("This is Get");
        IndexHandler indexHandler = new IndexHandler(inputStream, this.socket);
        indexHandler.handle();

}

Или другие варианты определения типа запросов! Т.к. получить байты и работать с ними - не верю я в это. Переводить в чары, а потом в строку? Тоже неясно. И как выходить из ситуации, если по хттп послали гигабайт данных? Фронт-контроллер тоже должен все считать? И последний вопрос - что передавать в indexHandler (у меня - обработчик метода GET).

angry
  • 8,677
  • 18
  • 74
  • 182
trierra
  • 383

1 Answers1

2

В случае, если вы действительно хотите переделать по своему вещи, уже имплементированные в UrlConnection, то придется работать с байтами через соответствующий стрим. Разумеется, вы можете взять любую стороннюю реализацию http parser'a, однако в таком случае вопрос не имел бы смысла.

Рекомендую изучить референс по спецификации http, а также следующую реализацию http парсера.


P.S Гигабайт данных просто просплиттится и будет обработан фрагментами.

M. Williams
  • 23,562
  • Я не пойму, зачем работать напрямую с байтами, если можно перегнать байты в строку и из строки извлекать нужные ключи? И что, в таком случае, нужно передавать обработчику? – trierra Oct 31 '11 at 09:58
  • Наверное читать по строкам проще. Тут важно понять, куда складывать и как передать программе-обработчику (например POST) данные запроса. – avp Oct 31 '11 at 10:15