我使用的開發環境:MyEclipse10+Tomcat7+JDK6。
開發Servlet3的程序需要一定的環境支持。Servlet3是Java EE6規范的一部分,MyEclipse10和Tomcat7都提供了對Java EE6規范的支持。
Tomcat需要Tomcat7才支持Java EE6,Tomcat7需要使用JDK6。
如果使用的MyEclipse的版本較低,沒有提供Java EE6的支持,可以到Oracle官方網站下載JavaEE6的SDK進行安裝,或者從Tomcat7的解壓目錄下的lib文件夾中把所有jar文件引用到我們的項目路徑下。(例如:先建一個Java EE5的web項目,然后把Tomcat7的解壓目錄下的lib文件夾中的所有jar引入到項目中,再刪除Java EE5的庫引用,最后從Tomcat7的解壓目錄下的conf文件夾下把web.xml模板拷貝到項目,替換掉原來的web.xml)。
Servlet3.0提供了注解(annotation),使得不再需要在web.xml文件中進行Servlet的部署描述,簡化開發流程。
1、新建一個Web Project,直接選擇Java EE6.0。
2、看一下項目包視圖。
3、Java EE6的庫文件
4、web.xml文件
<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" 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"> </web-app>
注意version="3.0"和http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd。
5、新建一個Servlet。寫上Servlet的Name,然后Next。
6、不需要在web.xml文件中生成Servlet的相關信息。Finish。
7、這樣建好一個Servlet后,在web.xml文件中沒有任何關於這個Servlet的描述信息。
<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" 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"> </web-app>
8、使用注解描述Servlet。
package com.cndatacom.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * 使用注解描述Servlet * @author Luxh */ /** * 注解WebServlet用來描述一個Servlet * 屬性name描述Servlet的名字,可選 * 屬性urlPatterns定義訪問的URL,或者使用屬性value定義訪問的URL.(定義訪問的URL是必選屬性) */ @WebServlet(name="AnnotationServlet",urlPatterns="/AnnotationServlet") public class AnnotationServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); out.println("<!DOCTYPE HTML>"); out.println("<HTML>"); out.println(" <HEAD>"); out.println(" <TITLE>A Servlet</TITLE>"); out.println(" <meta http-equiv=\"content-type\" " + "content=\"text/html; charset=utf-8\">"); out.println(" </HEAD>"); out.println(" <BODY>"); out.println(" Hello AnnotationServlet."); out.println(" </BODY>"); out.println("</HTML>"); out.flush(); out.close(); } }
9、把項目發布到Tomcat7,啟動Tomcat7。在瀏覽器訪問:http://localhost:8080/Servlet3/AnnotationServlet
完成了一個使用注解描述的Servlet程序開發。
使用@WebServlet將一個繼承於javax.servlet.http.HttpServlet的類定義為Servlet組件。
@WebServlet有很多的屬性:
asyncSupported:聲明Servlet是否支持異步操作模式。
description: Servlet的描述。
displayName: Servlet的顯示名稱。
initParams: Servlet的init參數。
name: Servlet的名稱。
urlPatterns: Servlet的訪問URL。
value: Servlet的訪問URL。
Servlet的訪問URL是Servlet的必選屬性,可以選擇使用urlPatterns或者value定義。
像上面的AnnotationServlet可以描述成@WebServlet(name="AnnotationServlet",value="/AnnotationServlet")。
也定義多個URL訪問:
如@WebServlet(name="AnnotationServlet",urlPatterns={"/AnnotationServlet","/AnnotationServlet2"})
或者@WebServlet(name="AnnotationServlet",value={"/AnnotationServlet","/AnnotationServlet2"})