<%@ 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类代码以下html
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。java
解决办法就是在setName里编码转换。修改后的HelloWorldAction代码jsp
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(); } }