我用Eclipse创建了个web project 。
就一个简单的页面,一个文本框输入数据的(我的目的是想测试中文乱码),没有Hibernate。只有Struts。页面上的中文没有问题,都能正确显示,但是一旦提交,我在Action那边,用控制台输出的就都是乱码。
求高手指点一下迷津,小弟感激不尽
下面是代码
就一个简单的页面,一个文本框输入数据的(我的目的是想测试中文乱码),没有Hibernate。只有Struts。页面上的中文没有问题,都能正确显示,但是一旦提交,我在Action那边,用控制台输出的就都是乱码。
求高手指点一下迷津,小弟感激不尽
下面是代码
解决方案 »
- js兼容问题
- jstl Don't know how to iterate over supplied "items" in <forEach>
- [新手求助]关于linux开机启动!!!!
- eclipse 问题
- 安装MyEclipse时在100%完成后会出现java.lang.NulllpointerException.求各位大虾帮助!
- 关于DisplayTag样式表的问题!
- 大家看这个错误怎么解决?
- struts-config.xml文件中input关键字是什么意思?
- 征集jsp分页代码
- 我是菜鸟,请问serverlet和jsp哪个做web开发更好些?各有什么优缺点?
- jsp:include失败求助!
- 急求jsp中如何获取上一网页的url的相对路径的方法!
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
<%
request.setCharacterEncoding("utf-8");
%>
<html>
<head>
<title>JSP for TtForm form</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<html:form action="/tt" method="post">
<br>中文 : <html:text property="china"/><html:errors property="china"/><br/>
<html:submit/><html:cancel/>
</html:form>
</body>
</html>下面是Action代码:public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
TtForm ttForm = (TtForm) form;// TODO Auto-generated method stub
String test = ttForm.getChina();
System.out.println(" this is the test + " + test);
request.setAttribute("china", test);
return mapping.findForward("su");
}
劳烦各位详细讲解下
或者你设置过滤器,只要涉及到提交的页面都可通过这个过滤器,简化代码!
public class SetEncodeFilter implements Filter {
protected FilterConfig fc=null;
protected String defaultEncoding=null;
public void destroy() {
this.defaultEncoding=null;
this.fc=null;
} public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
arg0.setCharacterEncoding("UTF-8");
arg2.doFilter(arg0, arg1);
} public void init(FilterConfig arg0) throws ServletException {
this.fc=arg0;
this.defaultEncoding=fc.getInitParameter("defaultencoding");
}}
public class CodingFilter implements Filter{
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
chain.doFilter(request, response);
}
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
public void destroy() {
// TODO Auto-generated method stub
}
}
然后在web.xml中加一段
<filter>
<filter-name>coding</filter-name>
<filter-class>过滤器路径</filter-class>
</filter>
<filter-mapping>
<filter-name>coding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
你要是在项目中开发,
建议使用gb2312,或者是gbk
public String codeToString(String str)
{
String s=str;
try
{
byte tempB[]=s.getBytes(ISO-8859-1");
s=new String(tempB);
return s;
}
catch(Exception e)
{
return s ;
}
}在Action中可以这样用上面的函数:
String s=codeToString(request.getParameter("username");
其中s是要接收的字符串变量,username是你传给action的参数。
你也可以写个过滤器如:
ackage action.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 CharacterEncoding implements Filter {
public void init(FilterConfig config) throws ServletException
{
System.out.print("CharacterEncodingFilter");
}
public void doFilter(ServletRequest request,ServletResponse response,
FilterChain chain)throws IOException,ServletException
{
request.setCharacterEncoding("gb2312");
chain.doFilter(request, response);
}
public void destroy()
{
}}
把它编译后放在你的class文件中
服务器会自动帮你转换,你不用管。
public String codeToString(String str)
{
String s=str;
try
{
byte tempB[]=s.getBytes(ISO-8859-1");
s=new String(tempB);
return s;
}
catch(Exception e)
{
return s ;
}
}在Action中可以这样用上面的函数:
String s=codeToString(request.getParameter("username");
其中s是要接收的字符串变量,username是你传给action的参数。
你也可以写个过滤器如:
ackage action.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 CharacterEncoding implements Filter {
public void init(FilterConfig config) throws ServletException
{
System.out.print("CharacterEncodingFilter");
}
public void doFilter(ServletRequest request,ServletResponse response,
FilterChain chain)throws IOException,ServletException
{
request.setCharacterEncoding("gb2312");
chain.doFilter(request, response);
}
public void destroy()
{
}}
把它编译后放在你的class文件中
服务器会自动帮你转换,你不用管。