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】
三、使用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檔案中配置。