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

Servlet映射细节

1.一个Servlet可以有多个<url-pattern>(可以使用多个资源名称找到当前的Servlet), 也可以有多个<servlet-mapping>
![](https://img2020.cnblogs.com/blog/1668748/202004/1668748-20200426093547883-1111283356.png)
2.配置Servlet可以使用通配符( * )
    1.* : 表示任意字符
    2./* :可以使用任意的字符访问当前的Servlet
    3./xxx/* : xxx表示一个模块,/system/* (登陆验证)
    4.*.拓展名: 请求的资源必须以.zy结尾才能访问Servlet
3.自定义的Servlet的<servlet-name>不能够为default,使用它会造成项目下面的静态资源找不到;在Tomcat/conf/web.xml文件中配置一个名字为default的Servlet,该Servlet在负责访问项目下的静态资源

Servlet3.0新特性-注解配置

1.问题: 在一个应用中存在很多Servlet,那么配置文件就会非常臃肿,开发效率低,不便于后期的维护.
解决方案: 在Tomcat7开始, 可以使用**注解(WebServlet)**来取代XML配置.
2.使用注解(WebServlet)做Servlet配置
    1.在Servlet类上贴@WebServlet注解
    // m1就表示资源名称
    @WebServlet("/m1")
    2.在web.xml文件中进行如下的配置
        metadata-complete=“true”:表示是否忽略Servlet上面的注解
        metadata-complete="false"表示是否不忽略Servlet上面的注解, 缺省值
 3.Web.xml和配置注解的选择
    1.配置Web.xml 
        优点: 配置清晰直观,因为和Java代码分离,维护性高.
        缺点: 在Web.xml中配置很多Servlet造成文件臃肿,维护性低
    2.注解 
        优点: 开发效率高,方便快速定位
        缺点: 与Java代码耦合在一起,维护性低.

Servlet线程不安全问题

![](https://img2020.cnblogs.com/blog/1668748/202004/1668748-20200426094414169-2121977583.png)
1.Servlet的线程不安全问题
    根本原因: Servlet是单例的, Servlet中的非static的成员变量只有一份,多个客户端好比是多个线程,都访问的是同一空间.
2.解决方案 
    在Servlet中不要使用成员变量, 使用局部变量,每一个用户,每次请求都会调用service方法,而局部变量在service方法中,每一次访问都是新的空间.
posted @ 2020-04-26 09:46  林jj  阅读(187)  评论(0编辑  收藏  举报