1. 程式人生 > >Servlet3.0學習總結(一)——使用註解標註Servlet

Servlet3.0學習總結(一)——使用註解標註Servlet

一、Servlet3.0介紹

  Servlet3.0是Java EE6規範的一部分,Servlet3.0提供了註解(annotation),使得不再需要在web.xml檔案中進行Servlet的部署描述,簡化開發流程。

二、開發Servlet3.0程式的所需要的環境

  開發Servlet3.0的程式需要一定的環境支援。MyEclipse10和Tomcat7都提供了對Java EE6規範的支援。Tomcat需要Tomcat7才支援Java EE6,Tomcat7需要使用JDK1.6以上的版本。

  所以開發Servlet3.0的程式需要以下的開發環境支援

  • IDE:MyEclipse 10+
  • JDK:JDK 1.6+
  • tomcat:tomcat 7+

  如果使用的 MyEclipse的版本較低,例如MyEclipse8.5,沒有提供Java EE6的支援,可以到Oracle官方網站下載JavaEE6的SDK進行安裝,或者從Tomcat7的解壓目錄下的lib資料夾中的【annotations-api.jar、el-api.jar、jasper.jar、jasper-el.jar、jsp-api.jar、servlet-api.jar】這幾個jar檔案引用到我們的專案路徑下。(例如:先建一個Java EE5的web專案,然後把Tomcat7的解壓目錄下的lib資料夾中的【annotations-api.jar、el-api.jar、jasper.jar、jasper-el.jar、jsp-api.jar、servlet-api.jar】

這幾個jar檔案引入到專案中,再刪除Java EE5的庫引用,最後從Tomcat7的解壓目錄下的conf資料夾下把web.xml模板拷貝到專案,替換掉原來的web.xml)。

三、使用MyEclipse8.5+Tomcat7+JDK1.7開發Servlet3.0程式

3.1、建立WebProject

  1、使用MyEclipse8.5新建一個Web Project,選擇最高版本的Java EE5.0,如下圖所示:

  

  建立好的專案如下所示:

  

  專案的web.xml檔案內容如下:

複製程式碼
 1 <?xml version="1.0" encoding="UTF-8"
?> 2 <web-app version="2.5" 3 xmlns="http://java.sun.com/xml/ns/javaee" 4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 5 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 6 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 7 <welcome-file-list> 8 <welcome-file>index.jsp</welcome-file> 9 </welcome-file-list> 10 </web-app>
複製程式碼

  注意web.xml檔案中的version資訊,version="2.5"和http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd。這裡就表示當前使用的是Servlet2.5的版本。

3.2、將Web專案的開發環境改造成支援Servlet3.0

  1、開啟Tomcat7的解壓目錄下的lib資料夾中,如下圖所示:

  

   找到我們需要的【annotations-api.jar、el-api.jar、jasper.jar、jasper-el.jar、jsp-api.jar、servlet-api.jar】這幾個jar檔案,然後加入到我們的Web專案的lib資料夾下,如下圖所示:

  

  2、刪除Java EE5的庫引用

  

  經過上面的兩步操作,Web應用裡面的jar包引用工作就算是完成了,如下圖所示:

  

  3、修改專案中的web.xml檔案的宣告部分

  找到Tomcat7的解壓目錄下的conf資料夾下的web.xml,如下圖所示:

  

  使用文字編輯器開啟web.xml檔案,如下圖所示:

  

  改造好的Web.xml檔案如下所示:

複製程式碼
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app xmlns="http://java.sun.com/xml/ns/javaee"
 3   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
 5                       http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
 6   version="3.0">
 7   <welcome-file-list>
 8     <welcome-file>index.jsp</welcome-file>
 9   </welcome-file-list>
10 </web-app>
複製程式碼

  注意web.xml檔案中的version資訊,version="3.0"http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd 這就是表示當前使用的是Servlet3.0的版本。經過這樣改造之後,我們的Web應用的開發環境就支援Servlet3.0的程式開發了。

3.3、開發Servlet3.0程式

3.3.1、建立Servlet

  新建一個Servlet,寫上Servlet的Name,然後Next,如下所示:

  

  取消【Generate/Map web.xml file】複選框的選中狀態,直接點選【Finish】按鈕完成Servlet的建立工作,我們要使用Servlet3.0提供的註解來配置Servlet,因此不需要MyEclipse幫我們在web.xml檔案中生成Servlet的配置資訊,如下圖所示:

  

  這樣建好一個Servlet後,在web.xml檔案中沒有任何關於這個Servlet的描述資訊,如下圖所示:

  

3.3.1、使用註解描述Servlet

  前面介紹過,Servlet3.0提供了註解(annotation),使得不再需要在web.xml檔案中進行Servlet的部署描述,下面我們就來使用一下Servlet3.0提供的註解來描述Servlet3Demo這個Servlet,程式碼如下:

複製程式碼
 1 package me.gacl.web.controller;
 2 
 3 import java.io.IOException;
 4 import javax.servlet.ServletException;
 5 import javax.servlet.annotation.WebServlet;
 6 import javax.servlet.http.HttpServlet;
 7 import javax.servlet.http.HttpServletRequest;
 8 import javax.servlet.http.HttpServletResponse;
 9 
10 /**
11  * 註解WebServlet用來描述一個Servlet
12  * 屬性name描述Servlet的名字,可選
13  * 屬性urlPatterns定義訪問的URL,或者使用屬性value定義訪問的URL.(定義訪問的URL是必選屬性)
14  */
15 @WebServlet(name="Servlet3Demo",urlPatterns="/Servlet3Demo")
16 public class Servlet3Demo extends HttpServlet {
17     
18     public void doGet(HttpServletRequest request, HttpServletResponse response)
19             throws ServletException, IOException {
20         response.getWriter().write("Hello Servlet3.0");
21     }
22 
23     public void doPost(HttpServletRequest request, HttpServletResponse response)
24             throws ServletException, IOException {
25         this.doGet(request, response);
26     }
27 }
28 
29 /*
30  * 完成了一個使用註解描述的Servlet程式開發。
31   使用@WebServlet將一個繼承於javax.servlet.http.HttpServlet的類定義為Servlet元件。
32   @WebServlet有很多的屬性:
33       1、asyncSupported:    宣告Servlet是否支援非同步操作模式。
34       2、description:      Servlet的描述。
35       3、displayName:       Servlet的顯示名稱。
36       4、initParams:        Servlet的init引數。
37       5、name:           Servlet的名稱。
38       6、urlPatterns:     Servlet的訪問URL。
39       7、value:           Servlet的訪問URL。
40   Servlet的訪問URL是Servlet的必選屬性,可以選擇使用urlPatterns或者value定義。
41   像上面的Servlet3Demo可以描述成@WebServlet(name="Servlet3Demo",value="/Servlet3Demo")。
42   也定義多個URL訪問:
43   如@WebServlet(name="Servlet3Demo",urlPatterns={"/Servlet3Demo","/Servlet3Demo2"})
44   或者@WebServlet(name="AnnotationServlet",value={"/Servlet3Demo","/Servlet3Demo2"})
45  *
46  */
複製程式碼

  在Servlet3.0中,可以使用@WebServlet註解將一個繼承於javax.servlet.http.HttpServlet的類標註為可以處理使用者請求的Servlet。

@WebServlet註解的相關屬性
NO. 屬性名 描述
1 asyncSupported 宣告Servlet是否支援非同步操作模式
2 description Servlet的描述資訊
3 displayName Servlet的顯示名稱
3 initParams Servlet的初始化引數
5 name Servlet的名稱
6 urlPatterns Servlet的訪問URL
7 value Servlet的訪問URL

  Servlet的訪問URL是Servlet的必選屬性,可以選擇使用urlPatterns或者value定義。
  像上面的Servlet3Demo可以描述成@WebServlet(name="Servlet3Demo",value="/Servlet3Demo")。
  也定義多個URL訪問:
  如@WebServlet(name="Servlet3Demo",urlPatterns={"/Servlet3Demo","/Servlet3Demo2"})
  或者@WebServlet(name="AnnotationServlet",value={"/Servlet3Demo","/Servlet3Demo2"})

3.4、部署Web應用到Tomcat7

  由於我們使用的是MyEclipse8.5的版本、而MyEclipse8.5只支援tomcat6.x的版本,因為我們開發的是基於Servlet3.0的程式,因此將Web應用部署到Tomcat6.x版本的伺服器是無法正常執行的,必須要使用tomcat7以上的伺服器,所以首先我們要在MyEclipse8.5中配置tomcat7.x,如下圖所示:

  

  要想在MyEclipse8.5中正常使用Tomcat7.x,除了配置這個地方之外,還需要配置一下Paths,如下圖所示:

  

  如果不這樣做,那麼將專案部署好後,啟動tomcat時就會報錯,java.lang.NoClassDefFoundError: org/apache/juli/logging/LogFactory,之前就是因為這個莫名其妙的錯誤折騰了好久,直到看到網上這一篇文章http://xuejiangtao.iteye.com/blog/882585才解決啟動報錯的問題的。

   把專案釋出到Tomcat7,啟動Tomcat7。在瀏覽器訪問:http://localhost:8080/Servlet3.0Study/Servlet3Demo

  

  可以看到,我們已經成功訪問到了Servlet3Demo,我們在MyEclipse8.5中開發的第一個Servlet3.0程式成功了。

四、使用MyEclipse10+Tomcat7+JDK1.7開發Servlet3.0程式

  在上面,我們使用MyEclipse8.5來開發了一個Servlet3.0的程式,但由於MyEclipse8.5本身不支援Servlet3.0,所以還得搭建Servlet3.0的開發環境,極其麻煩,但使用MyEclipse10以上的版本就不一樣了,MyEclipse10支援Servlet3.0的開發,因此還是推薦使用MyEclipse10+Tomcat7.x+JDK1.6+的組合來開發Servlet3.0的程式。

4.1、建立WebProject

  1、使用MyEclipse10新建一個Web Project,選擇Java EE6.0,如下圖所示:

  

  建立好的專案如下圖所示:

  

  JavaEE6的jar檔案如下圖所示:

  

  專案的web.xml檔案內容如下:

複製程式碼
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app version="3.0" 
 3     xmlns="http://java.sun.com/xml/ns/javaee" 
 4     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 5     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
 6     http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
 7   <display-name></display-name>    
 8   <welcome-file-list>
 9     <welcome-file>index.jsp</welcome-file>
10   </welcome-file-list>
11 </web-app>
複製程式碼

  注意web.xml檔案中的version資訊,version="3.0"http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd 這就是表示當前使用的是Servlet3.0的版本。

4.2、開發Servlet3.0程式

4.2.1、建立Servlet

  新建一個Servlet,寫上Servlet的Name,然後Next,如下所示:

  

  

  這樣建好一個Servlet後,在web.xml檔案中沒有任何關於這個Servlet的描述資訊。

4.2.2、使用註解描述Servlet

程式碼如下:

複製程式碼
 1 package me.gacl.web.controller;
 2 
 3 import java.io.IOException;
 4 import javax.servlet.ServletException;
 5 import javax.servlet.annotation.WebServlet;
 6 import javax.servlet.http.HttpServlet;
 7 import javax.servlet.http.HttpServletRequest;
 8 import javax.servlet.http.HttpServletResponse;
 9 
10 @WebServlet(name="Servlet3FirstDemo",value="/Servlet3FirstDemo")
11 public class Servlet3FirstDemo extends HttpServlet {
12 
13     
14     public void doGet(HttpServletRequest request, HttpServletResponse response)
15             throws ServletException, IOException {
16 
17         response.getWriter().write("Hello Servlet3.0");
18     }
19 
20     
21     public void doPost(HttpServletRequest request, HttpServletResponse response)
22             throws ServletException, IOException {
23 
24         this.doGet(request, response);
25     }
26 }
複製程式碼

4.3、部署Web應用到Tomcat7

  把專案釋出到Tomcat7,啟動Tomcat7,如下圖所示:

  

  在瀏覽器訪問:http://localhost:8081/Servlet3.0Study/Servlet3FirstDemo 執行結果如下:

  

  可以看到,使用MyEclipse10開發一個Servlet3.0的程式是非常方便和快捷的。Servlet3.0提供了註解之後對於Servlet的開發就方便多了,省去了在web.xml檔案中配置。