正在调用Servlet的服务和init方法,但不是doGet

我有一个简单的Servlet,如下所示:

import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class Bla extends HttpServlet { private static final long serialVersionUID = 16252534; @Override public void init() throws ServletException { System.out.println("init"); } @Override public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("doGet"); resp.setContentType("text/html"); PrintWriter out = resp.getWriter(); out.println("

It works!!

"); } @Override public void service(ServletRequest req, ServletResponse resp) throws ServletException, IOException { System.out.println("service"); } @Override public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("doPost"); } @Override public void destroy() { System.out.println("Destroy servlet"); } }

和一个看起来像这样的web.xml

   Archetype Created Web Application  index.jsp   Bla instrurental_proj.servlets.Bla   Bla /bla   

当我访问urlhttp://localhost:8080/instrurental/bla ,控制台中会打印出以下内容:

 init service 

但不是像我期望的那样doGet 。 此外,浏览器中没有打印出任何内容! (我期待它说“It Works”)。

从昨天开始,我一直在努力解决这个问题。 有没有人有任何建议, 问题是什么?

你为什么要重写服务方法。 没有必要这样做。 删除它或打电话

 super.service(request,response); 

原因
试着看看HttpServlet类的来源。 在那里你会看到,根据用于调用servlet的方法,即GET / POST,调用必要的方法doGet()或doPost()。 当容器实际收到请求时,它会启动一个新线程并通过调用service()方法为客户端提供服务。 因此,如果你覆盖它并且不调用超类的服务方法或定义你自己的策略,那么将调用GET,永远不会调用doGet()方法。 您的请求从不调用doGet()方法,它调用它的service()方法。