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

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

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

5.1 Servlet技術(shù)簡(jiǎn)介

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

5.1.1 Servlet的運(yùn)行原理

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

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

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

需要注意的是,每個(gè)Servlet請(qǐng)求都是由一個(gè)線(xiàn)程而不是一個(gè)全新的進(jìn)程來(lái)處理的。

web.xml是Servlet規(guī)范中定義的Web應(yīng)用發(fā)布的描述文件,它與Tomcat完全獨(dú)立。web.xml的主要作用是,裝載DispatcherServlet類(lèi),設(shè)置一些初始化參數(shù),加入標(biāo)記庫(kù),設(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>
      <!--定義一個(gè)過(guò)濾器 -->
      <filter>
          <filter-name>LogFilter</filter-name>
          <filter-class>com.gd.log.LogFilter</filter-class>
      </filter>
      <!--設(shè)定過(guò)濾器負(fù)責(zé)過(guò)濾的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,
              一個(gè)<servlet>可以有多個(gè)<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啟動(dòng)時(shí),加載Servlet的順序,當(dāng)它的值大于等于零時(shí),Servlet容器先加載數(shù)值
    小的Servlet,再加載大的;如果它的值小于零或沒(méi)有設(shè)定,則Servlet容器將在Web首次訪(fǎng)問(wèn)時(shí)加載這
    個(gè)Servlet
        </servlet>
        <!--攔截所有以do結(jié)尾的請(qǐng)求 -->
        <servlet-mapping>
              <servlet-name>dispatcherServlet</servlet-name>
              <url-pattern>*.do</url-pattern>
        </servlet-mapping>
        <session-config>
              //設(shè)定HttpSession的生命周期,示例中設(shè)定了Session可以保持不活動(dòng)狀態(tài)最長(zhǎng)時(shí)間為30秒,
    超過(guò)這一時(shí)間,將做無(wú)效處理
              <session-timeout>30</session-timeout>
        </session-config>
        <welcome-file-list>
              //指定當(dāng)客戶(hù)訪(fǎng)問(wèn)Web應(yīng)用時(shí),如果沒(méi)有給出具體的文件名,Servlet將自動(dòng)調(diào)用這里設(shè)定的文
    件,可以設(shè)定多個(gè)文件清單,到時(shí)候Servlet會(huì)按照順序自動(dòng)查找指定的文件,如果沒(méi)有找到,服務(wù)器將
    向客戶(hù)端返回“HTTP404 Not Found”的出錯(cuò)信息
              <welcome-file>index.jsp</welcome-file>
              <welcome-file>index.htm</welcome-file>
        </welcome-file-list>
        <taglib>
              //設(shè)定Web應(yīng)用所引用的標(biāo)記庫(kù)
              <taglib-uri>/spring</taglib-uri>
              <taglib-location>/WEB-INF/spring.tld</taglib-location>
        </taglib>
        <resource-ref>
              //引用的JNDI名字
              <description>數(shù)據(jù)庫(kù)連接池</description>
              <res-ref-name>jdbc/db</res-ref-name>
              <res-type>javax.sql.DataSource</res-type>
              <res-auth>Container</res-auth>
              //管理所引用資源的管理者,有兩個(gè)可選值:Container和Application。Container表示由容器
    來(lái)創(chuàng)建和管理資源,Application表示由應(yīng)用來(lái)創(chuàng)建和管理資源
        </resource-ref>
        <security-constraint>
              //定義Web應(yīng)用的安全約束,上述代碼表示當(dāng)用戶(hù)訪(fǎng)問(wèn)時(shí)必須具備Guest角色
          <web-resource-collection>
              //定義受保護(hù)的資源
              <web-resource-name>示例</web-resource-name>
              <url-pattern>*.do</url-pattern>
          </web-resource-collection>
          <auth-constraint>
              <role-name>guest</role-name>
          </auth-constraint>
          //定義可以訪(fǎng)問(wèn)資源的角色
      </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>

代碼說(shuō)明:

上述配置文件采用的是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開(kāi)發(fā)工具對(duì)Servlet的支持

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

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

圖5.2 新建Web Project

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

圖5.3 新建Servlet程序

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

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

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

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

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

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

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

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

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

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

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

主站蜘蛛池模板: 吉林省| 林口县| 阿坝县| 长兴县| 普定县| 介休市| 邢台市| 丘北县| 简阳市| 屏南县| 卫辉市| 香港| 连江县| 额济纳旗| 成都市| 新乡市| 右玉县| 元朗区| 沅陵县| 磴口县| 恩施市| 丰台区| 罗田县| 墨竹工卡县| 梅州市| 房山区| 嘉善县| 江陵县| 永修县| 呈贡县| 巴彦淖尔市| 钟山县| 长武县| 琼中| 图们市| 芜湖市| 沙坪坝区| 永清县| 辽阳县| 龙井市| 靖州|