Struts2乱码问题 action1跳转action2之后参数为乱码

使用Struts2,在项目中配置:
       1、在jsp页面上设置:
 
  

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />


<!-- 登录表单 -->

<form action="login/login_show.action" method="post">
<div><b>用户名 :</b> <input type="text"/ name="username" maxlength="10" title="输入用户名"/></div>
<div><b>密码 : </b><input type="password" name="password" maxlength="8" title="输入密码"/></div>
<div><input type="submit" value="登 录"/></div>
</form>

       页面编码和jsp代码都设置为UTF-8。

       2、struts.xml中,设置:
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.i18n.encoding" value="utf-8"></constant>
<constant name="struts.locale" value="zh_CN"></constant>
 
<package name="login" extends="struts-default" namespace="/login">
<action name="login_*" class="indi.smt.action.LoginAction" method="{1}">
<result name="show" type="redirectAction">
<param name="username">${username}</param>
<param name="password">${password}</param>
<param name="result">${result}</param>
<param name="un">${un}</param>
<param name="psw">${psw}</param>
<param name="actionName">login_detail</param>
</result>
<result name="detail">/WEB-INF/jsp/show.jsp</result>
<result name="main">/WEB-INF/jsp/login.jsp</result>
</action>
</package>

<package name="result" extends="struts-default" namespace="/result">
<action name="login_*" class="indi.smt.action.ResultAction" method="{1}">
<result name="success">/WEB-INF/jsp/success.jsp</result>
<result name="error">/WEB-INF/jsp/error.jsp</result>
</action>
</package>
</struts>
       均设置为UTF-8。

       3、并配置一个字符过滤器:
package indi.smt.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 EncodingFilter implements Filter {
public void destroy() {
}
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain filterChain) throws IOException, ServletException {
System.out.println("开始编码转换");
req.setCharacterEncoding("utf-8");
res.setCharacterEncoding("utf-8");
filterChain.doFilter(req, res);
System.out.println("完成编码转换");
}
public void init(FilterConfig arg0) throws ServletException {
}
}
       将requert、response均设置为UTF-8。

      4、web.xml中配置(3)中的过滤器:
 
  
	<filter>
<filter-name>encoding</filter-name>
<filter-class>indi.smt.filter.EncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>

      5、回显jsp页面:
 
  

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
String username = request.getParameter("username");
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="http://mayh0991.blog.163.com/<%=basePath%>">
<title>结果显示</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<h2>输入结果</h2><br>
<div>
<table>
<tbody>
<tr>
<td><%=username %></td>
</tr>
</tbody>
</table>
</div>
</body>
</html>

以上只列出这个乱码的字符回显。

==========================================================================================
提交表单之后,在IED控制台打印的表单送到后台的参数username中文为正常字符(无乱码)。但是回显到/login/login_show.action的show.jsp中的username为乱码(如5所示)。

现在看到一个博客写的应该是解决方案,但是没有搞明白是怎么回事:
struts2 action 跳action 传递中文乱码问题解决

猜你喜欢

转载自blog.csdn.net/qq_20112609/article/details/65440583