有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java不能使用注释运行简单的servlet

我是新的java程序员。因此,我确实了解在web上通过映射等方式运行servlet的过程。xml和我也可以通过注释启动servlet,我的问题是,当我使用注释并在服务器上运行项目时,为什么我必须在项目名称之后的URL中写入serlvet名称才能启动它

有没有办法不用网络。xml文件,给出注释,然后当我在服务器上运行project时,它会自动启动并运行servlet?而不是编写servlet名称并点击enter键启动它

@WebServlet(urlPatterns = {"/GetDate"})

public class GetDate extends HttpServlet{

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Date date =new Date();

        resp.setContentType("text/html");//this says we will send back html type 
        //get a pen to write back
        PrintWriter pen=resp.getWriter();
        //write back
        pen.write(date.toString());

    }
}

我希望上述简单的servlet在我从eclipse中选择RunonServer后立即自动启动


共 (3) 个答案

  1. # 1 楼答案

    都是@WebServlet符号。如果您将代码更改为:

    @WebServlet(urlPatterns = {"/"})
    public class GetDate extends HttpServlet {
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            Date date =new Date();
    
            resp.setContentType("text/html");//this says we will send back html type
            //get a pen to write back
            PrintWriter pen=resp.getWriter();
            //write back
            pen.write(date.toString());
    
        }
    }
    

    然后在/URL(在您的Web应用程序名称之后)提供servlet

    做这件事要小心。传统上,您从/位置提供HTML资源。如果你用servlet来处理这个问题,那么你就不能提供HTML。另外,如果您有多个servlet,那么哪一个获取/路径-其余的去哪里?让URL与servlet匹配可能有点自我记录。请注意,不需要将它与servlet保持相同的名称-如果愿意,可以调用它/myBigLongURLMapping-名称由您决定

  2. # 2 楼答案

    您可以在注释中指定启动时加载,然后在web服务器启动时调用servlet的init()方法

    @WebServlet(urlPatterns = {"/GetDate"}, loadOnStartup=1)
    public class GetDate extends HttpServlet{
    
    @Override
    public void init() throws ServletException {
        // do some init stuff
    }
    
  3. # 3 楼答案

    不要像这样写@WebServlet(urlPatterns = {"/GetDate"})

    @WebServlet("/GetDate")
    public class GetDate extends HttpServlet{
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            Date date =new Date();
    
            resp.setContentType("text/html");//this says we will send back html type 
            //get a pen to write back
            PrintWriter pen=resp.getWriter();
            //write back
            pen.write(date.toString());
    
        }
    }