黑马程序员技术交流社区

标题: servlet获取jsp页面from表单中中文文字为乱码 [打印本页]

作者: 刘国强    时间: 2013-4-8 00:07
标题: servlet获取jsp页面from表单中中文文字为乱码
本帖最后由 刘国强 于 2013-4-8 23:21 编辑

从jsp页面获取的from表单提交的数据为乱码,怎么解决
jsp页面代码:
  1. <%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>
  2. <%
  3. String path = request.getContextPath();
  4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
  5. %>

  6. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  7. <html>
  8.   <head>
  9.     <base href="<%=basePath%>">
  10.    
  11.     <title>My JSP 'selectClassScoreResualt1.jsp' starting page</title>
  12.    
  13.         <meta http-equiv="pragma" content="no-cache">
  14.         <meta http-equiv="cache-control" content="no-cache">
  15.         <meta http-equiv="expires" content="0">   
  16.         <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
  17.         <meta http-equiv="description" content="This is my page">
  18.         <!--
  19.         <link rel="stylesheet" type="text/css" href="styles.css">
  20.         -->

  21.   </head>
  22.   
  23.   <body>
  24.     <center>
  25.           <div>
  26.     <form action="${pageContext.request.contextPath}/control/commons/customer.do?method=selectClassScoreByName" method="post">
  27.             <table>
  28.                     <tr>
  29.                             <th align="center" colspan="2">根据班级名称查询学生成绩</th>
  30.                     </tr>
  31.                     <tr>
  32.                             <th align="center" colspan="2">
  33. </th>
  34.                     </tr>
  35.                     <tr>
  36.                             <td>请输入要查询班级的完整名称:</td>
  37.                             <td><input type="text" name="cname"/></td>
  38.                     </tr>
  39.                     
  40.                     <tr>
  41.                             <td></td>
  42.                             <td><input type="submit" value="查询"/></td>
  43.                     </tr>
  44.             
  45.             </table>
  46.             
  47.     </form>
  48.     </div>
  49.     </center>
  50.   </body>
  51. </html>
复制代码
servlet代码
  1. String cname1 = request.getParameter("cname");
复制代码
此处获取后
作者: 黄小贝    时间: 2013-4-8 00:23
我的经验

第一,页面编码改成utf-8,<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
第二,服务器端要么用过滤器,要么直接写死,也是utf-8
  1. response.setContentType("text/html;charset=utf-8");
  2. request.setCharacterEncoding("utf-8");
复制代码
第三点,最容易忽略,需要更改tomcat服务器的配置,sever.xml里面需要配置,找到server.xml

server.xml 中的
    <Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
    enableLookups="false" redirectPort="8443" acceptCount="100"
    connectionTimeout="20000" disableUploadTimeout="true" URIEncoding='utf-8' />



作者: 王大斌    时间: 2013-4-8 01:12
修改tomcat配置文件不太好,在tomcat中,使用的编码为ios8859-1,如果是post提交  可以使用request.setencoding方法去编码实习自动转化,对于get提交可以使用编码再解码的方式   new string(name.getbyes(“iso8859-1”),“gbk”)的方式.这是通用方式
作者: 刘国强    时间: 2013-4-8 23:19
谢谢各位的回复,已经解决了
我是在servlet里面获取数据后,对数据用jsp页面的编码进行重新进行编码,然后就可以得到中文数据了

  1.                 String cname1 = request.getParameter("cname");
  2.                 String cname = new String(cname1.getBytes("ISO-8859-1"), "GB2312");
  3.                
复制代码
此时的到的数据就是想要的中文数据了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2