天天看点

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.