不多说,上代码
如果不使用struts标签库的话,可以考虑我写的这个简单例子
JSP:
<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'TestForm.jsp' starting page</title>
</head>
<body>
<form action="testForm.action" name="t" method="post" >
姓名111<input name="name" type="text"/>
<input type="button" value="提交" οnclick="javascript:t.submit();">
</form>
</body>
</html>
Filter:
package strutsTest;
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;
import javax.servlet.http.HttpServletRequest;
public class SetCharacterEncodingFilter implements Filter {
private String encoding;
private FilterConfig filterConfig=null;
public void destroy() {
// TODO Auto-generated method stub
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
HttpServletRequest r=(HttpServletRequest) request;
if(null==request.getCharacterEncoding())
{
r.setCharacterEncoding(encoding);
System.out.println("FILTER SET ENCODING SUCCESS!");
}
System.out.println("filter encoding:"+r.getCharacterEncoding());
System.out.println("filter param :"+r.getParameter("name"));//这两句话一定要放在setCharacterEncoding的后面,否则的话还是乱码,传到Action也会乱码,或者去掉这两行
chain.doFilter(request, response);
}
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
this.filterConfig = arg0;
this.encoding = filterConfig.getInitParameter("encoding");
}
protected String selectEncoding(ServletRequest request) {
return (this.encoding);
}
}
web.xml:
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>strutsTest.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
struts.xml:
<package name="zxl" extends="struts-default">
<!-- 测试form表单参数请求会不会出现在url地址栏里面 -->
<action name="testForm" class="strutsTest.TestForm">
<!-- / 表示跟路径下 即webRoot路径下面 -->
<result name="success">/jsp/TestFormSuccess.jsp</result>
</action>
</package>
action代码:
package strutsTest;
import java.io.UnsupportedEncodingException;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.interceptor.ServletRequestAware;
public class TestForm {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
System.out.println("TestForm.java:"+name);
/*try {
System.out.println("TestForm.java:"+new String(name.getBytes("ISO-8859-1"),"UTF-8"));
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
*/
}
public String execute(){
return "success";
}
}