当前位置: 代码迷 >> Java Web开发 >> 在开发中遇到一个字符编码的有关问题,请老手指点
  详细解决方案

在开发中遇到一个字符编码的有关问题,请老手指点

热度:71   发布时间:2016-04-17 13:00:28.0
在开发中遇到一个字符编码的问题,请老手指点
用struts+hibernate的框架开发一个项目,遇到如下问题:
我从jsp页面传一个值到action,action根据这个值从数据库检索数据,然后输出到另一个jsp页面。当我传的这个值是英文时,一切正常,但是中文就不行,抛出javax.servlet.ServletException异常。

我的代码如下:

jsp页面的传值代码:

1: <bean:define   id= "name "   name= "list1 "   property= "name "> </bean:define> //list1是之前已经定义好的。
2: <a   href= " <%= "/search/detail.do?name= "+name%> "   target= "_blank "> //detail.do根据name从数据库检索数据。

DetailAction中的代码:
String   name   =   request.getParameter( "name ");

String   hql   =   "from   Person   p   where   p.name=:name ";
try{
Session   session   =   HibernateUtil.currentSession();
Query   query   =   session.createQuery(hql);
query.setString( "name ",   name);

List   detaillist   =   null;

detaillist   =   query.list();

Person   person   =   new   Person();
person   =   (Person)detaillist.get(0);
request.setAttribute( "name ",   person.getName());
request.setAttribute( "age ",   person.getAge());
request.setAttribute( "sex ",   person.getSex());
}
catch(HibernateException   e){
e.printStackTrace();
}
finally{
try
{
HibernateUtil.closeSession();
}
catch(HibernateException   e1)
{
e1.printStackTrace();
}
}
return   mapping.findForward( "detail ");
}

显示detail信息的jsp页面中的相关代码:

<%
String   name   =   (String)request.getAttribute( "name ");
String   age   =   (String)request.getAttribute( "age ");
String   sex   =   (String)request.getAttribute( "sex ");
  %>


<table   width= "750 "   align= "center ">
        <tr>
        <td>
        姓名
        </td>
        <td> <%=name   %> </td>
        </tr>
        <tr>
        <td>
        年龄
        </td>
        <td> <%=age   %> </td>
        </tr>
        <tr>
        <td>
        性别
        </td>
        <td> <%=sex   %> </td>
        </tr>
        </table>


注意问题的关键:当我传的这个name是英文时,一切正常,可以显示出姓名、年龄和性别,但是如果是中文,则抛出javax.servlet.ServletException异常,异常的具体内容是index:0,   size:   0。提示出异常的语句是:person   =   (Person)detaillist.get(0);     也就是说,根本没有检索到数据,但是数据库中确实有和name一致的数据。

另:所有需要指定编码方式的地方都是用的GB2312。

请老手指点,这问题应该怎么解决。

------解决方案--------------------
public static final String toGBK(String param) throws UnsupportedEncodingException{
String newString = new String(param.getBytes( "ISO-8859-1 "), "GBK ");
  相关解决方案