數據處理jsp
1. 在servlet中,若是要獲取頁面提交的數據須要使用request.getParameter方法來獲取,而且每次須要進行相關的類型轉換工做。數據的獲取及轉換工做比較簡單,而且是重複的操做。在struts2中提供了一種比較優秀的方式來接收和轉換數據。post
2. 在struts2中,若是要獲取表單中的數據能夠有多種方式:this
a) 屬性驅動方式spa
b) 對象驅動方式orm
c) 模型驅動方式。對象
3. 屬性驅動:頁面表單中表單域的名稱和action的屬性名一致,而且在action中提供屬性的get/set方法,那麼struts2會自動將數據設置到action的屬性上,在處理方法中能夠直接獲取表單值(屬性值)。爲action的屬性設置了get方法,那麼在頁面中就能夠經過el表達式獲取屬性值。接口
Jsp頁面ci
<form action="login.action" method="post">開發
password:<input type="password" name="password"/><br>
</form> |
Action處理類
public class UserAction { private String username; private String password; //登陸處理方法 public String login(){ System.out.println("用戶名:"+username+"\t密碼:"+password); if("siggy".equals(username)&&"1111".equals(password)){ //登陸成功 /** * Action.SUCCESS="success"; 表示action執行成功,而且須要展現頁面 * Action.NONE="none";表示action執行成功,不須要視圖展現頁面 * Action.ERROR="error";表示action執行失敗,須要一個失敗頁面進行展現 * Action.INPUT="input";表示若是action要執行成功,須要更多的輸入信息。 * Action.LOGIN="login";表示須要用戶登陸方可訪問 */
//return "success"; return Action.SUCCESS; } return "login"; }
public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } } |
4. 對象驅動:在action類中,將對象設置爲屬性,而且提供get/set方法。在頁面中表單域名稱是action類中對象的屬性名.屬性。在對象的類中提供對應屬性的get/set方法便可。這樣在action的處理類獲取的將會是對象。對象驅動的好處在於不用在處理類中 再封裝對象。缺點是在jsp中表單域名稱有重複的地方。
Vo類
public class User { private String name; private String pwd; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } } |
Action處理類
public class UserObjectAction { private User user; public String login(){ System.out.println("用戶名:"+user.getName()+"\t密碼:"+user.getPwd()); if("siggy".equals(user.getName())&&"1111".equals(user.getPwd())){ return Action.SUCCESS; } return "login"; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } } |
Jsp頁面
<form action="loginObject.action" method="post"> username:<input type="text" name="user.name"/><br> password:<input type="password" name="user.pwd"/><br> <input type="submit" value="login"/> </form> |
5. 模型驅動:因爲對象驅動在頁面中有重複的代碼,當類的屬性比較多時,開發效率比較低。Struts2中提供了一種模型驅動,使得在頁面的表單域名稱和類的屬性名一致,action處理類須要實現ModelDriven接口便可。
Jsp頁面
<form action="loginModel.action" method="post"> username:<input type="text" name="name"/><br> password:<input type="password" name="pwd"/><br> <input type="submit" value="login"/> </form> |
Vo類
public class User { private String name; private String pwd; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } } |
Action處理類
public class UserModelAction implements ModelDriven<User>{ private User user; public String login(){ System.out.println("用戶名:"+user.getName()+"\t密碼:"+user.getPwd()); if("siggy".equals(user.getName())&&"1111".equals(user.getPwd())){ return Action.SUCCESS; } return "login"; } public User getModel() { return user = new User(); } public User getUser() { return user; }
public void setUser(User user) { this.user = user; } } |