sevlet 3.0 web項目搭建及web.xml講解

  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文件中配置。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章