一站式解决java web乱码问题
来源:互联网 发布:来源笔记软件 编辑:程序博客网 时间:2024/06/08 10:14
首先声明,看懂这篇文章的前提是你对java web的乱码问题有一定的了解.
一. 引导部分
一般在网站出现乱码的时候,我们会采用response.setContentType("text/html;charset=utf-8"); 或者 response.setHeader("content-type","text/html;charset=utf-8"); 以及String value = new String(value.getBytes("iso8859-1"), "utf-8"); 还有<%@ page language="java" pageEncoding="utf-8"%>这些代码来解决.
但是有一个问题:每写一个jsp或者每写一个servlet(jsp和servlet本质上是同一个东西),都需要重复的写这些相同的代码.现在要想一个办法将这些代码只写一遍就可以解决所有页面的乱码问题?思前想后,当然是filter了.写一个过滤器拦截所有的请求,在请求之前将这些乱码问题解决掉.(可能看到这儿有点迷糊,不要慌,请继续往下看)
注意:如果上述这些代码没有看懂,则建议弄懂原理之后再翻过来看这篇文章,这样理解起来比较轻松.
二. 实战部分
创建一个filter,在web.xml里进行配置,(如无特殊情况,最好将其配置在其他filter前面).但本实例中并没有采取这种方式,而采取了注解的方式定义filter.
具体代码如下:
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.annotation.WebFilter;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletRequestWrapper;import javax.servlet.http.HttpServletResponse;@WebFilter(urlPatterns = "/*")//利用注解定义filter,在web.xml中配置filter也可取 二者取其一即可public class EncodeFilter implements Filter {//实现filter借口,就要实现其对应的方法public EncodeFilter() {}public void destroy() {}public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {System.out.println("进入encodefilter");HttpServletRequest req = (HttpServletRequest) request;//因为所提供的参数类型不一致,需要强转一下才能调用HttpServletRequest的方法HttpServletResponse resp = (HttpServletResponse) response;//与上述一样if (req.getMethod().equalsIgnoreCase("post")) {//如果拦截到的请求为post请求request.setCharacterEncoding("utf-8");} else {//如果拦截到的请求为get请求req = new myreq(req);//将req对象重新包装一下,也就是将其中req包含的信息中的乱码问题解决(本质就是将编码格式改变)}resp.setContentType("text/html;charset=utf-8");chain.doFilter(req, resp);}public void init(FilterConfig fConfig) throws ServletException {}}//此处要重点说明一下,为什么不是实现HttpServletRequest接口,//因为如果实现接口的话,就要实现接口中定义的全部方法,由于该接口中的方法过多,实现起来代码量比较多,所以不建议采用这种方法//而java中提供了其实现类HttpServletRequestWrapper,只要继承该类,并修改其对应的方法即可class myreq extends HttpServletRequestWrapper {private HttpServletRequest request;public myreq(HttpServletRequest request) {//带参构造函数super(request);this.request = request;} @Overridepublic String getParameter(String name) {try {String value = request.getParameter(name);if (value != null) {value = new String(value.getBytes("iso8859-1"), "utf-8");//进行编码转化}return value;} catch (UnsupportedEncodingException e) {e.printStackTrace();}return null;} //这个方法的改写就留给读者考虑吧!!!大家可以在评论区里发表自己的看法和建议.public String[] getParameterValues(String name) {}}如果您有什么问题或者建议,可以在评论中提出您宝贵的建议!!!
emmmmmm.........
阅读全文
0 0
- 一站式解决java web乱码问题
- 解决java web 乱码问题
- Java web 解决乱码问题
- [Java Web]Struts2解决中文乱码问题
- java web解决request中文乱码问题
- Java Web乱码 解决request中文乱码的问题
- Java web 乱码解决
- web开发 解决乱码问题
- 解决Web工程乱码问题
- 解决Web工程乱码问题
- 如何解决Java WEB应用中的乱码问题
- 解决Java中Web开发的中文乱码问题
- 如何解决Java WEB应用中的乱码问题
- 解决java web程序中文传参乱码问题
- java web中配置Filter解决jsp中文乱码问题
- java web中的中文字符乱码问题的解决
- Java Web学习(9):解决JSP中文乱码问题
- Java Web实现文件打包下载并解决乱码问题
- 第一篇博客,选择最真实的自己
- bzoj 2081 [Poi2010]Beads 枚举+哈希
- NBiot系统开发,测试
- [luogu2184]贪婪大陆(树状数组)
- Bigger插件v2.0.1官方版下载附安装方法
- 一站式解决java web乱码问题
- PAT1002 写出这个数 初学者
- 【转载】希尔排序
- poj2778 DNA Sequence (AC自动机+矩阵乘法)
- ADV-169 士兵排队问题
- 简单的线段树
- 用函数对象表示策略。
- android隐藏apk方式以及apk之间的启动方式
- 【网易】最长公共子括号序列