一个sevlet的例子,调试跟踪的时候出了问题
qwa 2017-12-04 09:46:28 我记得看到的资料都说,调用servlet的时候,会进入HttpServlet中,然后用public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException来判断method方法,然后根据方法调用doGet和doPost,但是我在跟踪调试的时候,却发现,竟然是先进入doGet或者doPost,然后才进入Service,并且在 Service的if语句中就跳出了,并进入了NoBodyResponse的setHeader,不知道怎么回事。请高手给解释解释。是不是配置有问题?我用的的是idea16 + maven
if (!(req instanceof HttpServletRequest &&
res instanceof HttpServletResponse)) {
throw new ServletException("non-HTTP request or response");
}
以下是我的代码
/**
* Created by ShenLiang on 2017/11/30.
*/
package servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
public class FirstServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private int serial = 0;
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
this.log("序号:"+serial + "======doGet");
serial++;
execute(req,resp);
}
@Override
public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
this.log("序号:"+serial + "======doPost");
serial++;
execute(req,resp);
}
private void execute(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException{
resp.setCharacterEncoding("UTF-8");
req.setCharacterEncoding("UTF-8");
String requestURI = req.getRequestURI();
String method = req.getMethod();
String param = req.getParameter("param");
resp.setContentType("text/html");
PrintWriter out = resp.getWriter();
//输出到客户端浏览器
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.println(" 以 " + method + " 方式访问该页面。取到的 param 参数为:" + param + "<br/>");
out.println(" <form action='" + requestURI + "' method='get'><input type='text' name='param' value=''><input type='submit' value='以 GET 方式访问 RequestServlet'></form>");
out.println(" <form action='" + requestURI + "' method='post'><input type='text' name='param' value=''><input type='submit' value='以 POST 方式访问 RequestServlet'></form>");
// 由客户端浏览器读取该文档的更新时间
out.println(" <script>document.write('本页面最后更新时间:' + document.lastModified + '<br />'); </script>");
out.println(" <script>document.write('本页面URL:' + location + '<br/>' ); </script>");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
@Override
protected long getLastModified(HttpServletRequest req) {
this.log("序号:" + serial + "======getLastModified");
serial++;
return 1;
}
@Override
public void init() throws ServletException {
this.log("序号:"+serial + "======init()");
serial++;
}
@Override
public void destroy() {
this.log("序号:" + serial + "======destroy()");
serial++;
}
}