解决jsp传递给struts action中文乱码问题

本文介绍了一个Struts2项目中出现的乱码问题及其解决方案。问题源于表单提交的数据编码与Struts2默认编码不一致导致。文章详细解释了如何通过在action类的方法中进行编码转换来解决这一问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Hello World</title>
</head>
<body>
	<h1>Hello World From Struts2</h1>
	<form action="hello">
		<label for="name">Please enter your name</label><br /> 
			<input type="text" name="name" /> 
			<input type="submit" value="Say Hello" />
	</form>
</body>
</html>

这里名为hello的action类代码如下

public class HelloWorldAction {
	   private String name;

	   public String execute() throws Exception {
	      return "success";
	   }
	   
	   public String getName() {
	      return name;
	   }

	   public void setName(String name) {
			this.name = name;
	   }
}

jsp把表单<input type="text" name="name" /> 的内容通过setName传递给HelloWorldAction的name属性,这个过程使用的默认编码是iso-8859-1,这就产生了乱码,因为struts的编码是UTF-8。

解决办法就是在setName里编码转换。修改后的HelloWorldAction代码

import java.io.UnsupportedEncodingException;

public class HelloWorldAction {
	   private String name;

	   public String execute() throws Exception {
	      return "success";
	   }
	   
	   public String getName() {
	      return name;
	   }

	   public void setName(String name) {
	      try {
			this.name = new String(name.getBytes("iso-8859-1"),"utf-8");
		} catch (UnsupportedEncodingException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}
	   }







转载于:https://my.oschina.net/u/2245781/blog/602132

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值