在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>
轉載說明:請註明做者及原文連接,謝謝!