一.為什麼要進行數據校驗
對於一個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框架的行為。
推薦閱讀:
Struts2之動態方法調用改變表單action屬性 http://www.linuxidc.com/Linux/2016-09/134982.htm
Struts中異步傳送XML和JSON類型的數據 http://www.linuxidc.com/Linux/2013-08/88247.htm
Struts2的入門實例 http://www.linuxidc.com/Linux/2013-05/84618.htm
Struts2學習筆記-Value Stack(值棧)和OGNL表達式 http://www.linuxidc.com/Linux/2015-07/120529.htm
struts2文件上傳(保存為BLOB格式) http://www.linuxidc.com/Linux/2014-06/102905.htm
Struts2的入門實例 http://www.linuxidc.com/Linux/2013-05/84618.htm
Struts2實現ModelDriven接口 http://www.linuxidc.com/Linux/2014-04/99466.htm
遇到的Struts2文件下載亂碼問題 http://www.linuxidc.com/Linux/2014-03/98990.htm
Struts2整合Spring方法及原理 http://www.linuxidc.com/Linux/2013-12/93692.htm
Struts2 注解模式的幾個知識點 http://www.linuxidc.com/Linux/2013-06/85830.htm
Struts 的詳細介紹:請點這裡
Struts 的下載地址:請點這裡