Servlet生命周期

实现Servlet之后,Servlet中的方法:

init()

被创建
默认情况下,访问第一次创建时只执行一次,用于加载资源
可以在web.xml中配置Servlet的创建时机
中配置,值为负数时,按照默认情况来,如果值为0或正整数时,在服务器启动时就创建此Servlet。

此Servlet对象在内存中只存在一个,是单例的,因此,会存在线程安全问题
· 解决方案:不在Servlet中定义成员变量,即使定义了成员变量,也不要对其修改值。

service()

提供服务
每次请求此servlet,service方法就执行

destroy()

被销毁时,服务器关闭时,Servlet被销毁,只有服务器正常关闭时,才会执行destroy方法,在被销毁之前执行,用于释放资源
终止时执行

Servlet还有两个方法:
getServletConfig()获取servlet配置对象
和getServletInfo获取servlet信息
image.png
image.png
新建servlet
image.png

response.getWriter():获得PrintWriter对象,用于向网页输出字符;
request.getContextPath():获取servlet访问路径中的工程名部分。

不仅可以通过web.xml定义虚拟路径,使用注解@WebServlet(“/xxx”)也可以,类似python里的装饰器。

  1. package cn.java.servlet;
  2. import java.io.IOException;
  3. import javax.servlet.ServletConfig;
  4. import javax.servlet.ServletException;
  5. import javax.servlet.annotation.WebServlet;
  6. import javax.servlet.http.HttpServlet;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9. /**
  10. * Servlet implementation class LifeServlet
  11. */
  12. @WebServlet("/LifeServlet")
  13. public class LifeServlet extends HttpServlet {
  14. private static final long serialVersionUID = 1L;
  15. // 只有第一次请求会触发
  16. @Override
  17. public void init(ServletConfig config) throws ServletException {
  18. // TODO Auto-generated method stub
  19. System.out.println("Servlet的init方法");
  20. }
  21. // 每次请求都会触发
  22. @Override
  23. protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  24. // TODO Auto-generated method stub
  25. System.out.println("Servlet被请求了");
  26. }
  27. // 工程从tomcat移除会触发
  28. @Override
  29. public void destroy() {
  30. // TODO Auto-generated method stub
  31. System.out.println("Servlet被销毁了");
  32. }
  33. }

image.png