- 搞定J2EE核心技術(shù)與企業(yè)應(yīng)用
- 常建功 王向華編著
- 1819字
- 2018-12-29 13:50:02
第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)
- 樂(lè)高機(jī)器人:WeDo編程與搭建指南
- TIBCO Spotfire:A Comprehensive Primer(Second Edition)
- CorelDRAW X4中文版平面設(shè)計(jì)50例
- CompTIA Network+ Certification Guide
- Cloudera Administration Handbook
- Hybrid Cloud for Architects
- 控制系統(tǒng)計(jì)算機(jī)仿真
- Docker High Performance(Second Edition)
- Windows Server 2003系統(tǒng)安全管理
- 突破,Objective-C開(kāi)發(fā)速學(xué)手冊(cè)
- TensorFlow Reinforcement Learning Quick Start Guide
- ESP8266 Robotics Projects
- 嵌入式GUI開(kāi)發(fā)設(shè)計(jì)
- Learning Linux Shell Scripting
- PowerPoint 2010幻燈片制作高手速成