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