在Servlet的整个生命周期中,构造方法只被执行一次。也就是说,在Servlet的整个生命周期中,只存在一个Servlet实例对象。这说明Servlet是单例多线程的,可能会引发线程安全问题。html
所谓线程安全就是一个Servlet实例对象会同时处理多个请求,这样的Servlet工做效率的确很高。但若是Servlet中包含成员变量的话,可能一个线程对该成员变量进行写操做,而另外一个线程对该成员变量进行读操做。因此,单例多线程的Servlet不能建立成员变量。java
经过以前的测试操做,咱们发现Servlet并非在Tomcat服务器启动时建立实例对象,而是在第一次请求以后才一并建立实例对象、初始化并处理逻辑的。Servlet又是单例的,在整个生命周期中只建立一个Servlet实例对象。若是能够在Tomcat服务器启动时,进行建立实例对象并完成初始化工做,在请求以后只调用service()方法处理请求逻辑便可。web
能够在web.xml配置文件增长相关配置便可,具体增长内容以下:apache
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<servlet-name>LifeServlet</servlet-name>
<servlet-class>app.java.servlet.LifeServlet</servlet-class>
<!-- load-on-startup标签:配置当前Servlet在启动时建立实例对象 * 标签中的数字,表示级别(0-9级),通常设置为0便可. -->
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>LifeServlet</servlet-name>
<url-pattern>/servlet/LifeServlet</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
增长配置信息以后,从新启动Tomcat服务器,查看控制台信息以下:浏览器
经过查看控制台打印的信息,能够看出在启动Tomcat服务器时,已经建立并初始化了Servlet实例对象。安全
在web.xml配置文件中配置有关Servlet的时候,标签是用于配置当前Servlet拦截的路径,也就是说,客户端浏览器访问标签配置的路径才能访问对应Servlet内容。服务器
关于拦截路径的配置方式其实有三种方式:markdown
值得注意的问题:多线程
下面经过一些测试,来看看路径配置的三种方式:app
若是客户端浏览器请求的路径是错误时,页面会显示404错误内容。这是由于全部发布到Tomcat服务器的Web应用程序的web.xml文件都继承了Tomcat服务器安装目录中conf目录中的web.xml文件。当访问路径是错误的,或者对应Servlet没有配置,实际上会执行Tomcat服务器中的web.xml的相关配置,具体内容以下:
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
转载说明:请注明做者及原文连接,谢谢!