请求过程:
简单描述其过程就是:当请求到达服务器上的Web容器后,容器通过查找对应的servlet响应此次请求。
详细分析:
- 请求到达web容器
- 容器解析此次请求,并创建一个请求对象和响应对象
- 容器将请求信息设置给上述两个对象(HttpServletRequest和HttpServletResponse)
- 容器根据 @WebServlet标签或者web.xml文件 查找对应的Servlet
- 容器调用service()方法,将之前设置的HttpServletRequest和HttpServletResponse作为参数传入
- service()方法会调用对应的doxxx()方法处理此次请求
service()方法定义在servlet接口内
举例说明:
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class Demo
*/
@WebServlet("/Demo")
public class Demo extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public Demo() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.getWriter().append("Served at: ").append(request.getContextPath());
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
容器根据@WebServlet("/Demo")调用Demo类。观察此类可以发现,其继承自HttpServlet类,并且实现了doGet()和doPost()方法。
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.getWriter().append("Served at: ").append(request.getContextPath());
}
上述两个方法,都将HttpServletRequest和HttpServletResponse两个对象作为方法参数。
结果显示: