Servlet进阶
- 一、Dispatcher
- 二、doGet、doPost、Service方法的区别
- 1. 三者联系
- 2. 使用规则
- 三、Servlet的生命周期
- 四、Servlet、Servlet容器、Web服务器
一、Dispatcher
- 一个Web App就是由一个或多个Servlet组成的,每个Servlet通过注解说明自己能处理的路径。
- 早期的Servlet需要在web.xml中配置映射路径,但最新Servlet版本只需要通过注解就可以完成映射。
@WebServlet(urlPatterns = "/hello")
public class HelloServlet extends HttpServlet {
...
}
@WebServlet(urlPatterns = "/signin")
public class SignInServlet extends HttpServlet {
...
}
@WebServlet(urlPatterns = "/")
public class IndexServlet extends HttpServlet {
...
}
- 因为浏览器发送请求的时候,还会有请求方法(HTTP Method):即GET、POST、PUT等不同类型的请求。因此,要处理GET请求,我们要覆写doGet()方法,类似的,要处理POST请求,就需要覆写doPost()方法。
@WebServlet(urlPatterns = "/hello")
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
...
}
}
- 浏览器发出的HTTP请求总是由Web Server先接收,然后,根据Servlet配置的映射,不同的路径转发到不同的Servlet,这种根据路径转发的功能我们一般称为Dispatch。
- Dispatcher的逻辑伪代码如下
String path = ...
if (path.equals("/hello")) {
dispatchTo(helloServlet);
} else if (path.equals("/signin")) {
dispatchTo(signinServlet);
} else {
// 所有未匹配的路径均转发到"/"
dispatchTo(indexServlet);
}
二、doGet、doPost、Service方法的区别
参考文章1:三者联系
参考文章2:使用规则
1. 三者联系
service是负责调用doGet和doPost两个方法的,一般不需要直接重写。service()它包含了doget和dopost ;service方法是接口中的方法,servlet容器把所有请求发送到该方法,该方法默认行为是转发http请求到doXXX方法中,如果你重载了该方法,默认操作被覆盖,不再进行转发操作!
2. 使用规则
- service方法:可以处理get/post方式的请求,如果servlet中有service方法,会优先调用service方法
- doGet方法: 处理get方法的请求
- doPost方法: 处理post方式的请求
- super.service方法:则service方法处理完后,会再次根据请求方式响应doGet和doPost方法执行
三、Servlet的生命周期
-
init()方法在servlet生命周期的初始化阶段被调用。它传递一个实现了javax.servlet.ServletConfig接口的对象,使得servlet能够从web application中获取初始化参数。
-
servlet初始化收,每接收一个请求,就会调用service()方法。每个请求的处理都在独立的线程中进行。Web服务器对每个请求都会调用一次service()方法。service()方法判断请求的类型,并把它转发给相应的方法进行处理。
-
当需要销毁servlet对象时,就要调用destroy()方法。该方法释放被占用的资源。
四、Servlet、Servlet容器、Web服务器
1. Web Server:让Servlet运行起来的Web服务器,例如Tomcat。
2. Servlet Container:Servlet容器就是用来装Servlet的。
3. Servlet:以init、service、destroy为生命周期