问题描述:从JSP页面通过JS传值到一个Action方法,再通过這个方法调用相应的DAO中的方法对数据库中数据进行操作。
问题产生:JSP页面中文正常,JS中文正常,Action方法中输出中文乱码,继而DAO中方法也是中文乱码,导致无法对数据库数据进行操作!
问题补充如下:
1.jsp页面已加入:
<%@page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
2.js中已加入:
<script language="JavaScript" type="text/javascript" charset="UTF-8">
3.struts.xml已加入:
<?xml version="1.0" encoding="UTF-8" ?>
<constant name="struts.i18n.encoding" value="UTF-8" />
4.web.xml已加入:filter
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
5.Tomcat中的server.xml中也已加入:
URIEncoding="UTF-8"上面的有些UTF-8,我也试着改成GBK,但还是不行(不知道是不是我改的位置不对)!哪位老师指导下是怎么回事?帮_____wo!
问题产生:JSP页面中文正常,JS中文正常,Action方法中输出中文乱码,继而DAO中方法也是中文乱码,导致无法对数据库数据进行操作!
问题补充如下:
1.jsp页面已加入:
<%@page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
2.js中已加入:
<script language="JavaScript" type="text/javascript" charset="UTF-8">
3.struts.xml已加入:
<?xml version="1.0" encoding="UTF-8" ?>
<constant name="struts.i18n.encoding" value="UTF-8" />
4.web.xml已加入:filter
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
5.Tomcat中的server.xml中也已加入:
URIEncoding="UTF-8"上面的有些UTF-8,我也试着改成GBK,但还是不行(不知道是不是我改的位置不对)!哪位老师指导下是怎么回事?帮_____wo!
解决方案 »
- java垃圾回收
- struts2,action中类型为list的属性,画面间值怎么传递
- 数据库统计的问题跪求解决100分全给了
- 刚学java遇到的问题
- struts2用s:property输出对像问题
- 为什么在Eclipse里jsp网页可以正常运行,但是竟然打不开http://localhost:8080。这是为什么?
- 各位大哥,求求你了,给我指点一下!
- 大家一起来讨论一下这样一个基于Struts的框架
- 关于Tomcat的问题,请高手指点
- JavaBean调用SessionBean执行存储过程!急(高分求助)
- struts2返回jQuery ajax请求异常信息
- 谁知道这个hibernate相关的问题 用户 'xxxx' 登录失败。该用户与可信的SQL SERVER 连接无关联
escape()返回的是Unicode格式的,我需要的是中文,所以不行的!我本身在JS中显示的中文还是正常的,只是传到Action中就变成乱码了。 对6楼:
我试过了,还是乱码!
把jsp中上面这句去了试试
如果是post请求的话,过滤器中 加 request.setCharacterEncoding("text/html;charset=utf-8");即可。
但如果你用了get请求传中文参数的话,过滤器中request.setCharacterEncoding("text/html;charset=utf-8");就成了最大的阻碍。所以在过滤器中判断下 ,如果是get则不做处理。如果是post加request.setCharacterEncoding("text/html;charset=utf-8");如果js中使用的是post,就到此为止。如果使用的是GET,则先对中文参数encodeURIComponent编码,自动转化为UTF-8。action中用可以直接用request.getParameter,此函数会根据服务器配置自动解码,获得中文信息了。
{
System.out.println("before encodeChange str is:"+str);
String string = null;
try {
byte[] temp_t = str.getBytes("ISO8859-1");
string = new String(temp_t,"gb2312");
System.out.println("after encodeChange str is:"+string);
} catch (UnsupportedEncodingException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
return null;
}
return string;
}
该类继承了RequestProcessor类,并重写processPreprocess()方法,在该方法中设置Request对象的请求编码为GBK编码,具体代码如下:package com.wsp.exam_system.util;
import org.apache.struts.action.RequestProcessor;
import javax.servlet.http.*;
import java.io.*;
public class SelfRequestProcessor extends RequestProcessor {
public SelfRequestProcessor() {
}
protected boolean processPreprocess(HttpServletRequest request,HttpServletResponse response){
try {
request.setCharacterEncoding("GBK");
} catch (UnsupportedEncodingException ex) {
ex.printStackTrace();
}
return true;
}
}2、配置struts-config.xml文件
在struts-config.xml文件中利用<controller>元素配置自定义控制器组建SelfRequestProcessor,用于对请求的参数进行转码,具体代码如下:
<controller processorClass="com.wsp.exam_system.util.SelfRequestProcessor"/>
看迩代码当时迩应该用的是struts1,另外我在web.xml已经配置了filter。应该不是这个问题。谢谢迩的建议!
问题说的很具体了,是通过JS传值,而卜是通过表单提交,所以涉及卜到迩说的get还是post!
filter是Spring中的过滤器,问题中也已给出处理方式!
通过JS方法中的一个action带参数的形式传值:比如 ×.action?value=...;
现在就是上面这个value传到action方法中后,显示就出现了乱码(全是问号)!而在JS中通过alert(value)却是显示正常的。
String 乱码XXX = request.getParameter("XXX");
String 中文XXX = new String(乱码XXX.getBytes("iso-8859-1"),"UTF-8");
我自己试了 还可以
首先我简述一下上述配置UTF-8的含义:
上述两条都是配置页面文件编码格式。所以当页面可以正常输出中文及可以用js alert中文的时候就可以证明配置生效。
上述3条是配置提交数据的编码格式,也就是传参。传参方式存在2种post和get。这里要注意。不论直接请求还是ajax请求。都是需要分辨post和get的。
第3点和第4点都是意图配置一个encode来做编码,解决post方式时。传参的编码问题。5条是从服务端来配置传参方式,这样就允许get方式进行传递中文参数。比如*.do?name=中文。所以从这个配置流程上,应该没有问题。但是,从表征上看“Action方法中输出中文乱码”很可能是编码flite这里没有生效。Ps.编码需要统一是必要的,统一为何种编码方式却是无所谓的,只要支持就可以。