维护一个古董级的项目,在jsp传参的时候乱码了,如下:
<jsp:forward page="/pub/msgpage/MsgTo.jsp">
<jsp:param name="msg_Title" value='<%=Form.getFES("回复成功")%>'/>
<jsp:param name="msg_Content" value='<%=Form.getFES("回复成功,正在操作")%>'/>
<jsp:param name="url_to" value='<%=addpic_url%>'/>
</jsp:forward>
使用request得到的都是问号,最后在网上找到了下面的一段话,才解开了我心中的谜团。
最近在做GGLook的时候,发现<jsp:forword>被tomcat generate成了...pageContent.forword(...java.util.URLEncoder.encode("" + ... )); 看了函数原形java.util.URLEncoder.encode有两种形式:1.encode(String s) 2.encode(String s, String enc).对于第二个,我们可以对编码进行设置.但是对于第一个,j2sdk实现的默认编码却是iso-8859-1.没搞懂为什么内部编码为UNICODE的java要把他实现成为iso-8859-1.还有就是tomcat为什么不采用配置文件的方式使我们自己能设定其编码方式.现在一跳转到errorpage.jsp就是乱码.没办法,要吗改j2sdk,要吗改tomcat.最后,确定下载tomcat原代码包,将Generator.java改掉,重新编译,现在一切运行正常! |
原来是因为url里面没有指定编码,会默认使用ISO-8859-1进行编码,而ISO-8859-1是不支持中文的,即URLEncoder.encode之后 都会显示%3F%3F%3F,所以之后无论使用何种字符集解码都是问号了。。。
最后的解决方案有一下几种,其中第四种没有成功:
-
写个filter,然后在filter里面进行request.setCharacterEncoding("GBK")
-
每个jsp页面的头部都写上request.setCharacterEncoding("GBK"),原理和1是一样的
-
传参数前先对中文进行encode,得到参数后再使用对应的decode,这样的话传递的参数就不会丢失,但是比较麻烦
-
修改tomcat的server.xml配置文件,在<Connector>节点增加一个属性:URIEncoding="GBK",但是感觉这个参数没有起作用,官方文档是这么描述的“This specifies the character encoding used to decode the URI bytes, after %xx decoding the URL. If not specified, ISO-8859-1 will be used. ”
我的理解是要区分你是怎么提交数据的,如果是Post的话,则会使用过滤器;如果是Get方式的话,tomcat默认会使用URIEncoding----是tomcat的server.xml配置文件,在<Connector>节点有一个URIEncoding的属性,如果不配置的话默认是:URIEncoding="ISO-8859-1",官方文档是这么描述的“This specifies the character encoding used to decode the URI bytes, after %xx decoding the URL. If not specified, ISO-8859-1 will be used. ”
因为ajaxAnywhere.getAJAX是通过Get提交数据的(sends a GET request to the server.),所以还是使用了ISO-8859-1编码。
HTTP 定义了与服务器交互的不同方法,最基本的方法是 GET 和 POST。事实上 GET 适用于多数请求,而保留 POST 仅用于更新站点。根据 HTTP 规范,GET 用于信息获取,而且应该是 安全的和 幂等的。所谓安全的意味着该操作用于获取信息而非修改信息。换句话说,GET 请求一般不应产生副作用。幂等的意味着对同一 URL 的多个请求应该返回同样的结果。完整的定义并不像看起来那样严格。从根本上讲,其目标是当用户打开一个链接时,她可以确信从自身的角度来看没有改变资源。比如,新闻站点的头版不断更新。虽然第二次请求会返回不同的一批新闻,该操作仍然被认为是安全的和幂等的,因为它总是返回当前的新闻。反之亦然。POST 请求就不那么轻松了。POST 表示可能改变服务器上的资源的请求。仍然以新闻站点为例,读者对文章的注解应该通过 POST 请求实现,因为在注解提交之后站点已经不同了(比方说文章下面出现一条注解);
在FORM提交的时候,如果不指定Method,则默认为GET请求,Form中提交的数据将会附加在url之后,以?分开与url分开。字母数字字符原样发送,但空格转换为“+“号,其它符号转换为%XX,其中XX为该符号以16进制表示的ASCII(或ISO Latin-1)值。GET请求请提交的数据放置在HTTP请求协议头中,而POST提交的数据则放在实体数据中;
GET方式提交的数据最多只能有1024字节,而POST则没有此限制。
分享到:
相关推荐
主要介绍了JSP页面传参出现中文乱码的解决方案,非常实用,需要的朋友可以参考下
jsp传参 servlet接收中文乱码问题的解决方法.docx
Jsp页面在URL中传递参数会出现乱码,本人想到两种方法解决,虽然不能保证100%解决,但值得学习
利用过滤器解决JavaWeb(JSP)的乱码问题
大家在JSP的开发过程中,经常出现中文乱码的问题,可能一至困扰着大家,现把JSP开发中遇到的中文乱码的问题及解决办法写出来供大家参考。
本篇文章主要是对jsp页面传参乱码的解决方法进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助
jsp乱码jsp乱码问题jsp乱码jsp乱码问题jsp乱码jsp乱码问题jsp乱码jsp乱码问题jsp乱码jsp乱码问题jsp乱码jsp乱码问题jsp乱码jsp乱码问题jsp乱码jsp乱码问题jsp乱码jsp乱码问题jsp乱码jsp乱码问题jsp乱码jsp乱码问题...
彻底解决Servlet及jsp解决中文乱码问题
jsp SmartUpload 中文乱码问题解决.docx
对常见中文乱码问题进行了详细介绍和解释,希望能给大家以帮助。
JSP struts2 url传参中文乱码解决办法.docx
JSP中文问题解决办法,JSP页面传值,数据库等的中文乱码解决办法
JSP中文乱码问题解决总结,个人收集,一次放出,减少大家的查找时间。
JSP中文乱码
jsp中文乱码的处理 页面显示 表单提交 数据库操作JSP中文乱码处理
最近实验室做了一个项目,使用jspsmartupload来实现的文件的上传下载,原来在windows平台运行的挺好,但是后来系统移植到linux平台上,结果在上传或下载的文件名中有中文时就会出现乱码。后来查了网上一些人的解决...
用几个简单的java语句操作java.io.BufferedInputStream和java.io.BufferedOutputStream,就能彻底解决jspSmartUpload乱码问题。下载的时候无需再用jspsmartupload。 zip包中包含了jspsmartupload.jar和文件上传、...
如何解决JSP页面显示乱码问题
本方案解决了jsp常见的乱码问题 下载后查看详细内容