`
Fly_m
  • 浏览: 259650 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

jsp&ajax乱码处理-2

    博客分类:
  • java
阅读更多
      刚才前一篇已经讲了处理乱码的一种方法,我并不想单独用拦截器的方式来处理,那样每一个action就要加一个interceptor,且对每个都要重新转码一次.于是就想从filter入手来解决,让他本身就以utf-8的方式从客户端一直到action.在先前的setCharacterFilter里面,看到这样一个东西.
if(ignore || (request.getCharacterEncoding() == null)) {
	String encoding = selectEncoding(request);
	if(encoding != null) {
		request.setCharacterEncoding(encoding);
	}
}
 这里,得到的encoding默认是GBK,在接下来,if(encoding != null),我想如果将encoding改为null,那就不会执行request.setCharacterEncoding(encoding)了,那就不会出乱码了吧.说改就改,改selectEncoding(request)这个方法.
protected String selectEncoding(ServletRequest request) {
               if(request.getParameter("ajax") != null)
		return null;
               return this.encoding;
}
 编译运行,处理ajax请求,好像通过了.ajax编码终于正确了,运行了一段时间,以为问题就解决了.还没有一会儿,另一个测试的同学来跟我说,jsp又出乱码了,跑过去一看,果然是乱码.好像是post乱码了.用request.getParameter来做,还是乱码.应该是拦截器这儿出问题了,跑到filter里面,对request.getCharacter进行输出,发现在没有改变编码之前,它的默认编码是ISO-8859-1,而改变之后确实是GBK啊.这是怎么回事,我已经将encoding改为GBK了,怎么会没反应.将参数进行一将ISO-8859-1到GBK转换,参数正确了.可这样不行啊,难道是我的selectEncoding有问题,将先前没有改过的方法进行替换,结果又能正确的解析参数了(可惜ajax乱码).
      决定看tomcat源代码,找到这一段中,对request.getParameter进行查询,结果发现这么一段
public String getParameter(String name) {
        if (!parametersParsed)
            parseParameters();

        return coyoteRequest.getParameters().getParameter(name);
}
 return 这一名后面应该是对参数进行map.get方法,那前一句肯定有问题了,转向前一句:
protected void parseParameters() {
        parametersParsed = true;
        Parameters parameters = coyoteRequest.getParameters();
        String enc = getCharacterEncoding();
......
}

 这个访求将parametersParsed置真,那么,如果这个为真的话,那么这个方法就不会被执行,也就是说,再不会进行转码操作.parseParameters只会被进行一次,也就是说,如果我调用了,getParamters这个方法之后,再进行setCharacterEncoding方法,将不会对parseParameters方法有任何影响,因为这个方法已经被执行了,而依据的编码是之前的旧的编码.在上面那个selectEncoding中,我执行了一个request.getParameters()方法,相关的编码已经固定下来了,所以接下来的编码都不会对参数的编码问题有影响.所以,在执行编码设置之前,不能调用任何getParameters()方法,可能还有其他方法(暂时不管其他的).这就难办了.
        忽然想看看,ajax调用之前的编码是什么,结果打印出来结果为UTF-8,而对jsp之前的编码进行打印时,却是null.仔细看了下,doFilter之个方法,还有那个if语句.很简单,如果request.getCharacterEncoding()不为空时,是可以不用再设置编码为GBK了,而当为null时,则可以设置编码.再仔细看了下这个ignore参数,它现在默认是true,也就是说,如果它为true,那都会强制进行设置编码操作,于是一个新的办法出来了.将ignore设置为false,每次设置编码由request来决定,如果编码为null则设置为GBK,否则就按已经设置好的编码(如ajax的UTF-8)进行.
       因此将selectEncoding改回去,原来的不变,然后在web.xml中,对setCharacterEncoding的初始化参数进行修改,将ignore改为false,这样整个问题就解决了.
      事后看了下这个问题,其他也很简单的,就是修改一个ignore参数的问题,然而却费了这么长的时间.原因还是自己对这个问题不太明白,以前看ignore这个参数觉得没什么用嘛,原来在这些问题还发挥了作用,最后还去看源代码,本来很简单的一件事,费这么大功夫,虽然有点不值,还算是买了个念像,以后碰到这个问题应该就不会再出问题了.
Fly_m 记.

分享到:
评论
1 楼 py00001 2008-09-08  
good

相关推荐

    ajax解决中文乱码(java/jsp)

    在Web开发中,尤其是在使用Java与JSP技术栈进行开发时,经常会遇到的一个问题是:如何处理AJAX请求中的中文字符乱码问题。本篇文章将详细介绍如何通过前端编码处理、后端参数接收以及响应头设置等手段来有效解决这一...

    jsp中文乱码总结包括 ajax中文乱码

    针对java web开发方面中文乱码情况的总结,基本各种情况都有了!

    Ajax乱码解决方案(docx)

    Ajax乱码问题主要涉及到字符编码的处理,包括服务器端、客户端以及文件的编码设置。解决Ajax乱码问题的关键在于确保整个数据传输链路上的编码一致性。 1. **字符编码** - **UTF-8**:广泛使用的编码格式,支持多种...

    ajax乱码解决方案

    总的来说,解决Ajax乱码问题的关键在于理解字符编码的工作原理,确保数据在整个传输过程中的编码与解码一致性,以及正确设置服务器和客户端的编码设置。在实际应用中,还应考虑跨平台和跨浏览器的兼容性,以确保解决...

    JSP中 ajax的get请求的中文乱码问题的解决方法.pdf

    综上所述,解决JSP中Ajax GET请求的中文乱码问题需要从服务器配置、Servlet处理、JSP页面编码和Ajax请求等多个角度综合考虑,并进行相应的调整。通过这些步骤,可以有效地避免并解决中文乱码问题,保证数据传输的...

    AJAX乱码解决大全.doc

    综上所述,解决AJAX乱码的关键在于全栈编码一致性管理,从文件编码、请求响应处理到资源文件编码,每一个环节都需要严格遵循同一编码标准,特别是UTF-8,以确保中文字符在传输过程中的正确无误。

    struts,ajax乱码解决方案

    【Struts和Ajax乱码解决方案】 在Web开发中,乱码问题始终是一个常见的困扰,特别是对于使用Struts和Ajax技术的开发者来说。乱码问题主要出现在数据的输入、传输和展示过程中,涉及到编码格式的选择和一致性。以下...

    ajax乱码解决办法

    总结来说,解决Ajax乱码问题主要涉及服务器端的编码设置、客户端的请求和响应处理以及页面编码的一致性。通过正确配置和处理,可以避免乱码问题,确保数据的正确显示。同时,结合EJB等企业级技术,可以构建更强大的...

    ajax乱码解决汇总

    【Ajax乱码问题详解】 在Web开发中,Ajax(异步JavaScript和XML)技术被广泛应用于实现页面的无刷新更新,然而,与之相伴的一个常见问题是字符编码导致的乱码现象。本文将深入探讨Ajax乱码问题的成因及其解决方案。...

    ajax中文乱码如何解决

    在本文中,我们将深入探讨如何解决使用Ajax进行POST请求时出现的中文乱码问题。首先,我们要理解Ajax中文乱码的根源,它通常涉及到字符编码的不一致,尤其是在客户端与服务器之间的通信过程中。 Ajax(Asynchronous...

    JSP乱码终极攻略和AJAX初步运用

    在Java Web开发中,JSP乱码和AJAX的应用是两个常见的主题。本文将深入探讨这两个话题,提供解决方案,并给出详尽的实践指导。 首先,让我们来解决JSP项目的乱码问题。乱码通常是由于编码不一致导致的,尤其是在处理...

    AJAX于jsp结合的一个例子

    在AJAX与JSP的结合中,JSP作为服务器端技术负责处理业务逻辑和数据处理。JSP可以使用Java脚本来处理请求,执行数据库查询、计算或其他任何需要的任务,然后将结果以适合AJAX请求的格式返回。例如,服务器端可能返回...

    JSP中文乱码问题最优解决方法

    ### JSP中文乱码问题最优解决方法 在Web开发中,特别是使用Java Server Pages(JSP)进行网页设计时,中文乱码问题是一个常见的技术挑战。本文将详细探讨如何有效地解决JSP页面中的中文乱码问题,并提供具体的解决...

    Ajax uri 乱码问题总结

    Ajax URI 乱码问题主要涉及浏览器差异和服务器配置两方面,尤其在处理非 ASCII 字符时,编码格式的不一致可能导致乱码。以下是对这个问题的详细解析和解决方案: 1. **浏览器差异**: - **Internet Explorer (IE)*...

    jsp中 ajax的get请求的中文乱码问题的解决方法.docx

    JSP中的AJAX GET请求的中文乱码问题主要是由于URL编码格式不匹配导致的。以下是一些解决此问题的关键点和步骤: 1. **URL编码格式**: 默认情况下,Tomcat服务器使用ISO-8859-1编码处理URL,这是因为在`server.xml...

    乱码问题终极解决方案

    2. **JSP中的乱码处理**: - 页面编码:在JSP文件顶部添加`;charset=UTF-8"%>`设定页面编码。 - 请求参数:使用`request.setCharacterEncoding("UTF-8")`设定请求的编码。 - 响应编码:通过`response....

    Struts框架下Ajax发送中文乱码问题的解决

    在实际应用中,我们常常会遇到Ajax与服务器交互时出现中文乱码的问题,尤其是在发送和接收中文数据时。这个问题主要涉及到字符编码的处理,解决起来需要对HTTP协议、字符编码原理以及Struts框架的工作机制有一定的...

    Ajax实例,处理了中文乱码

    一个Ajax的初学小例子,包括两个文件,getText.html,zipecode....在zipecode里输入1,2,3会从jsp里读取对应的city和prov并放到对应的文本框里。并且做了中文处理,输入“徐家汇”会得到邮编等。在Tomcat6下测试通过。

    jsp中 ajax的get请求的中文乱码问题的解决方法

    在JSP中使用AJAX的GET请求时,经常会出现中文乱码问题。这种乱码问题通常是由于字符编码不一致导致的。由于HTTP协议本身不包含字符编码信息,服务器和浏览器通常会采用默认的编码方式来处理请求和响应数据,如果默认...

Global site tag (gtag.js) - Google Analytics