表单提交中文至Servlet乱码

Arthurz 2007-04-12 11:38:40
环境:NetBeans + JDK1.6

源代码:
index.jsp

<HTML>
<HEAD>
<TITLE>TEST</TITLE>
</HEAD>
<BODY>
<FORM METHOD=GET ACTION="/Servlet/Hello">
<INPUT TYPE=TEXT NAME="name" ><P>
<INPUT TYPE=SUBMIT>
</FORM>
</BODY>
</HTML>

Hello.JAVA

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class Hello extends HttpServlet {

public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {

res.setContentType("text/html;charset=UTF-8");
res.setHeader("Content-language", "zh");

PrintWriter out = res.getWriter();
//String name = req.getParameter("name")

String name =new String(req.getParameter("name").getBytes("iso-8859-1"),"UTF-8");

out.println("<HTML>");
out.println("<HEAD><META content=text/html; charset=gb2312 http-equiv=Content-Type></HEAD>");
out.println("<BODY>");
out.println("你好, " + name);
out.println("</BODY></HTML>");
}

public String getServletInfo() {
return "A servlet that knows the name of the person to whom it's" +
"saying hello";
}
}

也看了之前不少朋友关于乱码的文章,可是一直没有解决

上面的程序用POST方法则一点问题也没有,用GET方法就是乱码

我是个超级新手,基本上啥也不会,过滤器也不知道怎么加进去~~

还是NETBEANS5.5的傻瓜环境

请教~~

...全文
595 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Arthurz 2007-04-12
  • 打赏
  • 举报
回复
给分啦,两位的话,都有帮助
Arthurz 2007-04-12
  • 打赏
  • 举报
回复
自己胡搞解决了
String name =new String(req.getParameter("name").getBytes(),"GBK")

加了FILTER后用了这句
zxhcloth 2007-04-12
  • 打赏
  • 举报
回复
如果是像你所做的那样,可以把“String name =new String(req.getParameter("name").getBytes("iso-8859-1"),"UTF-8");
”这行给去掉,如果你要转换到后台应用,也就是后台要用到表单的数据,可以如下做法:

String name =new String(req.getParameter("name").getBytes("UTF-8"),"iso-8859-1");

String name =new String(req.getParameter("name").getBytes("UTF-8"),"gbk2316");


Thanks
Hima
imA 2007-04-12
  • 打赏
  • 举报
回复
写一个filter,在其doFilter(ServletRequest request, ServletResponse response, FilterChain chain) 方法中调用request.setCharacterEncoding("GB2312");

package com.forecast.filter;

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class GBKFilter implements Filter
{
public void destroy()
{
// XXX Auto-generated method stub
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
ServletException
{
request.setCharacterEncoding("GBK");
}
public void init(FilterConfig arg0) throws ServletException
{
// XXX Auto-generated method stub
}
}

然后在web.xml中配置这个这个filter映射为*模式,

<filter>
<filter-name>gbk</filter-name>
<filter-class>com.forecast.filter.GBKFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>gbk</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Arthurz 2007-04-12
  • 打赏
  • 举报
回复
<Connector URIEncoding="UTF-8" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" enableLookups="false" maxHttpHeaderSize="8192" maxSpareThreads="75" maxThreads="150" minSpareThreads="25" port="8084" redirectPort="8443"/>

补充一下

netbeans 5.5中的Tomcat的BASE/conf/server.xml里是这样设置的

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧