Servlet2.5版本和Servlet3.0版本

在學習這節以前你須要在你本身的電腦進行以下配置:css

在使用Eclipse建立Dynamic Web Projcet時,有一個選項是Dynamic web module version:html

首先須要說的是:java

  • 這裏的版本指的是Servlet的版本;
  • 若是你的jdk版本≥ 1.6纔會有3.0的選項,而且默認是當前最高版本;

Servlet 3.0 做爲 Java EE 6 規範體系中一員,隨着 Java EE 6 規範一塊兒發佈。該版本在前一版本(Servlet 2.5)的基礎上提供了若干新特性用於簡化 Web 應用的開發和部署。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,項目結構以下圖:tomcat

Web項目的根目錄/有兩個:服務器

  • 一個是WebContent :通常用來存放html、js、css等文件;
  • 另外一個是src:用來存放java源代碼;

咱們能夠查看項目在磁盤上的文件結構:併發

注:app

  • web.xml 中的/:表明Web項目根路徑,對應的URL請求爲http://localhost:8008/Servlet2.5/;
  • jsp中的/:服務器根路徑,對應的URL請求爲http://localhost:8008/;

一、建立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。

二、使用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類:

輸出以下:

三、部署項目到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/路徑下。

 四、升級到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版本

一、開發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+

二、建立Dynamic Web Projct項目

首先建立一個名爲Servlet3.0的Dynamic Web Projct項目,Dynamic web module version選擇3.0,而且勾選上Generate web.xml deployment descriptor:

項目結構以下圖:

 

三、建立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>

四、使用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"})

五、部署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

[2]Servlet2.5和 3.0區別(Servlet 3.0 新特性詳解)

[3]將Servlet3.0版本的JavaWeb項目 回退到Servlet2.5版本

相關文章
相關標籤/搜索