亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

Struts2學習教程之輸入校驗示例詳解

2024-07-14 08:40:35
字體:
來源:轉載
供稿:網友

前言

數據校驗幾乎是每個應用都要做的工作。用戶輸入的數據,發送到服務器端,天知道用戶輸入的數據是否是合法的,是否為惡意輸入。所以一個健壯的應用系統必須對用戶的輸入進行校驗,將非法的輸入阻止在應用之外,防止這些非法的輸入進入系統,從而保證系統的穩定性、安全性。

我們都知道,為了更好的用戶體驗,以及更高的效率,現在的Web應用都存在以下兩重數據校驗:

  • 客戶端數據校驗
  • 服務器端數據校驗

對于客戶端數據校驗主要是通過JavaScript代碼來完成;而對于服務器端數據校驗是整個應用阻止非法數據的最后防線,主要通過在應用中編程實現。

Struts2框架為了減輕開發人員的工作量,提高工作效率,在數據校驗這方面也下了很大功夫,那么Struts2是如何完成數據校驗的呢?(由于Struts2框架的客戶端校驗能力較弱,不予總結,這篇文章主要總結Struts2框架的服務器端數據校驗功能)

編寫校驗規則文件

我們都知道數據校驗都是一些繁瑣的代碼,為了從這些繁瑣的代碼中抽身出來,Struts2框架提供了基于配置文件的數據校驗,只需要編寫校驗規則文件即可,校驗規則文件指定每個表單域應該滿足怎樣的規則。

下面通過一個Demo示例來說說Struts2框架的輸入校驗。

前臺頁面:

<body> <form action="login" method="post">   用戶名:<input type="text" name="name" /><s:fielderror fieldName="name" /><br>  密碼:<input type="password" name="password" /><s:fielderror fieldName="password" /><br>  年齡:<input type="text" name="age" /><s:fielderror fieldName="age" /><br>  生日:<input type="text" name="birthday" /><s:fielderror fieldName="birthday" /><br>   <input type="submit" value="提交" /> </form></body>

后臺Action處理代碼:

public class LoginAction extends ActionSupport{ private String name; private String password; private int age; private Date birthday; private String tip; public void setName(String name) {  this.name = name; } public String getName() {  return name; } public void setPassword(String password) {  this.password = password; } public String getPassword() {  return password; } public void setAge(int age) {  this.age = age; } public int getAge() {  return age; } public void setBirthday(Date birthday) {  this.birthday = birthday; } public Date getBirthday() {  return birthday; } public void setTip(String tip) {  this.tip = tip; } public String getTip() {  return tip; } public String execute() throws Exception {  // 這里簡化了操作  return SUCCESS; }}

通過上面的Action代碼可以看到,我并沒有為添加任何的字段校驗代碼,而我們只需要編寫一個校驗文件,如下:

<?xml version="1.0" encoding="UTF-8"?><!-- 指定校驗配置文件的DTD信息 --><!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.2//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd"><!-- 校驗文件的根元素 --><validators> <!-- 校驗Action的name屬性 --> <field name="name">  <!-- 指定name屬性必須滿足必填規則 -->  <field-validator type="requiredstring">   <param name="trim">true</param>   <message>必須填入名字</message>  </field-validator>  <!-- 指定name屬性必須匹配正則表達式 -->  <field-validator type="regex">   <param name="regexExpression"><![CDATA[(/w{4,25})]]></param>   <message>您輸入的用戶名只能是字母和數字,且長度必須在4到25之間</message>  </field-validator> </field> <!-- 校驗Action的password屬性 --> <field name="password">  <field-validator type="requiredstring">   <param name="trim">true</param>   <message>必須輸入密碼</message>  </field-validator>  <field-validator type="regex">   <param name="regexExpression"><![CDATA[(/w{4,25})]]></param>   <message>您輸入的用戶名只能是字母和數字,且長度必須在4到25之間</message>  </field-validator> </field> <!-- 校驗Action的age屬性 --> <field name="age">  <field-validator type="int">   <param name="min">1</param>   <param name="max">150</param>   <message>年齡必須在1到150之間</message>  </field-validator> </field> <!-- 校驗Action的birthday屬性 --> <field name="birthday">  <field-validator type="date">   <param name="min">1900-01-01</param>   <param name="max">2050-02-21</param>   <message>生日必須在 ${min}到${max}之間</message>  </field-validator> </field></validators>

Struts2的校驗文件規則與Struts1的校驗文件設計方式不同,Struts2中每個Action都有一個校驗文件,因此該校驗文件的文件名應該遵守如下規則:

<Action名字>-validation.xml

前面的Action名是可以改變的,后面的-validation.xml部分總是固定的,且該校驗文件應該被保存在與Action class文件相同的路徑下。

與類型轉換失敗相似的是,當輸入校驗失敗后,Struts2也是自動返回名為"input"的Result,因此需要在struts.xml文件中配置名為"input"的Result。

國際化提示信息

對于校驗失敗的情況下,就需要給用戶提示錯誤信息,那么現在就出現了個問題,在多語言環境下,如何正確的提示對應語言的提示信息呢?像上面那樣直接在校驗文件中寫死可不行。為了國際化提示信息,為message元素指定key屬性,該key屬性指定是國際化提示信息對應key。

例如,上述的校驗文件,可以大致寫成這樣:

<!-- 校驗Action的name屬性 --><field name="name"> <!-- 指定name屬性必須滿足必填規則 --> <field-validator type="requiredstring">  <param name="trim">true</param>  <message key="name.required"/> </field-validator> <!-- 指定name屬性必須匹配正則表達式 --> <field-validator type="regex">  <param name="regexExpression"><![CDATA[(/w{4,25})]]></param>  <message key="name.regex"/> </field-validator></field>

內建校驗器

在上面的校驗文件中,可以看到這樣的語句:

<field-validator type="requiredstring"><field-validator type="regex">...

這里的type屬性值就是校驗器。在Struts2框架內部提供了大量的內建校驗器,這些內建的校驗器可以滿足大部分應用的校驗需求,我們只需要使用這些校驗器即可。

我們可以使用解壓縮工具打開xwork-core-2.3.24.1.jar文件,在xwork-core-2.3.24.1.jar/com/opensymphony/xwork2/validator/validators路徑下可以找到一個default.xml文件,這個文件就是Struts2默認的校驗器注冊文件,內容如下:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE validators PUBLIC  "-//Apache Struts//XWork Validator Definition 1.0//EN"  "http://struts.apache.org/dtds/xwork-validator-definition-1.0.dtd"><!-- START SNIPPET: validators-default --><validators> <!-- 必填校驗器 --> <validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/> <!-- 必填字符串校驗器 --> <validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/> <!-- 整數校驗器 --> <validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/> <!-- 長整數校驗器 --> <validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/> <!-- 短整數校驗器 --> <validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/> <!-- 雙精度浮點數校驗器 --> <validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/> <!-- 日期校驗器 --> <validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/> <!-- 表達式校驗器 --> <validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/> <!-- 字段表達式校驗器 --> <validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/> <!-- 電子郵件校驗器 --> <validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/> <!-- URL校驗器 --> <validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/> <!-- visitor校驗器 --> <validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/> <!-- 轉換校驗器 --> <validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/> <!-- 字符串長度校驗器 --> <validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/> <!-- 正則表達式校驗器 --> <validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/> <validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/></validators><!-- END SNIPPET: validators-default -->

關于這些校驗器的具體使用,這里就不一一舉例了。

總結

這篇文章對Struts2框架中的校驗器進行了簡單的總結,對于這里說的校驗器,基礎的是如何使用,而最重要的是掌握Struts2校驗器這種思想,將寫代碼來做的事情,通過配置來完成,這種方法很值得我們借鑒,在我們學習其它框架中,我們也會碰到這種方式。學習,痛并快樂著。

好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VeVb武林網的支持。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲国产美女精品久久久久∴| 日韩午夜在线视频| 成人精品一区二区三区电影黑人| 久久精品福利视频| 最好看的2019年中文视频| 亚洲va欧美va国产综合久久| 国产精品视频资源| 国产精品日韩精品| 精品亚洲永久免费精品| 欧美日韩爱爱视频| 亚洲一区二区三区在线免费观看| 亚洲美腿欧美激情另类| x99av成人免费| 国产精品免费观看在线| 久久综合伊人77777| 97婷婷大伊香蕉精品视频| 亚洲激情视频在线播放| 欧美在线www| 国模精品系列视频| 亚洲精品久久在线| 91久久久久久久一区二区| 国产欧美亚洲精品| 欧美大片免费看| 久久五月天综合| 色婷婷av一区二区三区在线观看| 欧美大片大片在线播放| 亚洲字幕一区二区| 欧美一级视频在线观看| 亚洲自拍偷拍一区| 九九精品视频在线观看| 国产精品男人的天堂| 国产精品旅馆在线| 亚洲福利视频网| 欧美成人免费在线视频| 日韩国产欧美精品在线| 92国产精品久久久久首页| 欧美黑人xxx| 成人黄色午夜影院| 国产suv精品一区二区| 亚洲男人天堂2019| 国产成人啪精品视频免费网| 久久久噜噜噜久久久| 亚洲人成电影在线| 国产亚洲人成a一在线v站| 国产精品网站大全| 国产视频欧美视频| 久久五月情影视| 久久99国产综合精品女同| 久久天天躁狠狠躁夜夜爽蜜月| 亚洲性线免费观看视频成熟| 国产精品日韩欧美综合| 日韩精品欧美国产精品忘忧草| 日韩精品在线观看网站| 欧美电影在线免费观看网站| 国产精品久久久久久中文字| 精品视频一区在线视频| xxav国产精品美女主播| 久久久久久这里只有精品| 欧美激情国产日韩精品一区18| 国产91对白在线播放| 日韩免费在线电影| 国产精品偷伦免费视频观看的| 日本三级韩国三级久久| 久久这里只有精品视频首页| 欧美裸体视频网站| 亚洲午夜性刺激影院| 日韩av影片在线观看| 成人精品福利视频| 91精品视频播放| 九九精品在线观看| 国产精品欧美激情在线播放| 久久久影视精品| 欧美高清自拍一区| 日韩一区视频在线| 成人国内精品久久久久一区| 91久久国产精品91久久性色| 欧美日韩激情小视频| 在线亚洲国产精品网| 综合国产在线视频| 国产大片精品免费永久看nba| 狠狠综合久久av一区二区小说| 91影视免费在线观看| 国产ts人妖一区二区三区| 亚洲成人中文字幕| 成人在线视频福利| 亚洲人成网站777色婷婷| 97人洗澡人人免费公开视频碰碰碰| 久久久97精品| 国产成人精品网站| 亚洲天堂av图片| 日韩欧美精品中文字幕| 午夜精品久久久久久久99热浪潮| 欧美放荡办公室videos4k| 欧美视频二区36p| 日韩在线精品视频| 欧美整片在线观看| 久久av资源网站| 欧美电影免费观看网站| 国产精品精品一区二区三区午夜版| 中文字幕综合在线| 91精品啪在线观看麻豆免费| 国产在线高清精品| 亚洲一区二区三区四区视频| 亚洲精品福利资源站| 亚洲国产精品国自产拍av秋霞| 国产成人中文字幕| 中文字幕国内精品| 亚洲美女动态图120秒| 538国产精品一区二区免费视频| 日韩hd视频在线观看| 欧美一级免费视频| 91久久久精品| 国产91久久婷婷一区二区| 日韩精品丝袜在线| 欧美高清视频在线观看| 久久久久日韩精品久久久男男| 日本成熟性欧美| 日本久久久久久久久| 亚洲精品动漫久久久久| 91成人性视频| 久久亚洲精品成人| 欧美在线亚洲在线| 久久久国产在线视频| 国产精品亚洲激情| 色婷婷综合久久久久| 黄网动漫久久久| 成年人精品视频| 2018中文字幕一区二区三区| 精品国产一区二区三区久久久| 国产视频在线观看一区二区| 久久久在线视频| 在线视频免费一区二区| 国产欧美一区二区白浆黑人| 亚洲天堂av在线免费观看| 一区二区三区视频免费| 亚洲视频999| 亚洲国产精品中文| 亚洲成人教育av| 精品无人区乱码1区2区3区在线| 91精品在线观看视频| 欧美在线精品免播放器视频| 91沈先生作品| 国产成人精品免费久久久久| 国产精品色悠悠| 亚洲欧洲av一区二区| 色久欧美在线视频观看| 色七七影院综合| 亚洲a一级视频| 一区二区三区在线播放欧美| 国产欧美日韩免费| 日av在线播放中文不卡| 国产精品jizz在线观看麻豆| 精品日本高清在线播放| 日产精品99久久久久久| 亚洲福利小视频| 亚洲成人激情在线观看| 中文字幕无线精品亚洲乱码一区| 欧美性xxxxhd| 亚洲伦理中文字幕| www.xxxx精品| 国产精选久久久久久| 91久久在线播放| 另类色图亚洲色图| 91高清免费在线观看|