`

使用过滤器实现编码全局处理(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>

   

分享到:
评论

相关推荐

    Filter过滤器文档

    Filter 的基本功能是对 Servlet 容器调用 Servlet 的过程进行拦截,从而在 Servlet 进行响应处理的前后实现一些特殊的功能。

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

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

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

    LEE滤波,对sar雷达,实现LEE滤波处理

    loc.rar_Bang!_altium_fillter

    mo phong mach loc thong thap bang altium

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

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

    基于JSP实现新闻管理系统

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

    Photo Fillter-开源

    照片图片目录管理器

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

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

    新闻发布系统展示

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

    新闻发布系统素材

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

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

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

    新闻发布系统

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

    LowpassFilter:这是一个简单的低通滤波器,具有一个输入和一个输出

    我使用Wiki的公式: 所以它看起来像: double Yp; public double firstOrder_lowpassFilter(double X, double beta) { double Y; Y = beta * X + (1 - beta) * Yp; Yp = Y; return Y; } 如何使用? 1.您可以...

    DirectShow 实务精选

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

    自动表格填充「Auto Form Filler」-crx插件

    开发人员和测试人员可以使用它来添加垃圾值。对于开发人员来说,复活节彩蛋很多,他们会逐渐发现它们 ;)主要功能:-完全不需要配置 -只需点击浏览器右上角的扩展程序图标,即可填充值 -从您的输入中学习并在表格中...

    vue_cli.zip

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

    flash 渐隐遮罩 AS2.0

    flash 渐隐遮罩实现 需要用都“位图缓存” 在本实例中实现了as控制的缓存设置与遮罩控制 适合于初学

    On time delayestimation using an FIR #lter_timedelayestimate_Tim

    On time delay estimation using an FIR fillter

    NINE:学习管理平台,为大学学生生活的各个方面提供基于网络的捆绑服务

    NINE包含一组名为fillter的应用程序子项目。建置状态开发掌握最新的质量工作服开发掌握 编纂开发掌握 CodeFactor 开发掌握 更好的代码中心开发掌握文献资料该存储库仍在建设中。 我们正在努力尽快提供一些文档。 敬...

    出现问题a is defined高手帮忙

    //实现框选放大缩小功能 function DragZoomControl(opts_boxStyle, opts_other, opts_callbacks) { this.globals = { draggingOn: false, cornerTopDiv: null, cornerRightDiv: null, ...

Global site tag (gtag.js) - Google Analytics