在學習這節之前你需要在你自己的電腦進行如下配置:
- 配置Java運行環境:JDK+JRE的安裝配置,參考博客Windows下配置Java開發環境;
- 安裝Eclipse:參考博客Windows下配置Java開發環境,在下載Eclipse版本時要選擇JavaEE企業級開發版本;
- 在Eclipse中配置Tomcat服務器:參考博客如何在Eclipse配置Tomcat服務器;
在使用Eclipse創建Dynamic Web Projcet時,有一個選項是Dynamic web module version:
首先需要說的是:
- 這里的版本指的是Servlet的版本;
- 如果你的jdk版本≥ 1.6才會有3.0的選項,並且默認是當前最高版本;
Servlet 3.0 作為 Java EE 6 規范體系中一員,隨着 Java EE 6 規范一起發布。該版本在前一版本(Servlet 2.5)的基礎上提供了若干新特性用於簡化 Web 應用的開發和部署。
Servlet2.5和Servlet3.0的最大區別在於,Servlet3.0引入了幾項特性:
- 異步處理支持:有了該特性,Servlet 線程不再需要一直阻塞,直到業務處理完畢才能再輸出響應,最后才結束該 Servlet 線程。在接收到請求之后,Servlet 線程可以將耗時的操作委派給另一個線程來完成,自己在不生成響應的情況下返回至容器。針對業務處理較耗時的情況,這將大大減少服務器資源的占用,並且提高並發處理速度;
- 新增的注解支持:該版本新增了若干注解,用於簡化 Servlet、過濾器(Filter)和監聽器(Listener)的聲明,這使得 web.xml 部署描述文件從該版本開始不再是必選的了;
- 可插性支持:熟悉 Struts2 的開發者一定會對其通過插件的方式與包括 Spring 在內的各種常用框架的整合特性記憶猶新。將相應的插件封裝成 JAR 包並放在類路徑下,Struts2 運行時便能自動加載這些插件。現在 Servlet 3.0 提供了類似的特性,開發者可以通過插件的方式很方便的擴充已有 Web 應用的功能,而不需要修改原有的應用;
本篇博客主要介紹Servlet3.0新增的注解支持特性。Servlet3.0提供了注解(annotation),使得不再需要在web.xml文件中進行Servlet的部署描述,簡化開發流程。
一 Servlet2.5 XML配置文件
首先創建一個名為Servlet2.5的Dynamic Web Projct項目,Dynamic web module version選擇2.5,項目結構如下圖:
Web項目的根目錄/有兩個:
- 一個是WebContent :一般用來存放html、js、css等文件;
- 另一個是src:用來存放java源代碼;
我們可以查看項目在磁盤上的文件結構:
注:
- web.xml 中的/:代表Web項目根路徑,對應的URL請求為http://localhost:8008/Servlet2.5/;
- jsp中的/:服務器根路徑,對應的URL請求為http://localhost:8008/;
1、創建index.jsp文件,位於WebContent目錄下
<%@ 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。
2、使用Eclipse創建一個Servlet類,位於包com.servlet.test下,名稱為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請求流程:
- 當點擊超鏈接,會請求項目根路徑下/的WelcomeServlet,即http://localhost:8008/Servlet2.5/WelcomeServlet;
<a href='WelcomeServlet'>WelcomeServlet</a>
- 首先會在web.xml配置文件查找請求的頁面,在<url-pattern>中可以找到請求的頁面/WelcomeServlet(前面已經介紹到web.xml 中的/:代表項目根路徑,也就是http://localhost:8008/Servlet2.5/);
<url-pattern>/WelcomeServlet</url-pattern>
- 根據 <servlet-mapping>中的<servlet-name> 去匹配<servlet>中的<servlet-name>,最終將該請求交給<servlet-class>中的com.servlet.test.WelcomeServlet執行;
<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類:
輸出如下:
3、部署項目到tomcat服務器
當運行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設置的(默認設置即可)。
- /src路徑下的文件被部署到WEB-INF/classes下;
- /WebContent下的文件被部署到根路徑/下;
注意:這里的/路徑,指的是wtpwebapps/Servlet2.5/路徑下。
4、升級到3.0版本
如果想將Servlet2.5升級為Servlet3.0,需要進行如下設置,右鍵項目Properties——>Project Facets——>Dynamic Web Dodule更改為3.0。
此時不要去更改XML文件關於WelcomeServlet的配置。如果想刪掉XML中關於WelcomeServlet的配置,我們需要在WelcomeServlet類聲明之前新增注解@WebServlet("/WelcomeServlet")。
下面我們將會詳細介紹Servlet3.0版本。
二 Servlet3.0版本
1、開發Servlet3.0程序的所需要的環境
開發Servlet3.0的程序需要一定的環境支持。Eclipse10和Tomcat7都提供了對Java EE6規范的支持。Tomcat需要Tomcat7才支持Java EE6,Tomcat7需要使用JDK1.6以上的版本。
所以開發Servlet3.0的程序需要以下的開發環境支持:
- IDE:Eclipse 10+
- JDK:JDK 1.6+
- tomcat:tomcat 7+
2、創建Dynamic Web Projct項目
首先創建一個名為Servlet3.0的Dynamic Web Projct項目,Dynamic web module version選擇3.0,並且勾選上Generate web.xml deployment descriptor:
項目結構如下圖:
3、創建index.jsp文件,位於WebContent目錄下
<%@ 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>
4、使用Eclipse創建一個Servlet類,位於包com.servlet.test下,名稱為WelcomeServlet
並實現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定義:
- 像上面的WelcomeServlet 可以描述成@WebServlet(name="WelcomeServlet",value="/WelcomeServlet");
- 也定義多個URL訪問:
如@WebServlet(name="Servlet3Demo",urlPatterns={"/WelcomeServlet","/WelcomeServlet2"})
或者@WebServlet(name="AnnotationServlet",value={"/WelcomeServlet","/WelcomeServlet2"})
5、部署Web項目到Tomcat
點擊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