• javaweb-servlet


     

    Servlet创建方式

     

    Servlet执行流程

     

    浏览器发出http://localhost:8080/web-demo/demo1请求,从请求中可以解析出三部分内容,分别是localhost:8080、web-demo、demo1

    • 根据localhost:8080可以找到要访问的Tomcat Web服务器

    • 根据web-demo可以找到部署在Tomcat服务器上的web-demo项目

    • 根据demo1可以找到要访问的是项目中的哪个Servlet类,根据@WebServlet后面的值进行匹配

    找到ServletDemo1这个类后,Tomcat Web服务器就会为ServletDemo1这个类创建一个对象,然后调用对象中的service方法

    • ServletDemo1实现了Servlet接口,所以类中必然会重写service方法供Tomcat Web服务器进行调用

    • service方法中有ServletRequest和ServletResponse两个参数,ServletRequest封装的是请求数据,ServletResponse封装的是响应数据,后期我们可以通过这两个参数实现前后端的数据交互

    Servlet生命周期

     

    1. 加载和实例化:默认情况下,当Servlet第一次被访问时,由容器创建Servlet对象

      1. 默认情况,Servlet会在第一次访问被容器创建,但是如果创建Servlet比较耗时的话,那么第一个访问的人等待的时间就比较长,用户的体验就比较差,那么我们能不能把Servlet的创建放到服务器启动的时候来创建,具体如何来配置?
      2. @WebServlet(urlPatterns = "/demo1",loadOnStartup = 1)
      3. loadOnstartup的取值有两类情况
      4. 1)负整数:第一次访问时创建Servlet对象
      5. 20或正整数:服务器启动时创建Servlet对象,数字越小优先级越高

      2、初始化:在Servlet实例化之后,容器将调用Servlet的init()方法初始化这个对象,完成一些如加载配置文件、创建连接等初始化的工作。该方法只调用一次

      3、请求处理:每次请求Servlet时,Servlet容器都会调用Servlet的serviced方法对请求进行处理

      4、服务终止:当需要释放内存或者容器关闭时,容器就会调用Servlet实例的destroy方法完成资源的释放。在destroy()方法调用之后,容器会释放这个Servlet实例,该实例随后会被Java的垃圾收集器所回收

    1. package com.itheima.web;
    2. import javax.servlet.*;
    3. import javax.servlet.annotation.WebServlet;
    4. import java.io.IOException;
    5. /**
    6. * Servlet生命周期方法
    7. */
    8. @WebServlet(urlPatterns = "/demo2",loadOnStartup = 1)
    9. public class ServletDemo2 implements Servlet {
    10. /**
    11. * 初始化方法
    12. * 1.调用时机:默认情况下,Servlet被第一次访问时,调用
    13. * * loadOnStartup: 默认为-1,修改为0或者正整数,则会在服务器启动的时候,调用
    14. * 2.调用次数: 1次
    15. * @param config
    16. * @throws ServletException
    17. */
    18. public void init(ServletConfig config) throws ServletException {
    19. System.out.println("init...");
    20. }
    21. /**
    22. * 提供服务
    23. * 1.调用时机:每一次Servlet被访问时,调用
    24. * 2.调用次数: 多次
    25. * @param req
    26. * @param res
    27. * @throws ServletException
    28. * @throws IOException
    29. */
    30. public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
    31. System.out.println("servlet hello world~");
    32. }
    33. /**
    34. * 销毁方法
    35. * 1.调用时机:内存释放或者服务器关闭的时候,Servlet对象会被销毁,调用
    36. * 2.调用次数: 1次
    37. */
    38. public void destroy() {
    39. System.out.println("destroy...");
    40. }
    41. public ServletConfig getServletConfig() {
    42. return null;
    43. }
    44. public String getServletInfo() {
    45. return null;
    46. }
    47. }

    Servlet对象在什么时候被创建的?

    默认是第一次访问的时候被创建,可以使用@WebServlet(urlPatterns = “/demo2”,loadOnStartup = 1)的loadOnStartup 修改成在服务器启动的时候创建。

    Servlet生命周期中涉及到的三个方法,这三个方法是什么?什么时候被调用?调用几次?

    涉及到三个方法,分别是 init()、service()、destroy()

    init方法在Servlet对象被创建的时候执行,只执行1次

    service方法在Servlet被访问的时候调用,每访问1次就调用1次

    destroy方法在Servlet对象被销毁的时候调用,只执行1次

    Servlet方法介绍

     

     

    1. package com.itheima.web;
    2. import javax.servlet.*;
    3. import javax.servlet.annotation.WebServlet;
    4. import java.io.IOException;
    5. /**
    6. * Servlet方法介绍
    7. */
    8. @WebServlet(urlPatterns = "/demo3",loadOnStartup = 1)
    9. public class ServletDemo3 implements Servlet {
    10. private ServletConfig servletConfig;
    11. /**
    12. * 初始化方法
    13. * 1.调用时机:默认情况下,Servlet被第一次访问时,调用
    14. * * loadOnStartup: 默认为-1,修改为0或者正整数,则会在服务器启动的时候,调用
    15. * 2.调用次数: 1次
    16. * @param config
    17. * @throws ServletException
    18. */
    19. public void init(ServletConfig config) throws ServletException {
    20. this.servletConfig = config;
    21. System.out.println("init...");
    22. }
    23. public ServletConfig getServletConfig() {
    24. return servletConfig;
    25. }
    26. /**
    27. * 提供服务
    28. * 1.调用时机:每一次Servlet被访问时,调用
    29. * 2.调用次数: 多次
    30. * @param req
    31. * @param res
    32. * @throws ServletException
    33. * @throws IOException
    34. */
    35. public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
    36. System.out.println("servlet hello world~");
    37. }
    38. /**
    39. * 销毁方法
    40. * 1.调用时机:内存释放或者服务器关闭的时候,Servlet对象会被销毁,调用
    41. * 2.调用次数: 1次
    42. */
    43. public void destroy() {
    44. System.out.println("destroy...");
    45. }
    46. public String getServletInfo() {
    47. return "";
    48. }
    49. }

  • 相关阅读:
    全面解析UDP协议(特点、报文格式、UDP和TCP的区别)
    电子元器件包装类型
    【计网】一些问题
    kafka可视化工具
    行业轮动从动量因子说起
    后端Long型数据传到前端js后精度丢失的问题
    Excel If函数
    微信小程序的生命周期概览
    LeetCode刷题---简单组(一)
    【问题】在安装torchvision的时候,会自动安装torch?
  • 原文地址:https://blog.csdn.net/weixin_42383952/article/details/127649166