- 搞定J2EE核心技術(shù)與企業(yè)應(yīng)用
- 常建功 王向華編著
- 98字
- 2018-12-29 13:50:01
第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)
- Hands-On Graph Analytics with Neo4j
- 高效能辦公必修課:Word圖文處理
- AutoCAD快速入門與工程制圖
- 人工智能超越人類
- Cinema 4D R13 Cookbook
- 人工免疫算法改進及其應(yīng)用
- 數(shù)據(jù)庫原理與應(yīng)用技術(shù)學(xué)習(xí)指導(dǎo)
- STM32G4入門與電機控制實戰(zhàn):基于X-CUBE-MCSDK的無刷直流電機與永磁同步電機控制實現(xiàn)
- 工業(yè)機器人現(xiàn)場編程(FANUC)
- JavaScript典型應(yīng)用與最佳實踐
- 傳感器與新聞
- 網(wǎng)絡(luò)服務(wù)搭建、配置與管理大全(Linux版)
- Godot Engine Game Development Projects
- 電子設(shè)備及系統(tǒng)人機工程設(shè)計(第2版)
- SQL Server數(shù)據(jù)庫應(yīng)用基礎(chǔ)(第2版)