`
ren2881971
  • 浏览: 108355 次
社区版块
存档分类
最新评论

HttpServletRequestWrapper两个类学习总结(有关中文乱码的例子)

    博客分类:
  • j2ee
 
阅读更多
在学习javax.servlet.http包中发现两个类:
HttpServeltRequestWrapper
HttpServletResponseWrapper:
这两个类的方法跟HttpServletRequest/HttpServletResponse的方法基本相同。
可以理解为这两个类是包装类。
可以按照业务需求重写里面的方法,然后将request/response进行包装后,满足具体功能。
实际用例:
过滤中文参数乱码。
具体思路是:
建立filter过滤器和自定义包装类。
在filter过滤的时候对request和response进行过滤和包装,起到让乱码转换成中文的功能。
代码如下:
package demo.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.http.HttpServletRequest;

import demo.wrapper.MyHttpServletRequestWrapper;

public class ContentTypeFilter implements Filter {

	private String charset = "UTF-8";
	private FilterConfig config;

	@Override
	public void destroy() {
		// TODO Auto-generated method stub
		System.out.println(config.getFilterName() + "被销毁");
		charset = null;
		config = null;

	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		// TODO Auto-generated method stub
		request.setCharacterEncoding(charset);
		response.setCharacterEncoding(charset);
		//response.setContentType("text/html;charset=UTF-8");
		HttpServletRequest req = (HttpServletRequest) request;
		if (req.getMethod().equalsIgnoreCase("get")) {

			req = new MyHttpServletRequestWrapper(req, charset);
		}
		System.out.println("----请求被" + config.getFilterName() + "过滤");
		chain.doFilter(req, response);
		System.out.println("----相应" + config.getFilterName() + "过滤");
	}

	@Override
	public void init(FilterConfig config) throws ServletException {
		// TODO Auto-generated method stub
		this.config = config;
		String charset = config.getServletContext().getInitParameter("charset");
		if (charset != null && charset.trim().length() != 0) {
			this.charset = charset;
		}

	}

}


package demo.wrapper;

import java.io.UnsupportedEncodingException;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;

public class MyHttpServletRequestWrapper extends HttpServletRequestWrapper {

	private String charset = "UTF-8";

	public MyHttpServletRequestWrapper(HttpServletRequest request) {
		super(request);
		// TODO Auto-generated constructor stub
	}

	public MyHttpServletRequestWrapper(HttpServletRequest request,
			String charset) {
		super(request);
		this.charset = charset;
	}

	@Override
	public String getParameter(String name) {
		String value = super.getParameter(name);
		value = value == null ? null : convert(value); 
		return value;
	}

	private String convert(String value) {
		System.out.println("编码转换之前:" + value);
		try {
			return new String(value.trim().getBytes("ISO-8859-1"), charset);
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			System.out.println("转换失败");
			return value;
		}

	}
}

        <filter>
		<filter-name>ContentTypeFilter</filter-name>
		<filter-class>demo.filter.ContentTypeFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>ContentTypeFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

在完成小例子的时候 要到一个bug就是一直显示乱码。找了半天才发现。
我的包装类的功能实现了。
但是因为没有给jsp和response的ContentType设置utf-8导致的。
response.setContentType("text/html;charset=UTF-8");
分享到:
评论

相关推荐

    HttpServletRequestWrapper

    这是一个关于HttpServletRequestWrapper使用的列子,工作需要,所以传上来的。

    HttpServletRequestWrapper 用法

    NULL 博文链接:https://fishhappy365.iteye.com/blog/484185

    使用HttpServletRequestWrapper在filter修改request参数

    NULL 博文链接:https://rensanning.iteye.com/blog/1706208

    HttpServletRequestWrapper应用(二):包装文件上传请求

    NULL 博文链接:https://jiaguwen123.iteye.com/blog/714139

    ParameterRequestUtils.java

    继承HttpServletRequestWrapper实现类,重新相关方法,实现自定义增加请求参数,通常是由于需要对参数进行特殊业务处理,然而HttpServletRequest的request.getPrameterMap是不允许修改的(被锁,可查看底层源码),...

    XssHttpServletRequestWrapper.java

    XssHttpServletRequestWrapper.java

    filter对request请求拦截,对请求参数进行修改

    除了添加两个JsFilter.java和GetHttpServletRequestWrapper.java之外,需要在web.xml添加对应的配置。 &lt;!-- 特殊字符过滤 --&gt; &lt;filter-name&gt;sqlFilter &lt;filter-class&gt;weixin.idea.waiting.cq.controller.Js...

    防范XSS攻击程序

    输入转义 对用户输入的所有数据进行拦截,检测是否含有XSS攻击关键字,如果... 方法是实现一个自定义的 HttpServletRequestWrapper ,然后在 Filter 里面调用它,重写getParameter, getParameterValues 函数即可。

    通用分页组件

    继承实现分页的抽象类AbstractPage 的两个抽象方法; 2.调用WebPageUtils.doAction方法传入参数即可 3.直接获取需要满足条件的记录 &lt;br/&gt; 下面举了一个例子来说明使用方法: &lt;br/&gt;package org....

    java servlet 监听器

    * 从HttpServletRequestWrapper包装类中取出我们要进行转码的request; * * @return */ public HttpServletRequest getHttpServletRequest() { return (HttpServletRequest) super.getRequest(); ...

    MyEclipse中文字过滤器

    class Request extends HttpServletRequestWrapper { public Request(HttpServletRequest request) { super(request); } public String toChi(String input) { try { byte[] bytes=...

    通用签名SDK源码+使用教程.zip

    通用签名SDK源码+使用教程.zip 软件架构说明 双向加密解密:AES,DES3,RSA的工具类 通过继承HttpServletRequestWrapper,配置过滤器的方式实现签名校验 目前只支持post请求类型签名校验 只会对请求体的参数验签 对于...

    使用Filter针对Xss攻击,sql注入,服务器访问白名单,以及csrf进行安全校验

    5.4,public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper 6,服务器白名单校验的java文件: 6.1,public class ServerWhiteListUtil 7,如果不要需要使用服务器白名单功能,那么,注释...

    主要使用Filter针对Xss攻击,sql注入,服务器访问白名单,以及csrf进行安全校验

    5.4,public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper 6,服务器白名单校验的java文件: 6.1,public class ServerWhiteListUtil 7,如果不要需要使用服务器白名单功能,那么,注释...

    详解JSP 内置对象request常见用法

    request 对象是 HttpServletRequestWrapper 类的实例。它的继承体系如下: _request 对象继承层次结构图.png ServletRequest 接口的唯一子接口是 HttpServletRequest ,HttpServletRequest 接口的唯一实现类 ...

    servlet2.4doc

    Overview Package Class Tree Deprecated Index Help PREV NEXT FRAMES NO FRAMES A B C D E F G H I J L P R S U V -------------------------------------------------------------------------------- ...

    JAVA J2EE 类库文档

    J2EE 类库文档 ...HttpServletRequestWrapper HttpServletResponse HttpServletResponseWrapper HttpSession HttpSessionActivationListener HttpSessionAttributeListener HttpSessionBindingEvent ...

    java过滤器对所有参数去除前后空格

    对项目中的所有参数去除前后空格过滤,统一处理参数!可以基于此过滤器实现过滤跨站脚本攻击,参数的增加,...实现原理为重写HttpServletRequestWrapper,获取参数的方法。include和 Forwarded 内部转发不在过滤之内。

    servlet-api-2.4.jar.zip

    javax.servlet.http.HttpServletRequestWrapper javax.servlet.ServletContextAttributeListener javax.servlet.ServletRequestAttributeListener javax.servlet.http.HttpServletResponseWrapper javax.servlet....

    cas 配置client 1.0 &2.0 及proxy DEMO 说明

    org.jasig.cas.client.util.HttpServletRequestWrapperFilter &lt;!-- CAS SINGLE SIGN OUT FILTER --&gt; &lt;filter-name&gt;CAS Single Sign Out Filter org.jasig.cas.client.session.SingleSignOut...

Global site tag (gtag.js) - Google Analytics