Servlet生命周期
init()
被创建
默认情况下,访问第一次创建时只执行一次,用于加载资源
可以在web.xml中配置Servlet的创建时机
此Servlet对象在内存中只存在一个,是单例的,因此,会存在线程安全问题
· 解决方案:不在Servlet中定义成员变量,即使定义了成员变量,也不要对其修改值。
service()
destroy()
被销毁时,服务器关闭时,Servlet被销毁,只有服务器正常关闭时,才会执行destroy方法,在被销毁之前执行,用于释放资源
终止时执行
Servlet还有两个方法:
getServletConfig()获取servlet配置对象
和getServletInfo获取servlet信息
新建servlet
response.getWriter():获得PrintWriter对象,用于向网页输出字符;
request.getContextPath():获取servlet访问路径中的工程名部分。
不仅可以通过web.xml定义虚拟路径,使用注解@WebServlet(“/xxx”)也可以,类似python里的装饰器。
package cn.java.servlet;
import java.io.IOException;
import javax.servlet.ServletConfig;
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 LifeServlet
*/
@WebServlet("/LifeServlet")
public class LifeServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
// 只有第一次请求会触发
@Override
public void init(ServletConfig config) throws ServletException {
// TODO Auto-generated method stub
System.out.println("Servlet的init方法");
}
// 每次请求都会触发
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
System.out.println("Servlet被请求了");
}
// 工程从tomcat移除会触发
@Override
public void destroy() {
// TODO Auto-generated method stub
System.out.println("Servlet被销毁了");
}
}