Servlet学习

Server applet

概念:运行在服务器端的小程序

  • Servlet就是一个接口,定义了Java类被浏览器访问到(tomcat识别)的规则。

  • 将来我们自定义一个类,实现Servlet接口,复写方法。

    package com.jplus.action;
    
    import javax.servlet.*;
    import javax.servlet.http.HttpServlet;
    import java.io.IOException;
    
    public class ServletDemo 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() {
    
        }
    }
    
  • 配置Servlet

    在web.xml中配置

    <!-- 配置Servelt -->
        <servlet>
            <servlet-name>Demo</servlet-name>
            <servlet-class>com.jplus.action.ServletDemo</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>Demo</servlet-name>
            <url-pattern>/Demo</url-pattern>
        </servlet-mapping>
    

执行原理

  1. 当服务器接收到客户端浏览器请求后,会解析请求URL路径,获取访问的Servlet的资源路径
  2. 查找web.xml文件,是否有对应的标签体内容
  3. 如果有,则在找到对应的全类名
  4. tomcat会将字节码文件加载进内存,并创建其对象
  5. 调用其方法

Servlet中的生命周期

  1. 被创建:执行init方法,只执行一次

    • Servlet什么时候被创建

      默认情况:在第一次被访问时候被创建

      可以配置web.xml,改变创建的时机

      <servlet>
              <servlet-name>Demo</servlet-name>
              <servlet-class>com.jplus.action.ServletDemo</servlet-class>
              <!--指定Servlet创建时机
              1.第一次被访问时创建 <load-on-startup>负数
              2.服务器启动的时候被创建 <load-on-startup>0或正数
              -->
              <load-on-startup>5</load-on-startup>
          </servlet>
      
    • Servlet的init方法,只执行一次,说明一个Servlet在内存中只存在一个对象,Servlet是单例的

      多个用户同时访问,可能存在线程安全问题

      解决:不要再Servlet中定义成员变量,定义成员变量,不要修改值。

  2. 提供服务:执行service方法,执行多次

    每次访问Servlet时,Service方法都会被调用一次

  3. 被销毁:执行destroy方法,只执行一次

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

Servlet3.0

注解配置

  1. 选择Servlet的版本3.0以上,可以不创建web.xml

  2. 定义一个类,实现Servlet接口

  3. 复写方法

  4. 使用注解

    @WebServlet(“资源路径”)

IDEA与Tomcat相关配置

  1. IDEA会为每一个tomcat部署的项目单独建立一份配置文件
  2. 工作空间项目和tomcat部署的web项目不一样,Tomcat访问的是“Tomcat部署的web项目”,Tomcat部署的web项目,对应着工作空间项目,web目录下的所有资源。
  3. WEB-INF文件夹一下的文件访问不到
  4. Tomcat项目怎么断点调试,点IDEA里面的“小虫子”

Servlet的体系结构

Servlet - -接口

GenericServlet - -抽象类

将Servlet接口中其他方法做了默认空实现,只将service( )方法作为抽象,

将来定义Servlet类时,可以继承GenericServlet,实现service( )方法即可

HttpServlet - -抽象类

定义类继承HttpServlet

复写doGet/doPost方法

原文地址:https://www.cnblogs.com/cwstd/p/14126983.html