- 搞定J2EE核心技術與企業應用
- 常建功 王向華編著
- 1498字
- 2018-12-29 13:50:04
5.5 關于Servlet 3.0實例
雖然Filter技術是Servlet 2.3增加的功能,但是Servlet 3.0也加強了對該技術的支持。Servlet 3.0是Sun公司于2010年發布的,它的開發者包括許多個人和公司團體,充分體現了Sun公司所倡導的代碼開放性原則。由于眾多參與者的共同努力,Servlet 3.0的功能強大了很多,而且性能也有了大幅度提高。
5.5.1 關于Servlet 3.0環境的搭建
為了便于程序員開發關于Servlet的程序,MyEclipse開發工具提供了對其的支持。但是Servlet 3.0屬于JavaEE 6.0規范,對開發環境和運行環境有一定的要求:
● 編譯環境:Java 1.6。
● 服務器環境:如果為Tomcat服務器,則必須是Tomcat 7.0版本以上。
根據MyEclipse開發Web Project項目的向導(如圖5.8所示),可以發現其只支持JavaEE 5.0而不支持JavaEE 6.0。

圖5.8 Web Project向導
為了解決上述問題,需要重新配置關于開發Servlet 3.0項目的環境,具體步驟如下:
01 從菜單欄中選擇“File>New>Web Project”命令,新建一個Web Project項目,在出現的對話框中進行如圖5.9所示的設置。即在“Project Name”文本框中輸入“annotation”,然后選擇JavaEE 5.0版本,其他選項建議為默認值,單擊“Finish”按鈕完成創建。

圖5.9 創建Web項目
02 用鼠標右鍵單擊剛生成的項目中的“src”目錄,在彈出的快捷菜單中選擇“New>Servlet”命令,創建一個Servlet程序,關于創建Servlet的對話框配置如圖5.10所示。單擊“Next”按鈕就會出現如圖5.11所示的對話框,在該對話框中取消對web.xml文件的配置。

圖5.10 創建Servlet程序

圖5.11 關于web.xml文件配置
03 單擊“Finish”按鈕,就完成了創建Servlet程序的向導。此時當前項目的目錄結構如圖5.12所示。通過項目目錄可以發現“Java EE 5 Libraries”包含的javaee.jar不支持Servlet 3.0,同時web.xml文件內容為2.5版本,也不支持Servlet 3.0。

圖5.12 Servlet程序的目錄結構
04 為了解決支持Servlet 3.0的JAR文件,可以通過兩種方式來實現:一種是從Servlet的官方網站下載,另一種是加載Tomcat 7.0中的JAR文件。本書采用后一種方式。即創建名為Servlet 3.0的“User Libraries”,JAR文件為Tomcat 7.0根目錄下lib文件下的所有JAR文件,如圖5.13所示。

圖5.13 創建Servlet 3.0用戶庫
05 通過如圖5.14所示的方式移除“JavaEE 5 Libraries”庫,然后利用如圖5.15所示的方式添加Servlet 3.0用戶庫,最后該項目的目錄結構如圖5.16所示。

圖5.14 移除庫

圖5.15 添加用戶庫

圖5.16 目錄結構
06 修改web.xml文件,即復制Tomcat 7.0的根目錄下conf\web.xml文件內容為該項目的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"> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
代碼說明:
上述配置文件采用的是Servlet 3.0規定的Web程序部署描述格式。
07 最后修改MyEclipse的編譯版本為Java 1.6,具體界面如圖5.17所示。

圖5.17 編譯環境
5.5.2 Servlet 3.0示例
Servlet 3.0增加了許多新特性,例如異步處理、注解、可插性等,本章將通過一個具體的實例來演示Servlet 3.0的注解功能。由于Servlet 3.0加強了注解支持、注解的引入,所以使部署描述符web.xml文件成為可選的。
具體步驟如下:
01 接著上一節的步驟,修改ServletAnno.java文件,具體內容如下:
//******* ServletAnno.java ************** //引入包 import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.*; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; //注解Servlet @WebServlet(name="Servlet3.0",urlPatterns={"/Servlet3"}) public class ServletAnno extends HttpServlet { //編寫doGet()方法 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out=response.getWriter(); //獲取輸出流 out.println("Servlet 3.0"); //輸出相應信息 out.close(); } //編寫doPost()方法 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request,response); //調用doGet()方法 } }
代碼說明:
上述代碼使用注解@WebServlet配置ServletAnno類為Servlet,其中屬性name指定該Servlet的名字為Servlet 3.0,屬性urlPatterns指定Servlet的路徑為/Servlet3。
02 修改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"> </web-app>
代碼說明:
上述代碼沒有增加任何內容,但是通過注解方式卻與如下web.xml內容功能一樣:
//******* 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"> <servlet> <servlet-name>Servlet3.0</servlet-name> <servlet-class>com.cjgong.servlet.ServletAnno</servlet-class> </servlet> <servlet-mapping> <servlet-name>Servlet3.0</servlet-name> <url-pattern>/Servlet3</url-pattern> </servlet-mapping> </web-app>
03 最后,單擊工具欄中的按鈕,出現如圖5.18所示的對話框實現把該項目發布到服務器。然后單擊工具欄中的
按鈕,在出現的選項中做出如圖5.19所示的選擇,以實現啟動服務器。最后打開瀏覽器,在地址欄中輸入地址http://localhost:8080/annotation/Servlet3,這時運行結果如圖5.20所示。

圖5.18 項目發布

圖5.19 啟動服務器

圖5.20 運行結果