天天看點

Servlet3.0新特性——注解代替xml配置檔案注解代替xml配置檔案

注解代替xml配置檔案

一、Servlet3.0 新特性 概述

Servlet3.0的主要新特性如下三部分:

  • 使用

    @WebServlet

    @WebFilter

    @WebListener

    三個注解來替代web.xml檔案中的Servlet、Filter、Listener的配置;
  • Servlet異步處理:當Servlet處理比較費時的問題時,這會讓客戶感覺到很卡。當使用異常處理時可以把已經處理好的内容先一步響應給用戶端浏覽器,然後使用另一個線程來完成費時的操作,也就是把内容一部分一部分的顯示出來;
  • 上傳元件:不用再使用fileupload等第三方的上傳元件,使用Servlet3.0的上傳元件會更友善。

這篇文章我們介紹一下,如何用注解來替代配置檔案。

二、注解替代xml

① Servlet注解

我們先來回憶一下,Servlet在web.xml中是怎麼配置的。

我們給出一個普通的Servlet配置:

<servlet>
	<servlet-name>AServlet</servlet-name>
	<servlet-class>com.veeja.web.servlet.AServlet</servlet-class>

	<init-param>
		<param-name>p1</param-name>
		<param-value>v1</param-value>
	</init-param>
	<init-param>
		<param-name>p2</param-name>
		<param-value>v2</param-value>
	</init-param>
	<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
	<servlet-name>AServlet</servlet-name>
	<url-pattern>/AServlet</url-pattern>
</servlet-mapping>
           

上面我們都配置了

<servlet-name>

<servlet-class>

<url-pattern>

這三項最基本的配置,用這三項将servlet的類與請求的URL綁定在一起。我們還設定了兩個初始化參數,

p1

/

p2

,也設定了啟動的優先級

<load-on-startup>

我們把這個Servlet寫出來,内容很簡單,在控制台輸出"hello servlet3.0",并且在前台顯示"hahahahaha"。

public class AServlet extends HttpServlet {
	public void doGet(HttpServletRequest req,
			HttpServletResponse resp) throws ServletException,
			IOException {
		System.out.println("hello servlet3.0");
		resp.getWriter().print("hahahahaha");
	}
}
           

那麼我們要用注解來代替這些配置,首先是通過

<servlet-name>

<servlet-class>

<url-pattern>

這三項綁定在一起,我們完全可以在這個servlet上加一個

@WebServlet

的注解,添加一個

urlPatterns

屬性,就直接完成了類與URL的綁定,也就是:

@WebServlet(urlPatterns = { "/AServlet" })
public class AServlet extends HttpServlet {
	public void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		System.out.println("hello servlet3.0");
		resp.getWriter().print("hahahahaha");
	}
}
           

我們這樣先釋出到tomcat下試一試,在網頁中直接請求這個Servlet:

Servlet3.0新特性——注解代替xml配置檔案注解代替xml配置檔案

我們可以看到,這樣是完全可以的。這樣,注解的優點就展現的很明顯了,就是配置資訊很少,一套xml配置隻需要一條WebServlet注解就可以完成了。但是這樣也有一個很大的缺點,那就是如果你想修改配置的話,就需要修改源代碼,這一點上不太友善。

另外,還有一些其他的配置選項,比如初始化參數

<init-param>

,啟動的優先級

<load-on-startup>

,這些要怎麼樣配置呢?

<init-param>

使用initParams來代替,它的值需要給出一個注解類

@WebInitParam

,這個注解類需要的是name和value。我們可以示範一下,将上面的p1/p1添加進入注解:

@WebServlet(
		urlPatterns = { "/AServlet" }, 
		initParams = {
			@WebInitParam(name = "p1", value = "v1"),
			@WebInitParam(name = "p2", value = "v2"), 
		}
)
public class AServlet extends HttpServlet {

	public void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		System.out.println("hello servlet3.0");
		resp.getWriter().print("hahahahaha");
	}
}
           

<load-on-startup>

需要我們使用loadOnStartup屬性,值就設定成我們需要的值即可,也就是:

@WebServlet(
		urlPatterns = { "/AServlet" }, 
		initParams = {
			@WebInitParam(name = "p1", value = "v1"),
			@WebInitParam(name = "p2", value = "v2"), 
		},
		loadOnStartup = 1
)
public class AServlet extends HttpServlet {

	public void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		System.out.println("hello servlet3.0");
		resp.getWriter().print("hahahahaha");
	}
}
           

這樣我們就完成了使用注解來代替配置檔案。

② Filter和Listener注解

Filter的注解跟Servlet很類似,我們直接給出代碼供參考:

@WebFilter(
	urlPatterns="/*"
)
public class AFilter implements Filter {
	...
	...
}
           

Listener的注解,隻需要給出注解,不需要寫其他的内容:

@WebListener
public class AListener implements ServletContextListener {

	public void contextDestroyed(ServletContextEvent arg0) {
		System.out.println("Tomcat銷毀了!");
	}

	public void contextInitialized(ServletContextEvent arg0) {
		System.out.println("Tomcat出生了!");
	}
}
           

零、前置要求

要想使用Servlet3.0,有兩個要求,首先在MyEclipse上,版本需要10.0及其以上版本,而且Tomcat,需要7.0及其以上版本。

在建立項目的時候,需要選擇JavaEE 6.0,如下圖所示:

Servlet3.0新特性——注解代替xml配置檔案注解代替xml配置檔案

建立完以後,打開web.xml,可以發現3.0的字樣,如下圖所示:

Servlet3.0新特性——注解代替xml配置檔案注解代替xml配置檔案

END.