javaweb 用拦截器实现编码设置

使用Filter 设置编码简化Servlet的开发

1. 核心代码

package com.mscncn.jsd1404;

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;

public class EncodingFilter implements Filter {

	private static String encoding;
	private static final String DEFAULT_CHARSET="UTF-8";
	@Override
	public void destroy() {
		System.out.println("--------destroy---------");
	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		System.out.println("--------doFilter---------");
		HttpServletRequest httpRequest = (HttpServletRequest) request;  
		HttpServletResponse httpResponse=(HttpServletResponse)response;
		if("GET".equals(httpRequest.getMethod())){
			EncodingHttpServletRequest wrapper = new EncodingHttpServletRequest(httpRequest, encoding);   
            chain.doFilter(wrapper, response);  
		}else{
			httpRequest.setCharacterEncoding(encoding);
			httpResponse.setContentType("text/html;charset="+encoding);
		}
	}
	private static class  EncodingHttpServletRequest extends HttpServletRequestWrapper{
		 private HttpServletRequest request;
		 public EncodingHttpServletRequest(HttpServletRequest request,String encoding) {
		   super(request);
		   this.request = request;
		 }
		 @Override
		public String getParameter(String name) {
			   String value = request.getParameter(name);
			   try {
			    value = new String(value.getBytes("iso8859-1"), encoding);
			   } catch (UnsupportedEncodingException e) {
			    e.printStackTrace();
			   }
			   return super.getParameter(name);
		}
	}
	@Override
	public void init(FilterConfig config) throws ServletException {
		 System.out.println("--------init---------");  
		 encoding = config.getInitParameter("encoding");
		 if(encoding==null||"".equals(encoding))
			 encoding=DEFAULT_CHARSET;
	}

}

2. web.xml 中得配置

<!-- 设置全局的编码格式,针对get,post请求,默认编码为UTF-8 -->
  <filter>
  	<filter-name>characterFilter</filter-name>
  	<filter-class>com.mscncn.jsd1404.EncodingFilter</filter-class>
  	<init-param>
  		<param-name>encoding</param-name>
  		<param-value>UTF-8</param-value>
  	</init-param>
  </filter>
  <filter-mapping>
  	<filter-name>characterFilter</filter-name>
  	<!-- 拦截所有的请求,为所有的请求设置编码 -->
  	<url-pattern>/*</url-pattern>
  </filter-mapping>

javaweb 用拦截器实现编码设置

时间: 2024-10-05 22:37:50

javaweb 用拦截器实现编码设置的相关文章

springmvc+jsp 拦截器下如何设置欢迎页面

0.需求 如何让用户在浏览器地址栏键入[http://XXX.XXX.XX.XX:端口号/应用名/]以后自动跳转到系统的登录界面 1.web.xml 1.1 注意welcome-file-list的配置,将welcome-file赋值为"/" 1.2 springmvc 的 dispatcherServlet的url-pattern是"/" <?xml version="1.0" encoding="UTF-8"?>

springmvc 拦截器

一.自定义一个拦截器 1.实现handlerInterceptor接口 preHandler方法: 在目标方法执行之前执行,可以用于做权限检查.日志 .事务 postHandler方法: 在目标方法执行之后,渲染视图之前执行,可对请求域中的属性和视图做修改 afterCompletion方法: 在渲染视图之后执行,可释放资源 2.在<mvc:interceptors>节点下配置这个拦截器,可以使用<mvc:interceptor>节点指定拦截器作用的映射路径 二.拦截器执行的顺序

spring mvc 拦截器

拦截器是针对Mapping的.可以在Mapping下配置对应的拦截的.由于常用mvc:annotation-driven配置Mapping和Adapter,所以这里用mvc:interceptors配置拦截器. 1.单个mapping的拦截器 a.定义拦截器. 实现拦截器接口. b.配置拦截器 拦截queryUser.action,特定某个(queryUser.action) c.controller d.测试,控制台显示 2.多个拦截器 按配置顺序执行. a.增加拦截器 b.配置 1在前,2在

第八章 拦截器机制——《跟我学Shiro》

8.1 拦截器介绍 Shiro使用了与Servlet一样的Filter接口进行扩展:所以如果对Filter不熟悉可以参考<Servlet3.1规范>http://www.iteye.com/blogs/subjects/Servlet-3-1了解Filter的工作原理.首先下图是Shiro拦截器的基础类图: 1.NameableFilter NameableFilter给Filter起个名字,如果没有设置默认就是FilterName:还记得之前的如authc吗?当我们组装拦截器链时会根据这个名

基于CXF框架的webservice简单的SC两端出入拦截器实现。

开发工具:  ECLIPSE(EE) + CXF(2.5.9) (I)可以现在eclipse中使用JDK来创建webservice基础服务.(没有CXF框架的webservice) (1)新建一个java project. (命名为FirstWebService) 新建一个interface接口.改接口就是相当于webservice中的SEI. (在接口类定义前使用JDK自带webservice注释[email protected] SEI方法则是使用@WebMethod生命方法.) (2)在定

Shiro学习(8)拦截器机制

8.1 拦截器介绍 Shiro使用了与Servlet一样的Filter接口进行扩展:所以如果对Filter不熟悉可以参考<Servlet3.1规范>http://www.iteye.com/blogs/subjects/Servlet-3-1了解Filter的工作原理.首先下图是Shiro拦截器的基础类图: 1.NameableFilter NameableFilter给Filter起个名字,如果没有设置默认就是FilterName:还记得之前的如authc吗?当我们组装拦截器链时会根据这个名

struts2(三)之国际化、拦截器

一.国际化 1.1.国际化的定义 软件的国际化:软件开发时,要使它能同时应对世界不同地区和国家的访问,并针对不同地区和国家的访问,提供相应的.符合来访者阅读习惯的页面或数据. 1.2.什么需要国际化 程序:需要国际化 数据:不需要国际化 比如:软用户注册的表单,有用户名,密码这5个汉字,在zh_CN语言环境,显示的就是用户名和密码.但是在en_US语言环境,显示的就应该是username和password.这就是程序. 我们在填写数据的时候,美女和123这样的数据是不需要的 1.3.固定文本的国

Struts2(XWork)拦截器的功能介绍:

  拦截器 名字 说明 Alias Interceptor alias 在不同请求之间将请求参数在不同名字件转换,请求内容不变 Chaining Interceptor chain 让前一个Action的属性可以被后一个Action访问,现在和chain类型的result(<result type="chain">)结合使用. Checkbox Interceptor checkbox 添加了checkbox自动处理代码,将没有选中的checkbox的内容设定为false,

Hibernate拦截器(Interceptor)与事件监听器(Listener)

拦截器(Intercept):与Struts2的拦截器机制基本一样,都是一个操作穿过一层层拦截器,每穿过一个拦截器就会触发相应拦截器的事件做预处理或善后处理. 监听器(Listener):其实功能与拦截器是相似的,但它实现原理不同,它是为每一个事件注册一个或多个监听器,一旦事件发生,则事件源通知所有监听该事件的监听器,然后监听器处理通知(观察者模式). 拦截器 Hibernate为我们提供了实现拦截器的接口org.hibernate.Interceptor,它里面提供了许多拦截事件.通常不需要实