官术网_书友最值得收藏!

第5章 Servlet技術(shù)詳解

JavaScript、Servlet、JSP和JDBC是進行Java Web開發(fā)必備的基本技術(shù),上一章講解了JavaScript的基礎(chǔ)知識,本章重點講解Servlet的基礎(chǔ)知識。本章首先對Servlet進行簡要的介紹,然后詳細(xì)講解Servlet的生命周期,最后通過示例演示Servlet的使用方法。

5.1 Servlet技術(shù)簡介

在1997年3月,Sun Microsystems公司的JavaSoft部門就推出了Servlet 1.0規(guī)范。當(dāng)時該版本的Servlet只具有CGI與NSAPI之類產(chǎn)品的功能。發(fā)展到現(xiàn)在,已經(jīng)為Servlet 3.0規(guī)范。該版本的Servlet不僅能夠開發(fā)HTTP協(xié)議方面的程序,還可以開發(fā)Web Server、Mail Server、FTP Server和Applicaton Server等方面的服務(wù)。

5.1.1 Servlet的運行原理

Servlet是運行在服務(wù)器端,由Web服務(wù)器進行加載,用來響應(yīng)客戶端請求的Java代碼模塊。Servlet是一種獨立于平臺和協(xié)議的服務(wù)器端Java應(yīng)用程序,可以生成動態(tài)的Web頁面。javax.servlet和javax.servlet.http包為編寫Servlet提供了接口和類,所有的Servlet程序都必須繼承Servlet接口,該接口定義了生命周期方法。

JSP頁面在執(zhí)行時首先要被編譯成Servlet,JSP和Servlet的轉(zhuǎn)換示意圖如圖5.1所示。

圖5.1 JSP和Servlet的轉(zhuǎn)換示意圖

需要注意的是,每個Servlet請求都是由一個線程而不是一個全新的進程來處理的。

web.xml是Servlet規(guī)范中定義的Web應(yīng)用發(fā)布的描述文件,它與Tomcat完全獨立。web.xml的主要作用是,裝載DispatcherServlet類,設(shè)置一些初始化參數(shù),加入標(biāo)記庫,設(shè)置如*.do、*.form的映射等。

web.xml文件的示例代碼如下:

      <?xml version="1.0" encoding="UTF-8"?>
      <web-app 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_3_0.xsd"
      version="3.0">
      <display-name>web.xml的示例</display-name>
      <!--定義一個過濾器 -->
      <filter>
          <filter-name>LogFilter</filter-name>
          <filter-class>com.gd.log.LogFilter</filter-class>
      </filter>
      <!--設(shè)定過濾器負(fù)責(zé)過濾的URL -->
        <filter-mapping>
              <filter-name>LogFilter</filter-name>
              <url-pattern>*.do</url-pattern >
        </filter-mapping>
        <servlet>
              <servlet-name>dispatcherServlet</servlet-name>
              <servlet-class>servlet</servlet-class>
              <!--定義Servlet的初始化參數(shù),這里指定要初始化WEB-INF文件夾下的config-servlet.xml,
              一個<servlet>可以有多個<init-param> -->
              <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>/WEB-INF/config-servlet.xml</param-value>
              </init-param>
              <load-on-startup>1</load-on-startup>
              //指定當(dāng)Web啟動時,加載Servlet的順序,當(dāng)它的值大于等于零時,Servlet容器先加載數(shù)值
    小的Servlet,再加載大的;如果它的值小于零或沒有設(shè)定,則Servlet容器將在Web首次訪問時加載這
    個Servlet
        </servlet>
        <!--攔截所有以do結(jié)尾的請求 -->
        <servlet-mapping>
              <servlet-name>dispatcherServlet</servlet-name>
              <url-pattern>*.do</url-pattern>
        </servlet-mapping>
        <session-config>
              //設(shè)定HttpSession的生命周期,示例中設(shè)定了Session可以保持不活動狀態(tài)最長時間為30秒,
    超過這一時間,將做無效處理
              <session-timeout>30</session-timeout>
        </session-config>
        <welcome-file-list>
              //指定當(dāng)客戶訪問Web應(yīng)用時,如果沒有給出具體的文件名,Servlet將自動調(diào)用這里設(shè)定的文
    件,可以設(shè)定多個文件清單,到時候Servlet會按照順序自動查找指定的文件,如果沒有找到,服務(wù)器將
    向客戶端返回“HTTP404 Not Found”的出錯信息
              <welcome-file>index.jsp</welcome-file>
              <welcome-file>index.htm</welcome-file>
        </welcome-file-list>
        <taglib>
              //設(shè)定Web應(yīng)用所引用的標(biāo)記庫
              <taglib-uri>/spring</taglib-uri>
              <taglib-location>/WEB-INF/spring.tld</taglib-location>
        </taglib>
        <resource-ref>
              //引用的JNDI名字
              <description>數(shù)據(jù)庫連接池</description>
              <res-ref-name>jdbc/db</res-ref-name>
              <res-type>javax.sql.DataSource</res-type>
              <res-auth>Container</res-auth>
              //管理所引用資源的管理者,有兩個可選值:Container和Application。Container表示由容器
    來創(chuàng)建和管理資源,Application表示由應(yīng)用來創(chuàng)建和管理資源
        </resource-ref>
        <security-constraint>
              //定義Web應(yīng)用的安全約束,上述代碼表示當(dāng)用戶訪問時必須具備Guest角色
          <web-resource-collection>
              //定義受保護的資源
              <web-resource-name>示例</web-resource-name>
              <url-pattern>*.do</url-pattern>
          </web-resource-collection>
          <auth-constraint>
              <role-name>guest</role-name>
          </auth-constraint>
          //定義可以訪問資源的角色
      </security-constraint>
      <security-role>
          <description>
              權(quán)限安全描述
      </description>
          <role-name>guest</role-name>
      </security-role>
      <login-config>
          <auth-method>FORM</auth-method>
          <realm-name>登錄入口</realm-name>
          <form-login-config>
              <form-login-page>/login.jsp</form-login-page>
              <form-error-page>/error.jsp</form-error-page>
          </form-login-config>
      </login-config>
      </web-app>

代碼說明:

上述配置文件采用的是Servlet 3.0規(guī)定的Web程序部署描述格式。以前的Servlet經(jīng)常使用的描述格式是:<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_6.dtd"><web-app>。

5.1.2 MyEclipse開發(fā)工具對Servlet的支持

為了便于程序員開發(fā)關(guān)于Servlet的程序,MyEclipse開發(fā)工具提供了對其的支持。下面將詳細(xì)介紹MyEclipse開發(fā)一個簡單的Servlet程序,具體步驟如下:

01 從菜單欄中選擇“File>New>W(wǎng)eb Project”命令,新建一個Web Project項目,在出現(xiàn)的對話框中進行如圖5.2所示的設(shè)置,即在“Project Name”文本框輸入“FirstServlet”,其他選項建議為默認(rèn)值,單擊“Finish”按鈕完成創(chuàng)建。

圖5.2 新建Web Project

02 用鼠標(biāo)右鍵單擊剛生成的項目中的“src”目錄,在彈出的快捷菜單中選擇“New>Servlet”命令,如圖5.3所示。用來新建一個Servlet程序,這時會出現(xiàn)如圖5.4所示的對話框。

圖5.3 新建Servlet程序

圖5.4 創(chuàng)建Servlet程序

● Modifiers:設(shè)置Servlet程序的修飾符。

● Superclass:設(shè)置Servlet程序的父類。

● Template to use:設(shè)置Servlet程序的模板。

● Which method stubs would you like to create:設(shè)置Servlet程序中需要實現(xiàn)的方法。

一般只需要填寫“Package”和“Name”文本框,以及選擇需要實現(xiàn)的方法,而其他選項建議為默認(rèn)值。

03 在創(chuàng)建Servlet程序的對話框中做出如圖5.4所示的選擇后(“Package”文本框中的內(nèi)容用來設(shè)置Servlet程序文件的包),單擊“Next”按鈕就會出現(xiàn)如圖5.5所示的對話框,在該對話中可以對web.xml文件內(nèi)容進行設(shè)置。

圖5.5 設(shè)置web.xml文件內(nèi)容

其中,“Servlet/JSP Mapping URL”文本框用來設(shè)置Servlet程序的映射路徑,其一般以“/”符號開始,或者以“*do”的方式出現(xiàn),但是不能輸入“/*do”形式。該對話框一般只需要修改“Servlet/JSP Mapping URL”文本框中內(nèi)容來確定訪問該Servlet程序的路徑。

04 在設(shè)置web.xml文件內(nèi)容的對話框中做出如圖5.5所示的修改后,單擊“Finish”按鈕,就完成了創(chuàng)建Servlet程序的向?qū)А4藭r,當(dāng)前項目的目錄結(jié)構(gòu)如圖5.6所示。

圖5.6 Servlet程序的目錄結(jié)構(gòu)

主站蜘蛛池模板: 新宁县| 东城区| 阿瓦提县| 历史| 华亭县| 荆门市| 汤阴县| 玉环县| 白山市| 沙田区| 英山县| 广灵县| 鲁甸县| 定远县| 久治县| 凤凰县| 宁波市| 定兴县| 湖州市| 保山市| 长汀县| 双桥区| 莆田市| 金川县| 土默特左旗| 兴海县| 邯郸县| 长子县| 多伦县| 辽宁省| 通州市| 安阳市| 张家界市| 女性| 穆棱市| 安化县| 重庆市| 嘉禾县| 淮南市| 安达市| 烟台市|