Servlet2.5版本和Servlet3.0版本


在學習這節之前你需要在你自己的電腦進行如下配置:

在使用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

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM