Servlet 3.0 新特性概覽
1.Servlet、Filter、Listener無需在web.xml中進行配置,可以通過Annotation進行配置;
2.模塊化編程,即將各個Servlet模塊化,將配置文件也分開配置。
3.Servlet異步處理,應對複雜業務處理;
4.異步Listener,對於異步處理的創建、完成等進行監聽;
5. 文件上傳API簡化;
tomcat 7.0.X 支持Servlet 3.0
一、Annotation支持
1.Servlet
原本Servlet開發完後,必須在web.xml中配置如下代碼:
- <</span>servlet>
- <</span>servlet-name></</span>servlet-name>
- <</span>servler-class></</span>servlet-class>
- <</span>load-on-startup></</span>load-on-startup>
- <</span>init-param>
- <</span>param-name></</span>param-name>
- <</span>param-value></</span>param-value>
- </</span>init-param>
- </</span>servlet>
- <</span>servlet-mapping>
- <</span>servlet-name></</span>servlet-name>
- <</span>url-pattern></</span>url-pattern>
- </</span>servlet-mapping>
現在只需要在java源文件的Servlet類前面加上:
@WebServlet(name="",urlPatterns={""},initParams={@WebInitParam(name="",value=""),loadOnStartup=1})
public class FirstServlet extends HttpServlet{}
代碼示例:
實現一個最簡單的Servlet。
- package org.servlet;
- import java.io.*;
- import javax.servlet.*;
- import javax.servlet.http.*;
- import javax.servlet.annotation.*;
- @WebServlet(name="HelloServlet" ,urlPatterns={"/HelloServlet"},loadOnStartup=1,
- initParams={
- @WebInitParam(name="name",value="xiazdong"),
- @WebInitParam(name="age",value="20")
- })
- public class HelloServlet extends HttpServlet{
- public void init(ServletConfig config)throws ServletException{
- super.init(config);
- }
- public void service(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{
- request.setCharacterEncoding("GBK");
- ServletConfig config = getServletConfig();
- PrintWriter out = response.getWriter();
- out.println("");
- out.println("");
- out.println("Hello world"+"");
- out.println(config.getInitParameter("name"));
- out.println("");
- out.println("");
- }
- }
這樣的話只需要將class文件放入WEB-INF\classes 中,不需要再web.xml中作任何改動就完成部署;
2.Filter
原本Filter的配置如下:
- <</span>filter>
- <</span>filter-name></</span>filter-name>
- <</span>filter-class></</span>filter-class>
- <</span>filter>
- <</span>filter-mapping>
- <</span>filter-name></</span>filter-name>
- <</span>url-pattern></</span>url-pattern>
- </</span>filter-mapping>
現在只需要在java源文件的Filter類前面加上
@WebFilter(filterName="",urlPattern={"/"});
3.Listener
原本在web.xml中配置如下:
- <</span>listener>
- <</span>listener-class></</span>listener-class>
- </</span>listener>
現在只需要在java源文件的Listener類前面加上@WebListener即可;
二、web模塊化
原本一個web應用的任何配置都需要在web.xml中進行,因此會使得web.xml變得很混亂,而且靈活性差,因此Servlet 3.0可以將每個Servlet、Filter、Listener打成jar包,然後放在WEB-INF\lib中;注意各自的模塊都有各自的配置文件,這個配置文件的名稱爲 web-fragment.xml ;
製作一個Servlet模塊的步驟:
1.編寫Servlet,並編譯;
2.將此編譯class文件及所在包通過jar包命令打成jar包;
3.將此jar包用winrar打開,並將其中的META-INF中的manifest刪除並添加 web-fragment.xml;
4.將此jar包放入WEB-INF\lib中即可;
web-fragment.xml注意點:
1.根元素爲;
2.表示模塊名稱;
3.是此模塊的加載順序;
4.表示第一個加載;
5.A表示比A後面加載;
6.可以在裏面部署listener、filter、servlet
當然可以不設置任何的模塊加載順序;
代碼示例:
配置兩個listener模塊;
FirstListener.java
- package org.listener;
- import javax.servlet.annotation.*;
- import javax.servlet.http.*;
- import javax.servlet.*;
- import java.util.*;
- import java.sql.*;
- import javax.naming.*;
- public class FirstListener implements ServletRequestListener{
- public void requestInitialized(ServletRequestEvent event){
- System.out.println("FirstListener created");
- }
- public void requestDestroyed(ServletRequestEvent event){
- System.out.println("FirstListener destroyed");
- }
- }