2017-01-30 7 views
0

Я создал проект, в котором три строковых параметра, введенные пользователем, отправляются сервлету с именем controller. Там я использовал RequestDispatcher для пересылки этих трех параметров на страницу JSP и их печати. Я сделал что-то и заработал, но не понимаю, почему это работает, только если я поместил все команды в метод service(). Я хотел бы знать правильный или стандартный способ достижения этого же результата. А также я буду рад узнать о действиях методов doGet(), doPost() и service() и ProcessRequest(). Это код сервлета:Где и как doGet, doPost и сервис в сервлетах работают?

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 { 
    } 
} 

ответ

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 или оба.