`

使用过滤器实现编码全局处理(fillter)

 
阅读更多

 

public class EncodingFilter implements Filter {

	public void destroy() {

	}

	public void doFilter(ServletRequest req, ServletResponse resp,
			FilterChain chain) throws IOException, ServletException {

		// 1.强制转换
		HttpServletRequest request = (HttpServletRequest) req;
		HttpServletResponse response = (HttpServletResponse) resp;

		// 2.操作
		HttpServletRequest myrequest = new MyRequest(request); // 增强后的request,解决了编码问题
		response.setContentType("text/html;charset=utf-8");

		// 3.放行
		chain.doFilter(myrequest, response);

	}

	public void init(FilterConfig filterConfig) throws ServletException {

	}

}

// 装饰类
class MyRequest extends HttpServletRequestWrapper {

	private HttpServletRequest request;

	public MyRequest(HttpServletRequest request) {
		super(request);
		this.request = request;
	}

	// 重写关于获取请求参数的方法.
	@Override
	public String getParameter(String name) {
		Map<String, String[]> map = getParameterMap();

		if (name == null) {
			return null;
		}
		String[] st = map.get(name);
		if (st == null || st.length == 0) {
			return null;
		}

		return st[0];
	}

	@Override
	public String[] getParameterValues(String name) {
		Map<String, String[]> map = getParameterMap();

		if (name == null) {
			return null;
		}
		String[] st = map.get(name);

		return st;

	}

	private boolean flag = true;
        //添加这个boolen值的目的是,当我传递的参数是多个的时候,我第一次就已经设置好了
我我的编码集,所以当我再次调用的时候,也就不需要修改编码集,再次修改的时候,还是会乱码。
	@Override
	public Map getParameterMap() {
		// 1.得到所有请求参数的Map集合
		Map<String, String[]> map = request.getParameterMap(); // 有编码问题.

		// 2.解决编码问题.
		if (flag) {
			for (String key : map.keySet()) {
				String[] values = map.get(key);

				for (int i = 0; i < values.length; i++) {
					try {
						values[i] = new String(values[i].getBytes("iso8859-1"),
								"utf-8");
					} catch (UnsupportedEncodingException e) {
						e.printStackTrace();
					}
				}

			}
			flag = false;
		}
		return map;
	}

}

 

public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		System.out.println(request.getParameter("msg1"));

		System.out.println(request.getParameter("msg2"));
	}

 

 <body>
	
	<form action="/day21_2/demo6" method="get">
		msg1:<input type="text" name="msg1"><br>
		
		msg2:<input type="text" name="msg2"><br>
		<input type="submit" value="提交">
	</form>

  </body>

   

分享到:
评论

相关推荐

    过滤器拦截并处理request请求

    在标题“过滤器拦截并处理request请求”中,我们关注的是如何使用Servlet Filter来对客户端发送的HTTP请求进行操作。描述指出,过滤器可以捕获这些请求,分析并修改它们,以便后台服务能够接收到经过处理的数据。 ...

    Filter过滤器文档

    在Servlet API中,Filter接口是实现过滤器功能的基础。开发者需要自定义一个类去实现Filter接口,这个类即为Filter程序。Filter接口定义了以下三个关键方法: 1. `init(FilterConfig filterConfig)`: 这个方法在web...

    深入理解Django的自定义过滤器

    在这个例子中,`{% load zhao_fillter %}`加载了`zhao_fillter`(假设这是`my_filter.py`的别名),然后`{{ my_list | get_list_max }}`使用`get_list_max`过滤器来获取`my_list`列表的最大值。 自定义过滤器的一个...

    loc.rar_Bang!_altium_fillter

    _altium_fillter"似乎提到了一个与Altium Designer相关的过滤器设计。Altium Designer是一款广泛使用的电子设计自动化(EDA)软件,用于电路板设计、PCB布局以及仿真。"Bang!"可能表示设计或操作过程中的一种冲击或...

    卷及网络fillter的创建规则和使用方法

    自己在学习CNN时总结下来的一些卷积核的创建规则和自己的感受

    MATLAB.rar_LEE fillter_Lee滤波_SAR 滤波_lee滤波 matlab_雷达

    标题中的“MATLAB.rar_LEE filter_Lee滤波_SAR 滤波_lee滤波 matlab_雷达”表明这是一个关于MATLAB实现的雷达信号处理项目,重点是使用Lee滤波器进行SAR(合成孔径雷达)图像的滤波处理。Lee滤波是一种常用于改善SAR...

    Arduino-signal-filtering-library:Arduino库,用于信号过滤

    更多信息:[免费电子书:“数字信号处理科学家和工程师指南”]( )可用的过滤器: 低通滤波器:Chebychev和Bessel(一阶和二阶) 中值过滤器图书馆使用下载源码将Filter文件夹放置在Arduino1.0 +“库”文件夹中打开...

    fiddler自动抓取微信公众号历史文章

    利用fiddler抓包工具,抓取微信公众号历史文章数据。再配合脚本精灵等工具实现自动化抓取数据

    Photo Fillter-开源

    Photo Filter有望进一步集成人工智能技术,实现更智能的图片识别、分类和推荐。同时,随着云计算和大数据的发展,未来的Photo Filter可能会提供更多云存储和协作编辑的特性,以满足团队和个人在图片管理上的多元化...

    jsp+servlet考勤管理系统

    登录拦截技术在系统中起着至关重要的作用,它通常使用过滤器(Filter)机制实现。过滤器可以预处理请求并拦截不合法的访问,比如未登录用户尝试访问受保护的资源。在Java Web开发中,`Filter`接口提供了拦截请求和...

    基于JSP实现新闻管理系统

    使用的技术有JavaBean、fillter、数据库等,能够实现新闻的发布功能,在发布之后能够进行对每一条新闻的删除、修改、或者继续增加新的文章,最后还能够进行查询功能,其中引用了百度编辑器,能够进行图文并茂的编辑

    matlab开发-ButterworthFilterDesign

    在MATLAB环境中,Butterworth滤波器设计是信号处理中的一个重要环节,它涉及数字信号处理、滤波理论以及MATLAB编程技术。巴特沃斯滤波器以其平坦的通带响应和平滑的滚降特性而被广泛使用。在这个"matlab开发-...

    基于jsp实现新闻管理系统 附完整

    其中使用的技术有JavaBean、fillter、数据库等,能够实现新闻的发布功能,在发布之后能够进行对每一条新闻的删除、修改、或者继续增加新的文章,最后还能够进行查询功能,其中引用了百度编辑器,能够进行图文并茂的...

    新闻发布系统展示

    其中使用的技术有JavaBean、fillter、数据库等,能够实现新闻的发布功能,在发布之后能够进行对每一条新闻的删除、修改、或者继续增加新的文章,最后还能够进行查询功能,其中引用了百度编辑器,能够进行图文并茂的...

    新闻发布系统素材

    其中使用的技术有JavaBean、fillter、数据库等,能够实现新闻的发布功能,在发布之后能够进行对每一条新闻的删除、修改、或者继续增加新的文章,最后还能够进行查询功能,其中引用了百度编辑器,能够进行图文并茂的...

    java web源码赠送_20201102_110037(1).zip

    其中使用的技术有JavaBean、fillter、数据库等,能够实现新闻的发布功能,在发布之后能够进行对每一条新闻的删除、修改、或者继续增加新的文章,最后还能够进行查询功能,其中引用了百度编辑器,能够进行图文并茂的...

    新闻发布系统

    简单的新闻发布系统 支持管理员登录下面就让我们来说一说基于jsp的新闻发布系统,其中使用的技术有JavaBean、fillter、数据库等,能够实现新闻的发布功能,在发布之后能够进行对每一条新闻的删除、修改、或者继续...

    DirectShow 实务精选

    DirectShow就是我们平时弄得directx那个的开发了。它包含了视频渲染编码解码。也可以用于网络视频开发。网上也有写好的fillter可以直接拿过来使用。 DirectShow 实务精选这本书代码注解非常详细,讲的通透。

    vue_cli.zip

    一、启用了eslint,该项目包包含:main.js导入的常用框架组件(vant、mintUI、swiper、moment、VueJsonp、fastclick、VueLazyload、axios)。...九、components下的都可以删掉,只是为了方便写项目时测试使用

    Filter:Arduino数据过滤库

    筛选Arduino数据过滤库Filter库为Arduino程序员提供了可配置数量的最新整数值的数据过滤操作。 目前,仅支持整数和长输入。 将来的工作将为其他数字类型(例如浮点数,双精度数)提供功能。 在发布1.x版本之前,请...

Global site tag (gtag.js) - Google Analytics