我做了一个项目,其中用户输入的三个字符串参数被发送到名为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 {
}
}
答案 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或两者。