一.為什麼要進行數據校驗
對於一個web應用而言,所有的應用數據都是通過浏覽器收集的,用戶的輸入信息是非常復雜的,對於一些用戶操作不熟練,輸入出錯,等網絡傳輸不穩定,這些都有可能導致異常輸入。
異常的輸入,輕則導致系統非正常中斷,重則導致系統崩潰,應用程序必須能正常處理表現層接收的異常數據,通常的做法是遇到非法數據,應用程序將相應的給出用戶提示,提示用戶必須輸入要求的數據,也就是將那些異常輸入過濾掉,我們說對異常數據的過濾就是數據校驗。
二.如何實現數據校驗
我們可以讓一個自定義類去繼承自一個ActionSupport類,這個類是一個默認的的Action實現類,他的完全限定名com.opensymphony.xwork2.ActionSupport.這個類中提供了很多的默認方法,包括獲取國際化信息的方法,數據校驗的方法,以及默認處理用戶請求的方法等,由於ActionSupport類是Struts2默認的實現類,所以如果在struts.xml中的Action配置中省略了class屬性,則代表訪問ActionSupport類,其execute()方法直接返回SUCCESS,同時ActionSupport類還增加了對驗證,本地化的支持。
login.jsp
<div> <!-- 輸出校驗信息 注意標簽的名稱要與方法的名稱相對應--> <s:fielderror fieldName="errorname"/> <s:fielderror fieldName="errorpwd"/> </div> <form action="Login.action" method="post" > 用戶名:<input type="text" name="username"/> 密碼:<input type="text" name="userpwd"/> <input type="submit" value="登錄"> </form>
LoginAction類
public class LoginAction extends ActionSupport{ private String username; private String userpwd; @Override public void validate() { if(username.length()==0){
//添加信息內容 addFieldError("errorname", "用戶名不能為空"); } if(userpwd.length()==0) { addFieldError("errorpwd","密碼不能為空"); } } @Override public String execute() throws Exception { if(username.equals("123")&&userpwd.equals("123")){ //通過解耦合的方式獲取到一個Map Map<String,Object> map=ActionContext.getContext().getSession(); //如果用戶用戶名和密碼輸入正確,把值保存到集合中,也就是把值放到session中 map.put("name", username); return SUCCESS; }else{ return INPUT; } }
struts.xml
<struts> <!-- 配置文件中只要添加以下配置,那麼以後修改配置文件不用重啟tomcat --> <constant name="struts.devMode" value="true"/> <package name="default" namespace="/" extends="struts-default"> <action name="Login" class="cn.action.LoginAction"> <result name="success"> Login/scuess.jsp </result> <result name="input"> Login/login.jsp </result> </action> </package> </struts>
如何避免這種讓Struts2框架自動生成的標簽
我們可以在struts.xml中配置這個節點:
<!--設置用戶界面主題,默認值為XHTML風格-->
<constant name="struts.ui.theme" value="simple"></constant>
通過配置struts.xml的方式,來改變一些常量值,來控制struts2框架的行為。