Как отправить HTTP-ответ на HTTP-запрос в реальном потоке - PullRequest
2 голосов
/ 03 февраля 2012

Я новичок в Java и получаю HttpServletRequest, но не знаю, как ответить на запрос, используя HttpServletResponse.

Вот мой пример кода:

public void handle(String target, HttpServletRequest request,
                   HttpServletResponse response, int dispatch)
       throws IOException {
  // Scan request into a string
  Scanner scanner = new Scanner(request.getInputStream());
  StringBuilder sb = new StringBuilder();
  while (scanner.hasNextLine()) {
    sb.append(scanner.nextLine());
  }

Это пример запроса, который я получаю:

GET / HTTP/1.1
Host: 10.10.10.100:8800
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0) Gecko/20100101 Firefox/10.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive

По умолчанию ответом является

<code>
HTTP/1.1 200 
Но я хочу rosponse что-то вроде
<code>POST something back to the GET Request
как мне это сделать. и где я должен добавить код ... ?? Я на самом деле довольно потерян во всем этом и довольно неудобен с Java до сих пор, поэтому я понятия не имею, что мне не хватает. Любые указатели очень ценятся. Спасибо!

Ответы [ 3 ]

4 голосов
/ 03 февраля 2012

Добавьте ответный пост в конце метода дескриптора, как этот

public void handle(String target, HttpServletRequest request,
                   HttpServletResponse response, int dispatch)
       throws IOException {
  // Scan request into a string
  Scanner scanner = new Scanner(request.getInputStream());
  StringBuilder sb = new StringBuilder();
  while (scanner.hasNextLine()) {
    sb.append(scanner.nextLine());
  }
  response.getOutputStream().println("This is servlet response");
}
1 голос
/ 03 февраля 2012

Хорошо, допустим, вы переопределяете метод doPost.

public void doPost(HttpServletRequest request, 
            HttpServletResponse response) throws ServletException, 
            IOException {

        DataInputStream in = 
                new DataInputStream((InputStream)request.getInputStream());

        String text = in.readUTF();
        String message;
        try {
            message = "100 ok";
        } catch (Throwable t) {
            message = "200 " + t.toString();
        }
        response.setContentType("text/plain");
        response.setContentLength(message.length());
        PrintWriter out = response.getWriter();
        out.println(message);
        in.close();
        out.close();
        out.flush();
    }
0 голосов
/ 24 октября 2015

Вы можете получить PrintWriter от HttpServletResponse.

Пример:

resp.setContentType("text/plain");    // Not required
PrintWriter out = resp.getWriter();
out.write("POST something back to the GET Request");
out.flush();
out.close();    
...