<%@ 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();
}
}