JSP struts2 url传参中文乱码解决办法
问题描述
在使用 JSP 和 Struts2 构建 Web 应用程序时,我们常常需要通过 URL 传参。但是,如果参数中包含中文等非 ASCII 字符,就会出现乱码的问题。这是因为浏览器默认使用的是 ISO-8859-1 编码方式,而中文需要使用 UTF-8 编码,两种编码方式不同,导致乱码的出现。
解决办法
常用的解决方法有两种:
- 使用
URLEncoder.encode()
对参数进行编码,例如:
java
String name = "张三";
String encodedName = URLEncoder.encode(name, "UTF-8");
String url = "http://example.com?name=" + encodedName;
这样就会将参数 name
编码为 %E5%BC%A0%E4%B8%89
,其中 %E5%BC%A0%E4%B8%89
就是 张三
编码后的结果。
- 在 Struts2 的配置文件
struts.xml
中配置编码过滤器,例如:
xml
<filter>
<filter-name>encoding</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
<init-param>
<param-name>struts.i18n.encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
这样就会自动对 URL 中的参数进行 UTF-8 编码。
示例说明
示例一
假设我们有一个 JSP 页面,需要在 URL 中传递参数 name
,值为 张三
,则需要将该参数进行编码后添加到 URL 中。
<%@ page contentType="text/html;charset=UTF-8" %>
<%
String name = "张三";
String encodedName = URLEncoder.encode(name, "UTF-8");
String url = "/example.action?name=" + encodedName;
%>
<a href="<%= url %>">跳转到 example 页面</a>
在 example.action
中获取参数值:
public class ExampleAction extends ActionSupport {
private String name;
public String execute() throws Exception {
String decodedName = URLDecoder.decode(name, "UTF-8");
System.out.println(decodedName); // 输出:张三
return SUCCESS;
}
// getter 和 setter 略
}
示例二
在 struts.xml
中配置编码过滤器:
<filter>
<filter-name>encoding</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
<init-param>
<param-name>struts.i18n.encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
然后,在 JSP 中使用 Struts2 标签的方式传参:
<%@ taglib prefix="s" uri="/struts-tags" %>
<%
String name = "张三";
%>
<s:a action="example.action">
<s:param name="name" value="<%= name %>"/>
跳转到 example 页面
</s:a>
在 example.action
中获取参数值:
public class ExampleAction extends ActionSupport {
private String name;
public String execute() throws Exception {
System.out.println(name); // 输出:张三
return SUCCESS;
}
// getter 和 setter 略
}
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JSP struts2 url传参中文乱码解决办法 - Python技术站