Servlet——映射细节、3.0注解配置、线程不安全问题

目录

  • Servlet映射细节
  • Servlet3.0新特性-注解配置
  • Servlet线程不安全问题

Servlet映射细节

跳转到目录

  • 一个Servlet可以有多个(可以使用多个资源名称找到当前的Servlet), 也可以有多个
    Servlet——映射细节、3.0注解配置、线程不安全问题_第1张图片
  • 配置Servlet可以使用通配符( * )
    * : 表示任意字符
    /* :可以使用任意的字符访问当前的Servlet
    /xxx/* : xxx表示一个模块,/system/* (登陆验证)
    *.拓展名: 请求的资源必须以.zy结尾才能访问Servlet
    Servlet——映射细节、3.0注解配置、线程不安全问题_第2张图片
  • 自定义的Servlet的<servlet-name>不能够为default,使用它会造成项目下面的静态资源找不到;在Tomcat/conf/web.xml文件中配置一个名字为default的Servlet,该Servlet在负责访问项目下的静态资源
    Servlet——映射细节、3.0注解配置、线程不安全问题_第3张图片

Servlet3.0新特性-注解配置

跳转到目录
一、传统的使用XML做Servlet配置

    
    <servlet>
        <servlet-name>secondServletservlet-name>
        <servlet-class>com.sunny._01_servlet.MyServlet2servlet-class>
        
        <init-param>
            <param-name>encodingparam-name>
            <param-value>UTF-8param-value>
        init-param>
    servlet>

    <servlet-mapping>
        <servlet-name>secondServletservlet-name>
        <url-pattern>/MyServlet2url-pattern>
    servlet-mapping>

问题: 在一个应用中存在很多Servlet,那么配置文件就会非常臃肿,开发效率低,不便于后期的维护.
解决方案: 在Tomcat7开始, 可以使用**注解(WebServlet)**来取代XML配置.

二、使用注解(WebServlet)做Servlet配置

  • 使用注解配置Servlet的步骤:
  1. 在Servlet类上贴@WebServlet注解
    // m1就表示资源名称
    @WebServlet("/m1")
    
  2. 在web.xml文件中进行如下的配置
    metadata-complete=“true”:表示是否忽略Servlet上面的注解
    metadata-complete="false"表示是否不忽略Servlet上面的注解, 缺省值
  3. 如何在注解中配置Servlet参数
        @WebServlet(value = "/m1",
               initParams = {
                       @WebInitParam(name = "encoding", value = "UTF-8"),
                       @WebInitParam(name = "name", value = "gzy")
               }
       )
    

三、Web.xml和配置注解的选择

  • 配置Web.xml
    • 优点: 配置清晰直观,因为和Java代码分离,维护性高.
    • 缺点: 在Web.xml中配置很多Servlet造成文件臃肿,维护性低
  • 注解
    • 优点: 开发效率高,方便快速定位
    • 缺点: 与Java代码耦合在一起,维护性低.
  • 如何选择:
    • 在开发中, XML文件用于做通用配置,个别配置使用注解.

Servlet线程不安全问题

跳转到目录
Servlet——映射细节、3.0注解配置、线程不安全问题_第4张图片

  • Servlet的线程不安全问题
    根本原因: Servlet是单例的, Servlet中的非static的成员变量只有一份,多个客户端好比是多个线程,都访问的是同一空间.
  • 解决方案
    • 在Servlet中不要使用成员变量, 使用局部变量,每一个用户,每次请求都会调用service方法,而局部变量在service方法中,每一次访问都是新的空间.

你可能感兴趣的:(JavaWeb,Servlet,Servlet线程不安全问题,注解配置)