2012-12-15 38 views
2

訪問這個servlet(用GET或POST)時,我總是得到這樣的警告在碼頭9時端點輸出不關機:碼頭 - 尋找EOF

package de.swt1321.servlet; 

import java.util.ArrayList; 

import java.io.OutputStream; 
import java.io.IOException; 

import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

public class ServletTest extends HttpServlet { 
    private static final int UNPROCESSABLE_ENTITY = 422; 
    private static final java.nio.charset.Charset UTF8 = java.nio.charset.Charset.forName("UTF8"); 
    private ArrayList<Person> persons = new ArrayList<Person>(); 
    @Override 
    public void doGet(HttpServletRequest req, 
          HttpServletResponse res) throws ServletException, IOException 
    { 
     byte [] HTML = genHTML(); 
     res.setStatus(HttpServletResponse.SC_OK); 
     res.setHeader("content-type","text/html;charset=utf8"); 
     res.setIntHeader("content-length",HTML.length); 
     OutputStream os = res.getOutputStream(); 
     os.write(HTML); 
     os.flush(); 
    } 

    @Override 
    public void doPost(HttpServletRequest req, 
         HttpServletResponse res) throws ServletException, IOException 
    { 
     String firstName = req.getParameter("firstName"); 
     String lastName = req.getParameter("lastName"); 
     if(firstName == null || lastName == null) { 
      res.setStatus(UNPROCESSABLE_ENTITY); 
      return; 
     } 
     persons.add(new Person(req.getParameter("firstName"),req.getParameter("lastName"))); 
     byte[] HTML = genHTML(); 
     res.setStatus(HttpServletResponse.SC_OK); 
     res.setHeader("content-type","text/html;charset=utf8"); 
     res.setIntHeader("content-length",HTML.length); 
     OutputStream os = res.getOutputStream(); 
     os.write(HTML); 
     os.flush(); 
    } 

    private byte[] genHTML() { 
     String HTMLString = "<!DOCTYPE html>"+ 
      "<html>"+ 
      "<head>" + 
      "<title>Hello World!</title>"+ 
      "<style>" + 
      "table,th,tr { border: 1px solid black;}"+ 
      "</style>" + 
      "</head>"+ 
      "<body><table><tr><th>First Name</th><th>Last Name</th></tr>"; 
     for(Person person : persons) { 
      HTMLString += "<tr><td>"+person.firstName+"</td><td>"+person.lastName+"</td></tr>"; 
     } 
     HTMLString += "</table>"+ 
      "<form name='input' action='/ServletTest-1.0.0/hello' method='post'>"+ 
      "<input type='text' name='firstName'/>"+ 
      "<input type='text' name='lastName'/>" + 
      "<input type='submit' value='Send me!'/>"+ 
      "</form>" + 
      "</body>" + 
      "</html>"; 
     return HTMLString.getBytes(UTF8); 
    } 

    private static class Person { 
     public String firstName; 
     public String lastName; 
     public Person(String firstName, String lastName) { 
      this.firstName = firstName; 
      this.lastName = lastName; 
     } 
    } 
} 

的web.xml:

<web-app xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
    version="3.0"> 

    <servlet> 
     <servlet-name>HelloWorldServlet</servlet-name> 
     <display-name>Hello World App</display-name> 
     <load-on-startup>1</load-on-startup> 
     <servlet-class>de.swt1321.servlet.ServletTest</servlet-class> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>HelloWorldServlet</servlet-name> 
     <url-pattern>/hello</url-pattern> 
    </servlet-mapping> 

</web-app> 

這是我應該擔心的事情嗎?如果是的話,我該如何解決這個問題?這甚至意味着什麼?

回答

1

這是因爲您正在刷新輸出流而造成的。 只需刪除op.flush();並讓Jetty處理它

0
OutputStream os = res.getOutputStream().write(HTML); 

除非您要自己處理輸出流的生命週期,否則不要打擾保留本地引用。