2011-07-21 87 views
5

我在java应用程序中使用嵌入式码头服务器。但是doGet()方法被调用两次。它也被称为这个(method.equals(METHOD_GET))条件在httpservlet类的服务方法中的一个结果。doGet调用两次码头服务器

我试图用chrome和explorer做一个请求,但是我得到了同样的结果。

任何人都可以看到中的doGet之所以被称为两次..

public class HelloServlet extends HttpServlet{ 
    private String greeting="Hello World"; 
    public HelloServlet(){} 
    public HelloServlet(String greeting) 
    { 
     this.greeting=greeting; 
     System.out.println("started the server" + greeting); 
    } 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
    { 
     response.setContentType("text/html"); 
     response.setStatus(HttpServletResponse.SC_OK); 
     response.getWriter().println("<h1>"+greeting+"</h1>"); 
     response.getWriter().println("session=" + request.getSession(true).getId()); 
     count = count+1; 
     System.out.println(count); 
     response.getWriter().println("count=" + count); 
     response.flushBuffer(); 
    } 
} 

public class OneServletContext{ 
public static void main(String[] args) throws Exception 
{ 
    Server server = new Server(8080); 

    ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS); 
    context.setContextPath("/"); 
    server.setHandler(context); 
    System.out.println("about to start the servlets"); 
    context.addServlet(new ServletHolder(new HelloServlet()),"/*"); 
    context.addServlet(new ServletHolder(new HelloServlet("Buongiorno Mondo")),"/it/*"); 
    context.addServlet(new ServletHolder(new HelloServlet("Bonjour le Monde")),"/fr/*"); 

    server.start(); 
    System.out.println("started the servlets"); 
    server.join(); 
} 
} 
+0

投票,因为我也有这个问题,以及使用Maven的Jetty插件移动到Tomcat,都很好。并加入favourte。 – Shahzeb

回答

7

当你请求一个网页浏览器,同时也请求了一个图标。例如,对http://foo.com的请求也将请求http://foo.com/favicon.ico。这就是将地址栏中的小图标放在地址栏中以帮助您识别网站的原因。这也是您对servlet的第二次请求的来源。尝试添加此行到您的servlet:

System.out.println("request URI=" + request.getRequestURI()); 
相关问题