servlet 里读取的参数怎么都是问号呢?

我写的一个servlet用来读取表单信息,并在新的网页上显示出来。其中一些servlet语句为
response.setContentType("text/html;charset=GB2312");
PrintWriter out=response.getWriter();
String paraValue=request.getParameter(paraName);
out.println("<h1>"+paraValue+"</h1");
其中paraName是表单中参数名.我的疑惑是如果表单中这个paraName参数使用英文填写的就能被out打印出来,如果使用中文填写的就不能被out打印出来。请问这是怎么回事呢?上边的servlet语句是我简写的,因为即使只看这几句应该也能看出问题来,相信您,呵呵,谢谢了!
表单所在页面设置字符编码也是GB2312;不知道是不是浏览器显示的问题,应该不是,我在所有的浏览器里运行时都是这样,如果浏览器有问题总不应该都有问题啊

没有设置请求参数编码
加上request.setCharacterEncoding("gb2312")就可以了。
另外,做jsp开发时,可以通过一个过滤器来解决这个请求参数编码问题。
可以参考Tomcat的一个实现。它在tomcat的安装目录
webapps\servlets-examples\WEB-INF\classes\filters下,名字为
SetCharacterEncodingFilter.java
然后配置你的web.xml,加入一下内容
<filter>
<filter-name>CharacterEncoding</filter-name>
<filter-class>SetCharacterEncodingFilter路径(含包名)</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GB2312</param-value>
</filter>
<filter-mapping>
<filter-name>CharacterEncoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
温馨提示:答案为网友推荐,仅供参考
第1个回答  2007-12-14
如果是tomcat的话,默认(iso8859-1)它是不支持gb2312的,
你需要在requst.getParameter后的把paraValue进行转码:
paraValue = new String(paraValue.getBytes(), "gb2312");
如果你不信的话,可以在转码前后打印这个变量的值
System.out.println("before: " + paraValue);
paraValue = new String(paraValue.getBytes(), "gb2312");
System.out.println("after: " + paraValue);
当然你可以配置你的web.xml,做一个字符编码的过滤器,这个就不细说了。
第2个回答  2007-12-15
找到%Tomcat_HOME%/conf/server.xml文件
找到<Connector port="8080" ...... />,在其间增加属性URIEncoding="GBK"。
最后形成代码如下所示:
<Connector port="8080" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true"
URIEncoding="GBK" />
第3个回答  2007-12-14
String paraValue = new String(paraValue.getBytes(),"ISO-8859-1", "gb2312");
试一下这个,看管用不!!!
第4个回答  2007-12-14
你看看你页面上设置的编码是不是你在servlet里设置的"GB2312"