首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

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

2011-12-23 
在开发中遇到一个字符编码的问题,请老手指点用struts+hibernate的框架开发一个项目,遇到如下问题:我从jsp

在开发中遇到一个字符编码的问题,请老手指点
用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 ");


return newString;
}

用此方法在查询前将NAME转码
[解决办法]
是这样的,当你在超级链接中传送汉字参数的时候将会按照ISO-8859-1编码进行传递,但是ISO-8829-1不能够正常显示汉字,所以你在后台接收该参数的时候必须做一个字符编码转换,例如:

String mystr=new String(request.getParameter( "tx_nm ").getBytes( "8859_1 "), "GBK ");

热点排行