在學習這節以前你須要在你本身的電腦進行以下配置:css
在使用Eclipse建立Dynamic Web Projcet時,有一個選項是Dynamic web module version:html
首先須要說的是:java
Servlet 3.0 做爲 Java EE 6 規範體系中一員,隨着 Java EE 6 規範一塊兒發佈。該版本在前一版本(Servlet 2.5)的基礎上提供了若干新特性用於簡化 Web 應用的開發和部署。web
Servlet2.5和Servlet3.0的最大區別在於,Servlet3.0引入了幾項特性:瀏覽器
本篇博客主要介紹Servlet3.0新增的註解支持特性。Servlet3.0提供了註解(annotation),使得再也不須要在web.xml文件中進行Servlet的部署描述,簡化開發流程。緩存
首先建立一個名爲Servlet2.5的Dynamic Web Projct項目,Dynamic web module version選擇2.5,項目結構以下圖:tomcat
Web項目的根目錄/有兩個:服務器
咱們能夠查看項目在磁盤上的文件結構:併發
注:app
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <form method='post' action='WelcomeServlet'> <input type='submit' value='登陸'> </form> <a href='WelcomeServlet' >WelcomeServlet</a> </body> </html>
jsp代碼位於WebContent目錄下, 此時超連接將會請求項目根路徑下/的WelcomeServlet文件(這裏使用的相對路徑,相對的是項目根路徑/),此時實際請求的是http://localhost:8008/Servlet2.5/WelcomeServlet。
<a href='WelcomeServlet'>WelcomeServlet</a>
注意:若是將上面jsp代碼中WelcomeServlet更改成/WelcomeServlet,這個/則指的是服務器的根路徑,也就是http://localhost:8008/,此時點擊超連接請求的路徑實際是http://localhost:8008/WelcomeServlet。
並實現doPost()、doGet()方法以下:
package com.servlet.test; import java.io.IOException; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class WelcomeServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // TODO Auto-generated method stub //super.doGet(req, resp); //HTTP Status 405 – Method Not Allowed錯誤須要屏蔽掉該語句,並清空緩存,重啓tomcat System.out.println("doGet...."); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // TODO Auto-generated method stub //super.doPost(req, resp); //HTTP Status 405 – Method Not Allowed錯誤須要屏蔽掉該語句,並清空緩存,重啓tomcaw3c System.out.println("doPost...."); } }
經過Eclipse建立的Servlet,會自動配置web.xml文件:
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5"> <display-name>Servlet2.5</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <servlet> <description></description> <display-name>WelcomeServlet</display-name> <servlet-name>WelcomeServlet</servlet-name> <servlet-class>com.servlet.test.WelcomeServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>WelcomeServlet</servlet-name> <url-pattern>/WelcomeServlet</url-pattern> </servlet-mapping> </web-app>
web-app元素指明瞭Servlet的版本爲2.5,經過web.xml配置能夠知道Servlet請求流程:
<a href='WelcomeServlet'>WelcomeServlet</a>
<url-pattern>/WelcomeServlet</url-pattern>
<servlet-class>com.servlet.test.WelcomeServlet</servlet-class>
注意:當從瀏覽器發送一個URL請求時,首先是在web.xml配置查找請求的頁面,若是在配置文件查找不到,則會到項目根路徑下/查找對應的請求文件,若是仍是找不到,則會返回HTTP Status 404 – Not Found!
運行index.jsp,即瀏覽器請求項目根路徑下/的index,jsp文件,輸出以下:
點擊超連接,請求http://localhost:8008/Servlet2.5/WelcomeServlet,執行com.servlet.test.WelcomeServlet類:
輸出以下:
當運行index.jsp時,會將項目部署到E:\tomcat\wtpwebapps路徑下,這是經過Servers設定的:
Server Path爲服務器路徑,Deploy path爲項目的部署路徑,能夠看到項目Servlet2.5被部署到wtpwebapps路徑下:
打開文件夾Servlet2.5能夠看到:
上圖中文件正是Servlet2.5項目WebContent下的文件,此外,WEB-INF文件下還存放了項目src目錄下java代碼的編譯文件(即.class文件):
在部署項目時具體會將哪些文件複製到tomcat目錄下,是經過項目Properties——>Deployment Assembly設置的(默認設置便可)。
注意:這裏的/路徑,指的是wtpwebapps/Servlet2.5/路徑下。
若是想將Servlet2.5升級爲Servlet3.0,須要進行以下設置,右鍵項目Properties——>Project Facets——>Dynamic Web Dodule更改成3.0。
此時不要去更改XML文件關於WelcomeServlet的配置。若是想刪掉XML中關於WelcomeServlet的配置,咱們須要在WelcomeServlet類聲明以前新增註解@WebServlet("/WelcomeServlet")。
下面咱們將會詳細介紹Servlet3.0版本。
開發Servlet3.0的程序須要必定的環境支持。Eclipse10和Tomcat7都提供了對Java EE6規範的支持。Tomcat須要Tomcat7才支持Java EE6,Tomcat7須要使用JDK1.6以上的版本。
因此開發Servlet3.0的程序須要如下的開發環境支持:
首先建立一個名爲Servlet3.0的Dynamic Web Projct項目,Dynamic web module version選擇3.0,而且勾選上Generate web.xml deployment descriptor:
項目結構以下圖:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <form method='post' action='WelcomeServlet'> <input type='submit' value='登陸'> </form> <a href='WelcomeServlet' >WelcomeServlet</a> </body> </html>
並實現doPost()、doGet()方法以下:
package com.servlet.test; import java.io.IOException; 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 implementation class WelcomeServlet */@WebServlet(name="WelcomeServlet",value="/WelcomeServlet") public class WelcomeServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public WelcomeServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub System.out.println("Servlet3.0...doGet"); response.getWriter().print("Servlet3.0...doGet"); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub System.out.println("Servlet3.0...doPost"); response.getWriter().print("Servlet3.0...doPost"); } }
在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定義:
如@WebServlet(name="Servlet3Demo",urlPatterns={"/WelcomeServlet","/WelcomeServlet2"})
或者@WebServlet(name="AnnotationServlet",value={"/WelcomeServlet","/WelcomeServlet2"})
點擊Servers右鍵——>Add and Remove——>將項目Servlet3.0部署到Tomcat服務器上,而後Servers右鍵Start服務器:
並自動打開瀏覽器訪問:http://localhost:8008/Servlet2.5/WelcomeServlet:
能夠看到,使用Eclipse10開發一個Servlet3.0的程序是很是方便和快捷的。Servlet3.0提供了註解以後對於Servlet的開發就方便多了,省去了在web.xml文件中配置。
參考文獻
[1]Servlet3.0(一)--使用註解標註Servlet @WebServlet