Servlet的细节:
a: servlet 的线程安全问题:
1) Servlet是单例的, 不安全的。
当Servlet的实例被创建后,自始至终在驻留在内存当中。 只有一份。
当多条线程对servlet的全局变量进行访问的时候,就容易引发数据的安全问题。
2)以下几种方式 , 去解决数据的安全问题:
a:尽量的不要使用全局变量: 使用局部变量。
b:提供无状态的成员: 不提供get 和 set方法:
c: 提供只读状态: 只提供get方法:
b: 改变Servlet的创建时机:
默认情况: 在客户端浏览器第一次发出请求的时候, 服务器端创建servlet。
改变: 在服务器端启动的时候,创建servlet 。 创建时机提前。
web.xml文件当中:
<load-on-startup>0</load-on-startup>
数值越小, 创建的时机越早。
c: 当前web 应用程序的: web.xml
tomcat: web.xml tomcat 运行时候依赖的一个文件。
当前web应用程序的web.xml 继承了 tomcat服务器的web.xml 文件。 在加载web.xml的时候,优先加载父文件。
d: servlet的映射细节:
(1)同一个servlet 可以绑定多个映射路径:
案例:
<servlet-mapping>
<servlet-name>CServlet</servlet-name>
<url-pattern>/servlet/CServlet</url-pattern>
<url-pattern>/servlet/xxx</url-pattern>
</servlet-mapping>
(2) 配置映射路径的时候,可以使用通配符:
1)
<url-pattern>/servlet/xxx</url-pattern>
映射标签在进行配置的时候,必须是/ 开头。 /相对路径, 相对于当前的web应用: http://localhost:8080/javaEE-04/
2) 同一个servlet 可以配置多个映射路径:
<servlet-mapping>
<servlet-name>CServlet</servlet-name>
<url-pattern>/servlet/CServlet</url-pattern>
<url-pattern>/servlet/*</url-pattern>
</servlet-mapping>
3) 通配符的使用:
*: 代表任意:
/* :代表的是任意的请求:
*.do : 只要是.do结尾的都可以。
注意: * 只能为前缀 或者是后缀。 不能在中间使用:
4)通配符的优先级的问题:
在使用通配符的时候,才有精确匹配的原则。