驗證幾乎是註冊登陸的必須前提,驗證的主要做用有兩點:html
1、安全性java
2、對用戶提供差別化服務。git
ActionSupport類中有一個validate()方法,這是爲開發者使用struts提供的一個接口,初始時是沒有任何驗證的。因此要使用此方法首先要進行重寫該方法。github
舉註冊爲例,調用順序爲setUsername()方法--》validate()方法--->register()方法。因此一旦驗證不過那麼將沒法執行後續方法,即後面的功能將被隔離!web
UserAction.java安全
package com.amos.web.action; import com.opensymphony.xwork2.ActionSupport; /** * @ClassName: UserAction * @Description: 用戶管理,將相關的action封裝到一個類中 * @author: amosli * @email:amosli@infomorrow.com * @date Jan 8, 2014 1:06:00 AM */ public class UserAction extends ActionSupport { private static final long serialVersionUID = -6275534406709255984L; private String username; private String password; public String getUsername() { return username; } public void setUsername(String username) { System.out.println("執行setUserName()方法!"); if (username != null & username.trim().length() > 0) { this.username = username; } } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } // 檢驗方法 public void validate() { System.out.println("執行validate()方法!"); if (username != null && username.trim().length() > 0) { }else{ this.addFieldError("username", "用戶名爲必填!"); } if (password != null && password.trim().length() > 0) { }else{ this.addFieldError("password", "密碼爲必填!"); } } // 用戶註冊 public String register() throws Exception { System.out.println("執行註冊方法!"); return "toRegisterJsp"; } // 用戶登陸 public String login() throws Exception { System.out.println("執行登陸方法!"); return "toLoginJsp"; } }
效果如圖所示:jsp
直接點擊提交,不輸入用戶名和密碼ide
頁頭將提示信息顯示出來post
有可能出現的問題:ui
1、下面這個是由於沒有驗證經過,要在user_struts.xml中進行配置,若是出錯,將採措施進行迴避這樣的問題。
<s:fielderror/>
使用標籤取出Action中全部的出錯提示信息,這裏必須定義爲this.fielderror才能取到值。
<s:fielderror fieldName="password"/>,取出Action中具體的出錯提示信息。
一旦使用struts2的標籤那麼就不要用EL表達式。
根據提示信息代表要對配置一個name爲"input"的屬性來對出錯信息進行捕獲。user_struts.xml部份內容截選:
<action name="UserRegister" class="com.amos.web.action.UserAction" method="register"> <result name="toRegisterJsp" type="dispatcher"> /register_success.jsp </result> <result name="input" type="dispatcher"> /user_register.jsp </result> </action>
將result屬性配置爲user_register.jsp,即若是驗證不經過的話那麼頁將跳轉回user_register.jsp頁面。
其中user_register.jsp爲:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="/struts-tags" prefix="s" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <form name="register" action="/struts2/UserRegister" method="post"> <table border="2" align="center"> <caption>新用戶註冊</caption> <tr> <th>用戶名:</th> <td><input name="username" id="username" type="text" /></td> <td><s:fielderror fieldName="username"/></td> </tr> <tr> <th>密碼:</th> <td><input name="password" id="password" type="password" /></td> <td><s:fielderror fieldName="password"/></td> </tr> <tr> <td colspan="2" align="center"><input type="submit" value="提交" width="120ppx" /></td> </tr> </table> </form> </body> </html>
register_success.jsp爲:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="/struts-tags" prefix="s" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> 註冊成功<br/> <hr> 用戶名:<s:property value="username" /> 密碼:<s:property value="password"/> </body> </html>
驗證不經過的效果以下圖所示:
驗證經過的效果圖以下所示:
一樣可相似對用戶登陸進行配置,user_struts.xml部份內容截選:
<action name="UserLogin" class="com.amos.web.action.UserAction" method="login"> <result name="toLoginJsp" type="dispatcher"> /login_success.jsp </result> <result name="input" type="dispatcher"> /user_login.jsp </result> </action>
其中login_success.jsp以下:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="/struts-tags" prefix="s" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> 登陸成功! <hr> 用戶名:<s:property value="username"/> </body> </html>
user_login.jsp以下:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@taglib uri="/struts-tags" prefix="s" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <form name="register" action="/struts2/UserLogin" method="post"> <table border="2" align="center"> <caption>用戶登陸</caption> <tr> <th>用戶名:</th> <td><input name="username" id="username" type="text" /></td> <td><s:fielderror/></td> </tr> <tr> <td colspan="2" align="center"><input type="submit" value="提交" width="120ppx" /></td> </tr> </table> </form> </body> </html>
好比只想login,不想驗證register方法。
那麼只須要將validate()方法更名爲validateLogin()方法便可,這裏只驗證指定方法格式爲validate+大寫指定方法名首字母,例如若是隻想驗證register方法,那麼只須要將validate()方法改成validateRegister()便可。這裏就再也不演示了。