Servlet 3.0 新特性概覽1(轉)

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中配置如下代碼:

 

[html] view plaincopy
  1. <</span>servlet>      
  2.     <</span>servlet-name></</span>servlet-name>  
  3.     <</span>servler-class></</span>servlet-class>  
  4.     <</span>load-on-startup></</span>load-on-startup>  
  5.     <</span>init-param>  
  6.          <</span>param-name></</span>param-name>  
  7.          <</span>param-value></</span>param-value>  
  8.     </</span>init-param>  
  9. </</span>servlet>  
  10. <</span>servlet-mapping>  
  11.      <</span>servlet-name></</span>servlet-name>  
  12.       <</span>url-pattern></</span>url-pattern>  
  13. </</span>servlet-mapping>  

現在只需要在java源文件的Servlet類前面加上:

@WebServlet(name="",urlPatterns={""},initParams={@WebInitParam(name="",value=""),loadOnStartup=1})

public class FirstServlet extends HttpServlet{}

 

代碼示例:

實現一個最簡單的Servlet。

 

[java] view plaincopy
  1. package org.servlet;  
  2. import java.io.*;  
  3. import javax.servlet.*;  
  4. import javax.servlet.http.*;  
  5. import javax.servlet.annotation.*;  
  6.   
  7. @WebServlet(name="HelloServlet" ,urlPatterns={"/HelloServlet"},loadOnStartup=1,  
  8.                     initParams={  
  9.                            @WebInitParam(name="name",value="xiazdong"),  
  10.                            @WebInitParam(name="age",value="20")  
  11.                     })  
  12. public class HelloServlet extends HttpServlet{  
  13.        public void init(ServletConfig config)throws ServletException{  
  14.               super.init(config);  
  15.        }  
  16.        public void service(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{  
  17.               request.setCharacterEncoding("GBK");  
  18.               ServletConfig config = getServletConfig();  
  19.               PrintWriter out = response.getWriter();  
  20.               out.println("");  
  21.               out.println("");  
  22.               out.println("Hello world"+"");  
  23.               out.println(config.getInitParameter("name"));  
  24.               out.println("");  
  25.               out.println("");  
  26.        }  
  27. }  

 

這樣的話只需要將class文件放入WEB-INF\classes 中,不需要再web.xml中作任何改動就完成部署;

 

2.Filter

 

原本Filter的配置如下:

 

[html] view plaincopy
  1. <</span>filter>  
  2.     <</span>filter-name></</span>filter-name>  
  3.     <</span>filter-class></</span>filter-class>  
  4. <</span>filter>  
  5. <</span>filter-mapping>  
  6.     <</span>filter-name></</span>filter-name>  
  7.     <</span>url-pattern></</span>url-pattern>  
  8. </</span>filter-mapping>   
  9.   
  10.    

現在只需要在java源文件的Filter類前面加上

@WebFilter(filterName="",urlPattern={"/"});

 

3.Listener

 

原本在web.xml中配置如下:

 

[html] view plaincopy
  1. <</span>listener>   
  2.       <</span>listener-class></</span>listener-class>  
  3. </</span>listener>  
  4.   
  5.    

現在只需要在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

 

[java] view plaincopy
  1.    
  2.   
  3. package org.listener;  
  4. import javax.servlet.annotation.*;  
  5. import javax.servlet.http.*;  
  6. import javax.servlet.*;  
  7. import java.util.*;  
  8. import java.sql.*;  
  9. import javax.naming.*;  
  10. public class FirstListener implements ServletRequestListener{  
  11.        public void requestInitialized(ServletRequestEvent event){  
  12.               System.out.println("FirstListener created");  
  13.        }  
  14.        public void requestDestroyed(ServletRequestEvent event){  
  15.               System.out.println("FirstListener destroyed");  
  16.        }  
  17. }  


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章