Servlet 元素

引用地址:http://wenku.baidu.com/view/bb92e5d649649b6648d74718.html

 

Servlet的常用元素和配置實用

Web.xml常用元素 
<web-app> 
<display-name></display-name>定義了WEB應用的名字 
<description></description> 聲明WEB應用的描述信息 

<context-param></context-param> context-param元素聲明應用範圍內的初始化參數。 
<filter></filter> 過濾器元素將一個名字與一個實現javax.servlet.Filter接口的類相關聯。 
<filter-mapping></filter-mapping> 一旦命名了一個過濾器,就要利用filter-mapping元素把它與一個或多個servlet或JSP頁面相關聯。 
<listener></listener>servlet API的版本2.3增加了對事件監聽程序的支持,事件監聽程序在建立、修改和刪除會話或servlet環境時得到通知。 
                     Listener元素指出事件監聽程序類。 
<servlet></servlet> 在向servlet或JSP頁面制定初始化參數或定製URL時,必須首先命名servlet或JSP頁面。Servlet元素就是用來完成此項任務的。 
<servlet-mapping></servlet-mapping> 服務器一般爲servlet提供一個缺省的URL:http://host/webAppPrefix/servlet/ServletName。 
              但是,常常會更改這個URL,以便servlet可以訪問初始化參數或更容易地處理相對URL。在更改缺省URL時,使用servlet-mapping元素。 

<session-config></session-config> 如果某個會話在一定時間內未被訪問,服務器可以拋棄它以節省內存。 
          可通過使用HttpSession的setMaxInactiveInterval方法明確設置單個會話對象的超時值,或者可利用session-config元素制定缺省超時值。 

<mime-mapping></mime-mapping>如果Web應用具有想到特殊的文件,希望能保證給他們分配特定的MIME類型,則mime-mapping元素提供這種保證。 
<welcome-file-list></welcome-file-list> 指示服務器在收到引用一個目錄名而不是文件名的URL時,使用哪個文件。 
<error-page></error-page> 在返回特定HTTP狀態代碼時,或者特定類型的異常被拋出時,能夠制定將要顯示的頁面。 
<taglib></taglib> 對標記庫描述符文件(Tag Libraryu Descriptor file)指定別名。此功能使你能夠更改TLD文件的位置, 
                  而不用編輯使用這些文件的JSP頁面。 
<resource-env-ref></resource-env-ref>聲明與資源相關的一個管理對象。 
<resource-ref></resource-ref> 聲明一個資源工廠使用的外部資源。 
<security-constraint></security-constraint> 制定應該保護的URL。它與login-config元素聯合使用 
<login-config></login-config> 指定服務器應該怎樣給試圖訪問受保護頁面的用戶授權。它與sercurity-constraint元素聯合使用。 
<security-role></security-role>給出安全角色的一個列表,這些角色將出現在servlet元素內的security-role-ref元素 
                   的role-name子元素中。分別地聲明角色可使高級IDE處理安全信息更爲容易。 
<env-entry></env-entry>聲明Web應用的環境項。 
<ejb-ref></ejb-ref>聲明一個EJB的主目錄的引用。 
< ejb-local-ref></ ejb-local-ref>聲明一個EJB的本地主目錄的應用。 
</web-app> 


相應元素配置 

1、Web應用圖標:指出IDE和GUI工具用來表示Web應用的大圖標和小圖標 
<icon> 
<small-icon>/images/app_small.gif</small-icon> 
<large-icon>/images/app_large.gif</large-icon> 
</icon> 
2、Web 應用名稱:提供GUI工具可能會用來標記這個特定的Web應用的一個名稱 
<display-name>Tomcat Example</display-name> 
3、Web 應用描述: 給出於此相關的說明性文本 
<disciption>Tomcat Example servlets and JSP pages.</disciption> 
4、上下文參數:聲明應用範圍內的初始化參數。 
<context-param> 
    <param-name>ContextParameter</para-name> 
    <param-value>test</param-value> 
    <description>It is a test parameter.</description> 
</context-param> 
在servlet裏面可以通過getServletContext().getInitParameter("context/param")得到 

5、過濾器配置:將一個名字與一個實現javaxs.servlet.Filter接口的類相關聯。 
<filter> 
        <filter-name>setCharacterEncoding</filter-name> 
        <filter-class>com.myTest.setCharacterEncodingFilter</filter-class> 
        <init-param> 
            <param-name>encoding</param-name> 
            <param-value>GB2312</param-value> 
        </init-param> 
</filter> 
<filter-mapping> 
        <filter-name>setCharacterEncoding</filter-name> 
        <url-pattern>/*</url-pattern> 
</filter-mapping> 
6、監聽器配置 
<listener> 
      <listerner-class>listener.SessionListener</listener-class> 
</listener> 
7、Servlet配置 
   基本配置 
   <servlet> 
      <servlet-name>snoop</servlet-name> 
      <servlet-class>SnoopServlet</servlet-class> 
   </servlet> 
   <servlet-mapping> 
      <servlet-name>snoop</servlet-name> 
      <url-pattern>/snoop</url-pattern> 
   </servlet-mapping> 
   高級配置 
   <servlet> 
      <servlet-name>snoop</servlet-name> 
      <servlet-class>SnoopServlet</servlet-class> 
      <init-param> 
         <param-name>foo</param-name> 
         <param-value>bar</param-value> 
      </init-param> 
      <run-as> 
         <description>Security role for anonymous access</description> 
         <role-name>tomcat</role-name> 
      </run-as> 
   </servlet> 
   <servlet-mapping> 
      <servlet-name>snoop</servlet-name> 
      <url-pattern>/snoop</url-pattern> 
   </servlet-mapping> 
   元素說明 
     <servlet></servlet> 用來聲明一個servlet的數據,主要有以下子元素: 
     <servlet-name></servlet-name> 指定servlet的名稱 
     <servlet-class></servlet-class> 指定servlet的類名稱 
     <jsp-file></jsp-file> 指定web站臺中的某個JSP網頁的完整路徑 
     <init-param></init-param> 用來定義參數,可有多個init-param。在servlet類中通過getInitParamenter(String name)方法訪問初始化參數 
     <load-on-startup></load-on-startup>指定當Web應用啓動時,裝載Servlet的次序。 
                                 當值爲正數或零時:Servlet容器先加載數值小的servlet,再依次加載其他數值大的servlet. 
                                 當值爲負或未定義:Servlet容器將在Web客戶首次訪問這個servlet時加載它 
     <servlet-mapping></servlet-mapping> 用來定義servlet所對應的URL,包含兩個子元素 
       <servlet-name></servlet-name> 指定servlet的名稱 
       <url-pattern></url-pattern> 指定servlet所對應的URL 
8、會話超時配置(單位爲分鐘) 
   <session-config> 
      <session-timeout>120</session-timeout> 
   </session-config> 
9、MIME類型配置 
   <mime-mapping> 
      <extension>htm</extension> 
      <mime-type>text/html</mime-type> 
   </mime-mapping> 
10、指定歡迎文件頁配置 
   <welcome-file-list> 
      <welcome-file>index.jsp</welcome-file> 
      <welcome-file>index.html</welcome-file> 
      <welcome-file>index.htm</welcome-file> 
   </welcome-file-list> 
11、配置錯誤頁面 
一、 通過錯誤碼來配置error-page 
   <error-page> 
      <error-code>404</error-code> 
      <location>/NotFound.jsp</location> 
   </error-page> 
上面配置了當系統發生404錯誤時,跳轉到錯誤處理頁面NotFound.jsp。 
二、通過異常的類型配置error-page 
   <error-page> 
       <exception-type>java.lang.NullException</exception-type> 
       <location>/error.jsp</location> 
   </error-page> 
上面配置了當系統發生java.lang.NullException(即空指針異常)時,跳轉到錯誤處理頁面error.jsp 
12、TLD配置 
   <taglib> 
       <taglib-uri>http://jakarta.apache.org/tomcat/debug-taglib</taglib-uri> 
       <taglib-location>/WEB-INF/jsp/debug-taglib.tld</taglib-location> 
   </taglib> 
   如果MyEclipse一直在報錯,應該把<taglib> 放到 <jsp-config>中 
   <jsp-config> 
      <taglib> 
          <taglib-uri>http://jakarta.apache.org/tomcat/debug-taglib</taglib-uri> 
          <taglib-location>/WEB-INF/pager-taglib.tld</taglib-location> 
      </taglib> 
   </jsp-config> 
13、資源管理對象配置 
   <resource-env-ref> 
       <resource-env-ref-name>jms/StockQueue</resource-env-ref-name> 
   </resource-env-ref> 
14、資源工廠配置 
   <resource-ref> 
       <res-ref-name>mail/Session</res-ref-name> 
       <res-type>javax.mail.Session</res-type> 
       <res-auth>Container</res-auth> 
   </resource-ref> 
   配置數據庫連接池就可在此配置: 
   <resource-ref> 
       <description>JNDI JDBC DataSource of shop</description> 
       <res-ref-name>jdbc/sample_db</res-ref-name> 
       <res-type>javax.sql.DataSource</res-type> 
       <res-auth>Container</res-auth> 
   </resource-ref> 
15、安全限制配置 
   <security-constraint> 
      <display-name>Example Security Constraint</display-name> 
      <web-resource-collection> 
         <web-resource-name>Protected Area</web-resource-name> 
         <url-pattern>/jsp/security/protected/*</url-pattern> 
         <http-method>DELETE</http-method> 
         <http-method>GET</http-method> 
         <http-method>POST</http-method> 
         <http-method>PUT</http-method> 
      </web-resource-collection> 
      <auth-constraint> 
        <role-name>tomcat</role-name> 
        <role-name>role1</role-name> 
      </auth-constraint> 
   </security-constraint> 
16、登陸驗證配置 
   <login-config> 
     <auth-method>FORM</auth-method> 
     <realm-name>Example-Based Authentiation Area</realm-name> 
     <form-login-config> 
        <form-login-page>/jsp/security/protected/login.jsp</form-login-page> 
        <form-error-page>/jsp/security/protected/error.jsp</form-error-page> 
     </form-login-config> 
   </login-config> 
17、安全角色:security-role元素給出安全角色的一個列表,這些角色將出現在servlet元素內的security-role-ref元素的role-name子元素中。 
    分別地聲明角色可使高級IDE處理安全信息更爲容易。 
<security-role> 
     <role-name>tomcat</role-name> 
</security-role> 
18、Web環境參數:env-entry元素聲明Web應用的環境項 
<env-entry> 
     <env-entry-name>minExemptions</env-entry-name> 
     <env-entry-value>1</env-entry-value> 
     <env-entry-type>java.lang.Integer</env-entry-type> 
</env-entry> 
19、EJB 聲明 
<ejb-ref> 
     <description>Example EJB reference</decription> 
     <ejb-ref-name>ejb/Account</ejb-ref-name> 
     <ejb-ref-type>Entity</ejb-ref-type> 
     <home>com.mycompany.mypackage.AccountHome</home> 
     <remote>com.mycompany.mypackage.Account</remote> 
</ejb-ref> 
20、本地EJB聲明 
<ejb-local-ref> 
     <description>Example Loacal EJB reference</decription> 
     <ejb-ref-name>ejb/ProcessOrder</ejb-ref-name> 
     <ejb-ref-type>Session</ejb-ref-type> 
     <local-home>com.mycompany.mypackage.ProcessOrderHome</local-home> 
     <local>com.mycompany.mypackage.ProcessOrder</local> 
</ejb-local-ref> 
21、配置DWR 
<servlet> 
      <servlet-name>dwr-invoker</servlet-name> 
      <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
      <servlet-name>dwr-invoker</servlet-name> 
      <url-pattern>/dwr/*</url-pattern> 
</servlet-mapping> 
22、配置Struts 
    <display-name>Struts Blank Application</display-name> 
    <servlet> 
        <servlet-name>action</servlet-name> 
        <servlet-class> 
            org.apache.struts.action.ActionServlet 
        </servlet-class> 
        <init-param> 
            <param-name>detail</param-name> 
            <param-value>2</param-value> 
        </init-param> 
        <init-param> 
            <param-name>debug</param-name> 
            <param-value>2</param-value> 
        </init-param> 
        <init-param> 
            <param-name>config</param-name> 
            <param-value>/WEB-INF/struts-config.xml</param-value> 
        </init-param> 
        <init-param> 
            <param-name>application</param-name> 
            <param-value>ApplicationResources</param-value> 
        </init-param> 
        <load-on-startup>2</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
        <servlet-name>action</servlet-name> 
        <url-pattern>*.do</url-pattern> 
    </servlet-mapping> 
    <welcome-file-list> 
        <welcome-file>index.jsp</welcome-file> 
    </welcome-file-list> 

    <!-- Struts Tag Library Descriptors --> 
    <taglib> 
        <taglib-uri>struts-bean</taglib-uri> 
        <taglib-location>/WEB-INF/tld/struts-bean.tld</taglib-location> 
    </taglib> 
    <taglib> 
        <taglib-uri>struts-html</taglib-uri> 
        <taglib-location>/WEB-INF/tld/struts-html.tld</taglib-location> 
    </taglib> 
    <taglib> 
    <taglib-uri>struts-nested</taglib-uri> 
    <taglib-location>/WEB-INF/tld/struts-nested.tld</taglib-location> 
    </taglib> 
    <taglib> 
        <taglib-uri>struts-logic</taglib-uri> 
        <taglib-location>/WEB-INF/tld/struts-logic.tld</taglib-location> 
    </taglib> 
    <taglib> 
        <taglib-uri>struts-tiles</taglib-uri> 
        <taglib-location>/WEB-INF/tld/struts-tiles.tld</taglib-location> 
    </taglib> 
23、配置Spring(基本上都是在Struts中配置的) 

   <!-- 指定spring配置文件位置 --> 
   <context-param> 
      <param-name>contextConfigLocation</param-name> 
      <param-value> 
       <!--加載多個spring配置文件 --> 
        /WEB-INF/applicationContext.xml, /WEB-INF/action-servlet.xml 
      </param-value> 
   </context-param> 

   <!-- 定義SPRING監聽器,加載spring --> 

<listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 

<listener> 
     <listener-class> 
       org.springframework.web.context.request.RequestContextListener 
     </listener-class> 
</listener>

Servlet生命週期

  裝載Servlet。這項操作一般是動態執行的。然而,Server通常會提供一個管理的選項,用於在Server啓動時強制裝載和初始化特定的Servlet。   Server創建一個Servlet的實例   Server調用Servletinit()方法   一個客戶端的請求到達Server   Server創建一個請求對象   Server創建一個響應對象   Server激活Servletservice()方法,傳遞請求和響應對象作爲參數   service()方法獲得關於請求對象的信息,處理請求,訪問其他資源,獲得需要的信息   service()方法使用響應對象的方法,將響應傳回Server,最終到達客戶端。service()方法可能激活其它方法以處理請求,如doGet()doPost()或程序員自己開發的新的方法。   對於更多的客戶端請求,Server創建新的請求和響應對象,仍然激活此Servletservice()方法,將這兩個對象作爲參數傳遞給它。如此重複以上的循環,但無需再次調用init()方法。一般Servlet只初始化一次(只有一個對象),Server不再需要Servlet(一般當Server關閉時)Server調用ServletDestroy()方法。 

servlet的工作模式

第一步:客戶端發送請求至服務器   

第二步:服務器啓動並調用ServletServlet根據客戶端請求生成響應內容並將其傳給服務器   

第三部:服務器將響應返回客戶端 

Java Servlet 與 JSP 的比較

JavaServer Pages(JSP)是一種實現普通靜態HTML和動態HTML混合編碼的技術,JSP並沒有增加任何本質上不能用Servlet實現的功能。但是,在JSP中編寫靜態HTML更加方便,不必再用println語句來輸出每一行HTML代碼。實際上JSP的本質就是Servlet更重要的是,藉助內容和外觀的分離,頁面製作中不同性質的任務可以方便地分開:比如,由頁面設計者進行HTML設計,同時留出供Servlet程序員插入動態內容的空間。 Servlet的在開發中主要擔任控制層的作用,JSP主要擔任展示層的作用。

HTTPServlet應用編程接口

HTTP Servlet 使用一個 HTML 表單來發送和接收數據。要創建一個 HTTP Servlet,請擴展 HttpServlet 類, 該類是用專門的方法來處理 HTML 表單的 GenericServlet 的一個子類。 HTML 表單是由 <FORM> 和 </FORM> 標記定義的。表單中典型地包含輸入字段(如文本輸入字段、複選框、單選按鈕和選擇列表)和用於提交數據的按鈕。當提交信息時,它們還指定服務器應執行哪一個Servlet(或其它的程序)。 HttpServlet 類包含 init()destroy()service() 等方法。其中 init() 和 destroy() 方法是繼承的。   

(1) init() 方法  在 Servlet 的生命期中,僅執行一次 init() 方法。它是在服務器裝入 Servlet 時執行的。 可以配置服務器,以在啓動服務器或客戶機首次訪問 Servlet 時裝入 Servlet。 無論有多少客戶機訪問 Servlet,都不會重複執行 init() 。缺省的 init() 方法通常是符合要求的,但也可以用定製 init() 方法來覆蓋它,典型的是管理服務器端資源。 例如,可能編寫一個定製 init() 來只用於一次裝入 GIF 圖像,改進 Servlet 返回 GIF 圖像和含有多個客戶機請求的性能。另一個示例是初始化數據庫連接。缺省的 init() 方法設置了 Servlet 的初始化參數,並用它的 ServletConfig 對象參數來啓動配置, 因此所有覆蓋 init() 方法的 Servlet 應調用 super.init() 以確保仍然執行這些任務。在調用 service() 方法之前,應確保已完成了 init() 方法。   

(2) service() 方法   service() 方法是 Servlet 的核心。每當一個客戶請求一個HttpServlet 對象,該對象的service() 方法就要被調用,而且傳遞給這個方法一個"請求"(ServletRequest)對象和一個"響應"(ServletResponse)對象作爲參數。 在 HttpServlet 中已存在 service() 方法。缺省的服務功能是調用與 HTTP 請求的方法相應的 do 功能。例如, 如果 HTTP 請求方法爲 GET,則缺省情況下就調用 doGet() Servlet 應該爲 Servlet 支持的 HTTP 方法覆蓋 do 功能。因爲 HttpServlet.service() 方法會檢查請求方法是否調用了適當的處理方法,不必要覆蓋 service() 方法。只需覆蓋相應的 do 方法就可以了。   Servlet的響應可以是下列幾種類型:一個輸出流,瀏覽器根據它的內容類型(text/HTML)進行解釋。一個HTTP錯誤響應重定向到另一個URLservletJSP。   

(3) doGet()方法  當一個客戶通過HTML 表單發出一個HTTP GET請求或直接請求一個URL時,doGet()方法被調用。與GET請求相關的參數添加到URL的後面,並與這個請求一起發送。當不會修改服務器端的數據時,應該使用doGet()方法。   

(4) doPost()方法  當一個客戶通過HTML 表單發出一個HTTP POST請求時,doPost()方法被調用。與POST請求相關的參數作爲一個單獨的HTTP 請求從瀏覽器發送到服務器。當需要修改服務器端的數據時,應該使用doPost()方法。   

(5) destroy() 方法  destroy() 方法僅執行一次,即在服務器停止且卸裝Servlet 時執行該方法。典型的,將 Servlet 作爲服務器進程的一部分來關閉。缺省的 destroy() 方法通常是符合要求的,但也可以覆蓋它,典型的是管理服務器端資源。例如,如果 Servlet 在運行時會累計統計數據,則可以編寫一個 destroy() 方法,該方法用於在未裝入 Servlet 時將統計數字保存在文件中。另一個示例是關閉數據庫連接。當服務器卸裝 Servlet 時,將在所有 service() 方法調用完成後,或在指定的時間間隔過後調用 destroy() 方法。一個Servlet 在運行service() 方法時可能會產生其它的線程,因此請確認在調用 destroy() 方法時,這些線程已終止或完成。   

(6) GetServletConfig()方法  GetServletConfig()方法返回一個 ServletConfig 對象,該對象用來返回初始化參數和ServletContextServletContext 接口提供有關servlet 的環境信息。   

(7) GetServletInfo()方法 GetServletInfo()方法是一個可選的方法,它提供有關servlet 的信息,如作者、版本、版權。當服務器調用sevlet Service()doGet()doPost()這三個方法時,均需要 "請求""響應"對象作爲參數。"請求"對象提供有關請求的信息,而"響應"對象提供了一個將響應信息返回給瀏覽器的一個通信途徑。 javax.servlet 軟件包中的相關類爲ServletResponseServletRequest,而javax.servlet.http 軟件包中的相關類爲HttpServletRequest 和 HttpServletResponseServlet 通過這些對象與服務器通信並最終與客戶機通信。Servlet 能通過調用"請求"對象的方法獲知客戶機環境,服務器環境的信息和所有由客戶機提供的信息。Servlet 可以調用"響應"對象的方法發送響應,該響應是準備發回客戶機的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章