JSP中文乱码过滤器实例
发布日期:2021-07-19 01:25:46 浏览次数:2 分类:技术文章

本文共 2428 字,大约阅读时间需要 8 分钟。

实话说,作为初学者,真的被中文。乱码搞懵了。

中文乱码的解决办法有很多,我知道的不多,也总结不好,现在只说怎么用过滤器来解决。

注意,这里有个前提:传递参数的时候不要用get的方法,我这个过滤器对get不管用,因为他设置的是request的request body所传递的值,包括了post,但是不包括get。

废话不多说,直接上源码,源码注释多多。

输入参数页面JSP源码:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <html> <head> <title>输入页面</title> </head> <body> <form method="post" action="TEST/filter/1.jsp"> 输入<input type="text" name="name"><br><!--要传递的数据--> <input type="submit" value="提交"> </form> </body> </html>

接收参数页面源码:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <html> <head> <title>接受页面</title> </head> <body> <% /*接收数据,并输出到页面*/ String name = request.getParameter("name"); //name = new String(name.getBytes("iso-8859-1"), "utf-8");//用这句可以解决中文乱码,但是每次都得重复写,很烦. out.print(name); %> </body> </html> 注意,我把无关的代码都删了,只剩下了基本的html代码。

过滤器类源码:

package com.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; public class Filter_charset implements Filter{ protected String encoding = null; // 接收字符编码 public void destroy() { // TODO Auto-generated method stub this.encoding = null; } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // TODO Auto-generated method stub /*如果从web.xml中读取的编码格式不为空,则对request设置编码格式*/ if (this.encoding != null) { request.setCharacterEncoding(this.encoding);//设置编码格式 /*这里只是在控制台输出验证是否加载了过滤器,并从web.xml中读取到了正确的编码格式*/ System.out.println(this.encoding);// } /*继续执行程序*/ chain.doFilter(request, response); } /*初始化函数*/ public void init(FilterConfig filterConfig) throws ServletException { // TODO Auto-generated method stub /*从web.xml中读取编码格式*/ this.encoding = filterConfig.getInitParameter("encoding"); } }

最容易出错的地方,web.xml配置:

<!--中文乱码处理过滤--> <filter> <filter-name>EncodingFilter</filter-name><!--过滤器名称,自己起--> <filter-class>com.filter.Filter_charset</filter-class><!--过滤器类名称,包括包名一致、写全--> <init-param><!--初始化参数--> <param-name>encoding</param-name><!--参数名称--> <param-value>utf-8</param-value><!--参数值--> </init-param> </filter> <filter-mapping> <filter-name>EncodingFilter</filter-name> <url-pattern>/*</url-pattern> <!--“/*”表示项目下所有资源--> </filter-mapping> <!--中文乱码处理过滤-->
源码完毕。依照上面所述代码写,并且用post传递参数,应该不会有乱码了。

总结一下,算是学会了过滤器的写法,但是仍然皮毛,过滤器的原理、加载顺序,以及JSP的传递值得方式、编码都不是很了解。

转载地址:https://blog.csdn.net/iteye_6481/article/details/82308964 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:java设计模式--Builder设计模式
下一篇:tomcat设置URL编码

发表评论

最新留言

很好
[***.229.124.182]2024年04月10日 20时09分35秒