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

  • servlet就是一个接口,定义了java类被浏览器访问(tomcat识别)的规则
  • 自定义一个类,实现Servlet接口,复写方法

快速入门

步骤

1 创建JavaEE项目
2 定义一个类,实现Servlet接口
public class ServletDemo01 implements Servlet
3 实现接口中的抽象方法
4 配置方法
在WEB-INF/web.xml中配置以下代码(写在

  1. <!-- 配置Servlet-->
  2. <servlet>
  3. <servlet-name>demo1</servlet-name>
  4. <servlet-class>cn.roderick.web.servlet.ServletDemo01</servlet-class>
  5. </servlet>
  6. <servlet-mapping>
  7. <servlet-name>demo1</servlet-name>
  8. <url-pattern>/demo1</url-pattern>
  9. </servlet-mapping>

servlet执行原理

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

截屏2020-10-24 10.40.52.png

Servlet生命周期

  • 被创建:执行init方法,只执行一次
    • Servlet什么时候被创建?
      • 默认情况下,第一次被访问时,Servlet被创建
      • 可以配置执行Servlet的创建时机:在标签下配置

执行Servlet的创建时机

     - 1.第一次被访问时,创建        

的值为负数

     - 2.在服务器启动时,创建        

的值为0或正整数

  • Servlet的init方法,只执行一次,说明一个Servlet在内存中只存在一个对象,Servlet是单例的
    • 多个用户同时访问时,可能存在线程安全问题
    • 解决:尽量不要再Servlet中定义成员变量。即使定义了成员变量,也不要对其修改值
      • 提供服务:执行service方法,执行多次
  • 每次访问Servlet时,service方法都会被调用一次
    • 被销毁:执行destroy方法,执行一次
  • Servlet被销毁时执行。服务器关闭时,servlet被销毁
  • 只有服务器正常关闭时,才会执行destroy方法
  • 在销毁之前被执行,一般用于释放资源

Servlet3.0

  • 好处
    • 支持注解配置,可以不需要web.xml了
  • 步骤:
    • 创建JavaEE项目,选择Servlet的版本3.0以上,可以不创建web.xml
    • 定义一个类,实现servlet接口
    • 复写抽象方法
    • 在类上使用@WebServlet注解,进行配置

@WebServlet("资源路径")

Servlet体系结构

Servelt — 接口
|
GenericServlet — 抽象类
|
HttpServlet — 抽象类

GenericServlet :

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

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

    HttpServlet🌟🌟

    对http协议的一种封装,简化操作

  • 定义类继承HttpServlet

  • 复写doGet/doPost方法

    @WebServlet("/demo3")
    public class ServletDemo3 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       System.out.println("doGet..");
    }
    
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       System.out.println("doPost...");
    }
    }
    

Servlet相关配置

  • urlpartten:Servlet访问路径
    • 一个Servlet可以定义多个访问路径:@WebServlet({"/d4","/dd4","/ddd4"})
    • 路径定义规则:
      • /xxx
      • /xxx/xxx :多层路径 “目录结构”
      • *.do