j2ee中的Servlet细节笔记

发布于 2020-04-09  402 次阅读


映射细节

同一个Servlet,可以配置多个url-pattern.

资源通配符配置: *(任意个数的任意字符)

  1. /* 或则/system/*
    /:随便一个字符,都可以访问当前Servlet.
    /system/
    :所以以 /system/ 打头的资源名才可以访问该Servlet.(登陆验证)

  2. *.拓展名
    *.itsource:资源名必须以.itsource结尾才可以访问当前Servlet.

配置Servlet的时候,不能起名为default.

在Tomcat中,主web.xml文件,规定了,访问静态资源都得通过default的Servlet.

Servlet对象的生命周期:

第一次访问的:

构造器--->init--->service

第N次:

service

在框架中,我们习惯给Servlet配置:来决定其构建和初始化顺序.

学习Struts1/SpringMVC的时候,优先启动该Servlet(该Servlet主要负责加载资源和初始化操作.)

Servlet3.0新特性-注解配置

从JavaEE6(Tomcat7,Servlet3.0)开始,可以使用注解来取代部分web.xml配置.

  1. 将web.xml文件的metadata-complete="true"修改为false.意思是扫描类上的WebServlet注解。(为true时不会扫描WebServlet)

  2. 在需要部署的类的声明的上面贴上@WebServlet()

  3. Servlet的线程安全问题


每对应一个请求,服务器就会产生一个线程。然而servlet是单例的,只存在一个对象,多线程并发访问同一个资源时就会出现线程安全问题。

解决方案:

  1. 让Servlet实现javax.servlet.SingleThreadModel接口,这样同时就只能一个线程来访问(影响性能,不推荐)。
  2. 在servlet中不要使用成员变量(变量在方法体内,是局部变量。每一个线程来访问时都有与其对应的局部变量,就避免了线程安全问题)。

做一只特立独行的猪