Servlet是sun公司提供的一門用于開發動態web資源的技術?! un公司在其API中提供了一個servlet接口,用戶若想用發一個動態web資源(即開發一個java程序向瀏覽器輸出數據),需要完成以下2個步驟: 1、編寫一個Java類,實現servlet接口。 2、把開發好的Java類部署到web服務器中。 按照一種約定俗成的稱呼習慣,通常我們也把實現了servlet接口的java程序,稱之為Servlet
二、ServletAPIServlet程序是由WEB服務器調用,web服務器收到客戶端的Servlet訪問請求后: ?、賅eb服務器首先檢查是否已經裝載并創建了該Servlet的實例對象。如果是,則直接執行第④步,否則,執行第②步?! 、谘b載并創建該Servlet的一個實例對象?! 、壅{用Servlet實例對象的init()方法?! 、軇摻ㄒ粋€用于封裝HTTP請求消息的HttpServletRequest對象和一個代表HTTP響應消息的HttpServletResponse對象,然后調用Servlet的service()方法并將請求和響應 對象作為參數傳遞進去?! 、軼EB應用程序被停止或重新啟動之前,Servlet引擎將卸載Servlet,并在卸載之前調用Servlet的destroy()方法。
五、Servlet生命周期其中,加載和實例化,初始化,銷毀都只進行一行
五、Serlvet部署5.1、新建類Myservlet3繼承HttpServlet重寫doGet,doPost,destroy(),init方法
package com.pb.servletdemo;import java.io.IOException;import javax.servlet.ServletConfig;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class Myservlet3 extends HttpServlet { @Override PRotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("doGet方法被調用"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("doPost方法被調用"); } /*@Override protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException { // TODO Auto-generated method stub super.service(arg0, arg1); }*/ @Override public void destroy() { System.out.println("Servlet銷毀,destroy方法被調用"); } @Override public void init(ServletConfig config) throws ServletException { System.out.println("Servlet初始化,init方法被調用"); String initParam=config.getInitParameter("charSetContent"); System.out.println(initParam); }}5.2、在web.xml中配置
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>servletdemo</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <!-- 首先是servlet標簽 --> <servlet> <!-- 指定servlet的名字 可以與建立的servlet名字不一樣,別名--> <servlet-name>myserlvet</servlet-name> <!-- servlet的類名 包名.類名的完整路徑--> <servlet-class>com.pb.servletdemo.Myservlet3</servlet-class> <!-- 初始參數 --> <init-param> <!-- 設置字符集 --> <param-name>charSetContent</param-name> <!--值 --> <param-value>utf-8</param-value> </init-param> </servlet> <!-- 截獲請求 servlet映射--> <servlet-mapping> <!-- 些servlet-name要與上方的servlet-name名字一樣不然會報錯 --> <servlet-name>myserlvet</servlet-name> <!-- 一個servlet可以 有多個url-pattern--> <!-- 精確匹配 --> <url-pattern>/myservlet3</url-pattern> <!-- 加上虛擬目錄 --> <url-pattern>/demo/myservlet3</url-pattern> <!-- 通配符來配置* --> <url-pattern>/*</url-pattern> <!-- 后綴名來配置 --> <url-pattern>*.do</url-pattern> </servlet-mapping> </web-app>5.3、精確匹配
<url-pattern>元素,用于把一個Servlet 別名映射為一個URL 訪問規則。在Servlet 的配置過程中,我們首先使用servlet 元素中的servlet-name、servlet-class 等子元素把一個Servlet 實現類映射為一個別名,然后再使用servlet-mapping 元素把這個別名映射為一個可以在瀏覽器中訪問的url,我們對Servlet 的訪問正是通過這個URL 進行的。而不是通過別名。因此,配置這個URL 是Servlet 配置過程中非常重要的一個環節。那么我們應該如何對這個URL進行配置呢?也就是說url-pattern 有幾種配置規則呢?在配置url-pattern 元素的時候,有這樣三種規則,分別是精確匹配、目錄匹配和后綴匹配。
6.2、精確匹配所謂的精確匹配,就是我們在使用瀏覽器訪問一個 Servlet 的時候,輸入的URL 中除了工程名之前的部分之外要和我們在配置Servlet 時,配置的url-pattern 元素要完全一致。比如說,在下面實例中,配置了一個名稱為 HelloServlet 的Servlet,它的url-pattern 我們配置為/helloServ , 那么這個配置就是完全匹配的方式。假如說我們這個工程的名字是TestServlet,我們的Web 服務器的端口號為8080,那么在瀏覽器中訪問本地的這個Servlet的時候就需要使用這樣的URL:http://127.0.0.1:080/TestServlet/helloServ。其中,127.0.0.1 是保留的ip 地址,指代本機,8080 是我們設置的Web 服務器的端口號,TestServlet是我們這個Servlet 所在的Web 項目的名稱。而最后面的這個helloServ 就是我們配置的需要完全匹配的Servlet 的URL pattern。
<servlet><servlet-name>HelloServlet</servlet-name><servlet-class>javaee.sg.HelloServlet</servlet-class></servlet><servlet-mapping><servlet-name>HelloServlet</servlet-name><url-pattern>/helloServ</url-pattern></servlet-mapping>6.3、目錄匹配
相對于精確匹配,目錄匹配是一種相對靈活的配置方式,它以斜杠開始,以星號結尾,并且規定了一個虛擬的目錄。為了更加形象的說明這種配置方式,我們仍然以剛才的例子進行說明,比如說剛才的那個Servlet,它的url-pattern 我們就可以使用這種形式進行配置:
<servlet-name>HelloServlet</servlet-name><url-pattern>/helloServ/*</url-pattern>
在這個url-pattern 中,我們使用了一個虛擬的目錄, helloServ,那么我們在訪問這個Servlet 的時候輸入的URL 就會有多種選擇,我們只要保證這個URL 中,除了工程名之外的部分以這個虛擬目錄helloServ 開始就可以了。比方說,我們可以使用這樣的URL 訪問這個Servlet:http://127.0.0.1:8080/ TestServlet/helloServ/theServlet。在這個URL中, TestServlet 是這個Web 項目的工程名。 helloServ 是虛擬目錄的名稱,最后面的theServlet 是我們在訪問的時候隨機輸入的一個名稱。這個名稱可以替換為其他的名稱,比方說替換為thisServlet 或者thatServlet 等等。總之,在工程名TestServlet 之后緊跟虛擬目錄的名稱就可以了。
6.4、后綴匹配用后綴進行匹配的方式。在這種方式中,url-pattern 配置元素只限定了訪問Servlet 的后綴名,而對于虛擬目錄、名稱都沒有要求。比方說,我們再把剛才配置的Servlet 做一個修改,在url-pattern 中采用后綴匹配的規則進行配置。大家看這段代碼:
<servlet-name>HelloServlet</servlet-name><url-pattern>*.do</url-pattern></servlet-mapping>
在這個配置當中,我們限定了訪問這個Servlet 的后綴名是”.do”。也就是說,當我們的URL 中的服務器地址,端口號,工程名這些項沒有錯誤的情況下,只要url 以”.do”結尾,就能夠訪問到我們的這個Servlet。比方說,在訪問我們這個別名為 HelloServlet 的Servlet的時候,URL 可以寫為這樣的形式:http://127.0.0.1:8080/ TestServlet/helloServ.do。大家可以看到,在這個URL 的前半部分是IP 地址、端口號和項目名稱。并且這個URL 以.do 結尾,因此就可以訪問到HelloServlet。或者,我們也可以把這個URL 寫為這樣的形式,都是可以的:http://127.0.0.1:8080/ TestServlet/theServlet.do。
6.5、注意事項在配置 Servlet 的過程中,大家需要注意的另外一點就是一個Servlet 配置元素可以同時對應多個Servlet-mapping 元素, 比方說,我們仍然以剛才所介紹的HelloServlet 為例,大家看這段代碼:
<servlet-mapping><servlet-name> HelloServlet </servlet-name><url-pattern>/helloServ</url-pattern></servlet-mapping><servlet-mapping><servlet-name> HelloServlet </servlet-name><url-pattern>/helloServ/* </url-pattern></servlet-mapping><servlet-mapping><servlet-name> HelloServlet </servlet-name><url-pattern>*.do</url-pattern></servlet-mapping>
在這段代碼中,我們為別名為HelloServlet 的Servlet 配置了3 個servlet-mapping 元素。既然我們可以為同一個Servlet 同時配置多個servlet-mapping,那么當客戶端在訪問這個servlet 的時候,servlet 容器是按照一個什么樣的順序來查找servlet 的呢?當為同一個Servlet 配置了多個servlet-mapping 的時候,servlet 容器首先將按照精確匹配的方式進行匹配查找,如果匹配完成,則結束匹配,而如果匹配不成功就按照目錄匹配、后綴匹配的順序繼續進行匹配查找,如果有多個目錄匹配方式的配置項,則按照最長的一個來匹配。同時,在進行匹配的時候同樣要看請求的URL,如果這個URL 以斜線結尾,那么這個請求將會按照目錄匹配的方式來進行處理
七、在eclipse中創建Servlet選擇需要的方法
新聞熱點
疑難解答