Servlet3.0之组件注册

1.servlet3.0概述

Servlet3.0是Java EE6规范的一部分,Servlet3.0提供了注解(annotation),使得不再需要在web.xml文件中进行Servlet的部署描述,简化开发流程。具体的介绍看官方文档,这里主要记录一下我的学习测试使用过程。

2.创建动态web工程

注意:Servlet3.0是tomcat7.0版本及以后的版本的支持的,在创建的时候记得选择版本,还有servlet的版本。我的如下图所示。创建完成之后是没有web.xml文件的。我们使用servlet3.0开发就是不需要web.xml,当然你要结合使用也可以。
在这里插入图片描述在这里插入图片描述

3.创建web3大组件

3.1Servlet

以前我们编写自己的servlet需要继承HttpServlet然后在xml中进行这样的配置

	<servlet>
	    <servlet-name>helloServlet</servlet-name>
	    <servlet-class>cn.hzu.servlet.HelloServlet</servlet-class>	 
	    <init-param>
        <param-name>username</param-name>
        <param-value>zhangsan</param-value>
    </init-param>  
	</servlet>
	<servlet-mapping>
	    <servlet-name>helloServlet</servlet-name>
	    <url-pattern>/hello</url-pattern>
	</servlet-mapping> 

现在只要加个@WebServlet注解就好了,xml里面的参数写在注解里面。具体看下面例子。

package cn.hzu.servlet;

import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(urlPatterns = "/hello",
		initParams = {
			@WebInitParam(name="username",value="zhangsan")	,
			@WebInitParam(name="pwd",value="123456")	
		}
)
public class HelloServlet extends HttpServlet{
	
	private static final long serialVersionUID = 1L;
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)  {
		
		try {
			resp.getWriter().write("hello...");
		} catch (java.io.IOException e) {
			e.printStackTrace();
		}
		
	}
}

3.2Listener

以前我们编写自己的Listener需要继承实现监听的接口(以ServletContextListener为例),然后在web.xml进行这样的配置

<!-- 监听器开始 -->
	<listener>
		<listener-class>cn.hzu.listener.UserListener</listener-class>
	</listener>
	
<!-- 监听器结束 -->

现在只需要加一个@WebListener注解就可以了。

package cn.hzu.listener;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;

/**
 * 监听项目的启动和停止
 * 
 *
 */
@WebListener
public class UserListener implements ServletContextListener {

	
	//监听ServletContext销毁
	@Override
	public void contextDestroyed(ServletContextEvent arg0) {
		// TODO Auto-generated method stub
		System.out.println("userListener...contextDestroyed...");
	}

	//监听ServletContext启动初始化
	@Override
	public void contextInitialized(ServletContextEvent arg0) {
		//从ServletContextEvent中获取ServletContext对象
		ServletContext servletContext = arg0.getServletContext();
		System.out.println("UserListener...contextInitialized...");
	}

}

3.3Filter

以前编写自己的Filter需要实现Filter接口并在web.xml中这样配置

	<filter>
		<filter-name>MyFilter</filter-name>
		<filter-class>cn.hzu.filter.UserFilter</filter-class>
		<init-param>
			<param-name>xxx</param-name>
			<param-value>aaa</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>EncodeingFilter</filter-name>
		<url-pattern->/
		* </url-pattern>		
	</filter-mapping>

现在只需要加一个@WebFilter注解就可以了

package cn.hzu.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;


@WebFilter
public class UserFilter implements Filter {

	@Override
	public void destroy() {
		
	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		
		System.out.println("过滤器放行....................");
		chain.doFilter(request, response);
		
	}

	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		System.out.println("过滤器初始化..................");
		
	}

	
}


4.启动项目测试

运行项目可以发现监听器监听器器作用了,同时过滤器也进行了初始化工作
在这里插入图片描述请求servet可以发现可以正常请求
在这里插入图片描述
关闭项目项目时,监听器也触发了,注意这里要正常关闭才能触发,直接点stop是不行的,这里我就不演示了,前面起作用了就证明使用注解就可以的了。
总结:在没有web.xml的情况下,或者不想在web.xml中进行繁杂的配置就可以使用@WebFilter,@WebListener,@WebServlet这三个注解。如果需要带参数那就结合@WebInitParam注解使用。

抛出问题:我们可以发现使用注解只能配置自己的编写的过滤器,监听器和servlet,但是对于第三方的组件呢,没有了web.xml,我们怎么配置?总不能跑到人家类上去贴个注解吧。这里就需要使用servlet3.0的 Sharedlibraries(共享库) / runtimes pluggability(运行时插件能力)的知识了。下一篇继续测试。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值