Filter&Listener

Filter是在访问网页或者servlet中进行先一步处理的机制

0.在eclipse中建立的filter后,在web.xml文件中已经添加了相应的配置信息,可以进行修改

    多个filter构成filter链,按照顺序进行过滤

  <filter>
    <filter-name>Autologin</filter-name>
    <filter-class>lne.Autologin</filter-class>
    <!-- 过滤器的具体路径 -->
    <init-param>
    	<param-name>encoding</param-name>
    	<param-value>utf-8</param-value>
    </init-param>
    <!-- 设定初始化参数 -->
  </filter>
  <filter-mapping>
    <filter-name>Autologin</filter-name>
    <url-pattern>/*</url-pattern>
    <!-- 配置需要过滤的路径,*为通配符 -->
    <dispatcher>FORWARD</dispatcher>
    <!-- 设定拦截类型
    	REQUEST 通过RequestDispatcher的include()和forward()访问的则不会被调用
    	INCLUDE 过滤RequestDispatcher的include()
    	FORWARD 过滤RequestDispatcher的forward()
    	ERROR	通过异常处理机制调用
     -->
  </filter-mapping>
  <!-- 如果有多个filter过滤相同的url,则按照在web.xml顺序进行过滤 -->

2.请求和响应设定需转化

HttpServletRequest request = (HttpServletRequest) req;
		Cookie[] cookies = request.getCookies();

3.设定全局编码方式

package lne;

import java.io.IOException;
import java.io.UnsupportedEncodingException;

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.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet Filter implementation class CharacterFilter
 */
public class CharacterFilter implements Filter {

    /**
     * Default constructor. 
     */
    public CharacterFilter() {
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see Filter#destroy()
	 */
	public void destroy() {
		// TODO Auto-generated method stub
	}

	/**
	 * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
	 */
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		// TODO Auto-generated method stub
		// place your code here
		System.out.println("encoding...");
		HttpServletRequest req = (HttpServletRequest) request;
		HttpServletResponse resp = (HttpServletResponse) response;
		//转化为servlet的请求和响应
		req.setCharacterEncoding("utf-8");
		resp.setContentType("text/html;charset=utf-8");
		//设置请求编码和响应编码
		CharacterRequest characterRequest = new CharacterRequest(req);
		//pass the request along the filter chain
		chain.doFilter(characterRequest, resp);
		//chain.doFilter(req, resp);
	}

	/**
	 * @see Filter#init(FilterConfig)
	 */
	public void init(FilterConfig fConfig) throws ServletException {
		// TODO Auto-generated method stub
	}

}
//get方式的请求参数放在消息头中,必须通过获取URI参数才能进行设置
class CharacterRequest extends HttpServletRequestWrapper{
	private HttpServletRequest request;
	public CharacterRequest(HttpServletRequest request){
		super(request);
		this.request=request;
	}
	public String gerParameter(String name){
		//重写获得参数方法
		String value = super.getParameter(name);
		String method = super.getMethod();
		//请求的值不为空且方式是以get提交
		if(value!=null && "get".equalsIgnoreCase(method)){
			try{
				value = new String(value.getBytes("iso-8859-1"),"utf-8");
			}catch(UnsupportedEncodingException e){
				throw new RuntimeException(e);
			}
		}
		return value;
	}
}

Listener监听器,可以监听创建和销毁(lifecycle),增加和删除(Changes to Attributes)

其中在web.xml配置Listener--?需在servlet之前,filter之后?实际操作并没有也可成功

<listener>
    <listener-class>lne.Plice</listener-class>
 </listener>

在实现implements中可以写发生该事件需要做的操作,可监控servlet&&jsp


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值