1、 Servlet是什么?
Servlet(Service applet)叫小服务应用程序,是Sum公司提供的一种开发动态资源技术,它能够让 Java程序在Web环境中被访问,有效地代替了公共网关接口(Common Gateway Interface,CGI),通过多线程的方式来处理并发请求,而不是像CGI那样,基于进程的方式来处理请求;
2、Servlet的生命周期
1)创建Servlet实例,可在web.xml文件中配置创建时机:
load-on-startup=1,容器启动时创建;
load-on-startup=0,初次访问时创建,默认值;
2)调用init方法,在创建实例的时候,会同时调用init方法进行初始化,init方法有2种重载方法,默认调用init无参方法,当在web.xml中配置了init-param时,可以通过init(ServletConfig cfg)获取配置参数值;
3)调用Service方法,容器自动判断请求类型分别调用doGet或doPost方法;
4)调用destroy方法,在容器关闭时调用销毁Servlet对象;
3、生命周期验证实例
package xw.zx;
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;
import com.sun.org.apache.xml.internal.security.Init;
/**
* 基于注解的方式定义ServletLife对应的url-pattern
* 注意不要在web.xml中重复定义同名的url-pattern,否则会报错
* @author Administrator
*
*/
@WebServlet("/life")
public class ServletLife extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
public void init() throws ServletException {
System.out.println("初始化Servlet");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("调用Servlet的doGet方法");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
@Override
public void destroy() {
System.out.println("销毁 Servlet");
}
}
启动tomcat 容器,在浏览器中输入:localhost:8080/servletdemo/life后的输出结果:
4、总结
从生命周期的执行过程中,不难发现Servlet采用单例模式来处理多用户的并发请求(每次都在新的线程中调用Servlet对象的service方法并传入客户端传来的req和res),所以当Servlet的service方法调用了共用资源(全局变量)时,需要注意线程安全问题,应用Synchronized小范围加锁或者实现SingleThreadMode标签接口(已被摒弃);
注:小白能力有限,如有错误,请帮忙纠正哦,谢谢~