servlet中的getGet,doPost和service在哪里以及如何工作?

时间:2017-01-30 16:30:27

标签: java jsp servlets requestdispatcher

我做了一个项目,其中用户输入的三个字符串参数被发送到名为controller的servlet。 在那里,我使用RequestDispatcher将这三个参数转发到JSP页面并打印它们。 我已经做了一些事情并使其工作,但我很困惑,为什么它只有在我将所有命令放在service()方法中时才有效。 我很想知道实现同样结果的正确或标准方法。 而且我也很高兴知道doGet(),doPost()和service()以及ProcessRequest()方法的实际工作。 这是Servlet代码:

public class controller extends HttpServlet {

    public String TName,TUserName,TPassword;

    @Override
    public void service(HttpServletRequest request, HttpServletResponse response) 
        throws IOException, ServletException{     
        TName = request.getParameter("name");
        TUserName = request.getParameter("UserName");
        TPassword = request.getParameter("Password");    
        RequestDispatcher rd =getServletContext().getRequestDispatcher("/welcome.jsp");
        request.setAttribute("TName,TUserName,TPassword", rd);
        rd.forward(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      processRequest(request, response);
    }

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
    }
}

1 个答案:

答案 0 :(得分:0)

如果你检查你所在的课程,你会看到以下代码

protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    String method = req.getMethod();
    long errMsg;
    if(method.equals("GET")) {
        errMsg = this.getLastModified(req);
        if(errMsg == -1L) {
            this.doGet(req, resp);
        } else {
            long ifModifiedSince = req.getDateHeader("If-Modified-Since");
            if(ifModifiedSince < errMsg / 1000L * 1000L) {
                this.maybeSetLastModified(resp, errMsg);
                this.doGet(req, resp);
            } else {
                resp.setStatus(304);
            }
        }
    } else if(method.equals("HEAD")) {
        errMsg = this.getLastModified(req);
        this.maybeSetLastModified(resp, errMsg);
        this.doHead(req, resp);
    } else if(method.equals("POST")) {
        this.doPost(req, resp);

如您所见,请求首先发送到服务方法,而不是分发到相应的特定方法,如“GET”,“POST”等。

因此,如果您想在不使用服务的情况下运行它,您应该覆盖doGet或doPost或两者。