Java学习笔记(六十七)—— Servlet

概述
  • 概念:运行在服务器端的小程序,server applet
    • Servlet就是一个接口,定义了java类被浏览器访问到(tomcat识别)的规则
    • 我们自定义一个类,实现servlet接口,复写方法
快速入门
  1. 创建JavaEE的项目
  2. 定义一个类 ,实现Servlet接口
  3. 实现接口中的抽象方法
    public class ServletDemo1 implements Servlet {
        @Override
        public void init(ServletConfig servletConfig) throws ServletException {
    
        }
    
        @Override
        public ServletConfig getServletConfig() {
            return null;
        }
        // 提供服务
        @Override
        public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
            System.out.println("hello servlet");
        }
    
        @Override
        public String getServletInfo() {
            return null;
        }
    
        @Override
        public void destroy() {
    
        }
    }
  4. 配置Servlet
    <!--配置servlet,在web.xml中-->
        <servlet>
        	<!--资源名称-->
            <servlet-name> demo1</servlet-name>
            <!--servlet实现类的路径-->
            <servlet-class>cn.itcast.web.servlet.ServletDemo1</servlet-class>
        </servlet>
        <servlet-mapping>
         <servlet-name>demo1</servlet-name>
         	<!--访问的虚拟路径-->
            <url-pattern>/demo1</url-pattern>
        </servlet-mapping>
执行原理
  1. 当服务器端接收到客户端浏览器的请求后,会解析请求URL路径,获取访问的servlet的资源路径
  2. 当web.xml文件是否有对应的标签体内容。
  3. 如果有,则在找到对应的全类名
  4. tomcat会将字节码文件加载进内存,然后创建其对象
  5. 调用方法
Servlet中的声明周期
  1. 被创建:执行init方法,只执行一次

    • Servlet什么时候被创建
      • 默认情况下,第一次访问时,Servlet被创建
      • 可以配置Servlet的创建时机
        <!--在web.xml文件中,<servlet>标签中配置-->
        <!--负数,第一次访问时被创建-->
        <load-on-startup>-1<load-on-startup>
        <!--正数或0,服务器启动时被创建-->
        <load-on-startup>0<load-on-startup>
    • Servlet的init方法,只执行一次,说明一个Servlet在内存中只存在一个对象,Servlet是单列的
      • 多个用户同时访问时可能存在线程安全问题
      • 解决:尽量不要在Servlet中定义成员变量,即使定义了,也不要赋值
  2. 提供服务:执行service方法,执行多次

    • 每次访问Servlet时,service方法都会执行一次
  3. 被销毁:执行destory方法,只执行一次

    • Servlet被销毁时执行。服务器正常关闭时,destory执行。一般用于销毁资源
    public class ServletDemo2 implements Servlet {
        /*初始化方法,在servlet被创建时执行,只会执行一次*/
        @Override
        public void init(ServletConfig servletConfig) throws ServletException {
            System.out.println("init.....");
        }
        /*获取ServletConfig对象,也就时servlet的配置对象*/
        @Override
        public ServletConfig getServletConfig() {
            return null;
        }
        /*提供服务的方法,每一次Servlet被访问时执行,执行多次*/
        @Override
        public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
            System.out.println("service....");
        }
        /*获取servlet的一些信息*/
        @Override
        public String getServletInfo() {
            return null;
        }
        /*销毁方法,在服务器被关闭时执行,只执行一次*/
        @Override
        public void destroy() {
            System.out.println("destory....");
        }
    }
Servlet3.0注解配置
  • 支持注解配置,可以不需要web.xml了
  • 步骤:
  1. 创建JavaEE项目,选择Servlet的版本3.0以上,可以不创建web.xml
  2. 定义一个类实现Servlet接口
  3. 复写方法
  4. 在类上使用@WebServle注解,进行配置
    @WebServlet("资源路径")
IDEA与Tomcat相关配置
  1. IDEA为每一个tomcat部署的项目单独建立一份配置文件
    查看控制台的log:Using CATALINA_BASE: "C:\Users\User\.IntelliJIdea2019.3\system\tomcat\_basic-code
  2. 工作空间和tomcat部署的web项目
    1.tomcat真正访问的是“tomcat部署的web项目”,“tomcat部署的web项目”对应“工作空间项目”的web目录下的所有资源
    2.WEB_INFO目录下的资源不能被浏览器直接访问
    3.段点调试:使用“小虫子”启动,debug启动
Servlet体系
  • GenericServlet :抽象类,继承至Servlet
    • 将 Servlet 接口中其他的方法做了默认空实现,只将 service 方法作为抽象
      将来定义 Servlet 类时,可以继承 GenericServlet,实现 service 方法即可
  • HttpServlet:抽象类,继承至 GenericServlet,对 http 协议的一种封装,简化操作
    • 定义类继承 HttpServlet
    • 复写 doGet/doPost
Servlet相关配置
  • urlpartten:Servlet访问路径
    • 一个Servlet可以定义多个访问路径:@WebServlet({"/d2","/ddd2"})
    • 路径的定义规则
    1. /xxx
    2. /xxx/xxx:多层路径,目录结构
    3. *.do
发布了113 篇原创文章 · 获赞 1 · 访问量 922

猜你喜欢

转载自blog.csdn.net/weixin_44876003/article/details/103458316
今日推荐