过滤器-编码

interface Filter继承过滤器接口(implements Filter)
三种方法:构造函数:服务器启动时候创建,init():服务器启动时候创建,

doFilter(...):访问的时候执行,destroy():服务器重启或者关闭

doFilter(...){
			//放行
			System.out.println("servlet处理处理之前");
			chain.doFilter(request,response);
			System.out.println("servlet处理完后回到过滤器");
		}
如果有多个过滤器,则按照xml里面的顺序执行
获得:getInitParameter(String name);

xml里面配置:

<filter>
	<filter-name></filter-name>
	<filter-class></filter-class>
</filter>
<filter-mapping>
	<filter-name></filter-name>
	<url-pattern>/*</url-pattern>
	<init-param>
		<param-name>encoding</param-name>
		<param-value>UTF-8</param-value>
	</init-param>
</filter-mapping>

FilterConfig:配置参数

<filter>
	<filter-name></filter-name>
	<filter-class></filter-class>
</filter>

FilterChain:过滤器链参数:一个一个过滤形成一个执行链

配置的时候拦截指定资源:

<filter-mapping>
	<dispatcher>REQUEST</dispatcher>//默认
	<dispatcher>FORWARD</dispatcher>//拦截转发
	<dispatcher>INCLUDE</dispatcher>//拦截包含:RequestDispatcher.include(/page.jsp)
	<dispatcher>ERROR</dispatcher>//拦截声明式异常信息
</filter-mapping>
声明式异常
<error-page>
	<error-code>404</error-code>
	<exception-type></exception-type>
	<location></location>
</error-page>


编码处理:

request.setCharacterEncoding("UTF-8");   //post提交有效
response.setContentType("text/html;charset=UTF-8");
Filter里面的是ServletRequest,Servlet里面是HttpServletRequest
如果Filter里面要调用request的其他方法,可以转型,response同样
HttpServletRequest request=(HttpServletRequest)req;
HttpServletResponse response=(HttpServletResponse)res;

如果post和get提交都有效,需要创建代理对象

Proxy.newProxyInstance(
	request.getClass().getClassLoader(),//指定当前使用的累加载器
	new Class[]{HttpServletRequest.class},//对目标对象的接口类型
	HttpServletRequest http=(强转)new InvocationHandler() {
<span style="white-space:pre">		</span>@Override
<span style="white-space:pre">		</span>public Object invoke(Object proxy, Method method, Object[] args)
					throws Throwable {
                                Object returnValue=null;
				String  meth=request.getName();
				if("getParameter".equals(meth)){
				String value=request.getParameter(args[0].toString());
					String methname=request.getMthod();
			        	if("GET".equals(methname)){  
     			                  if(value!=null && !"".equals(value.trim()))  
			                        value=new String(value.getBytes("ISO8859-1"),"UTF-9"); 
			       		 }  
			      		return value;
				}else{
					returnValue=meth.invoke(request,args);  
				}
				return returnValue;
			}
	};



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值