欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Struts2學(xué)習(xí)教程之輸入校驗(yàn)示例詳解

 更新時(shí)間:2018年05月03日 08:36:30   作者:果凍想  
這篇文章主要給大家介紹了關(guān)于Struts2學(xué)習(xí)教程之輸入校驗(yàn)的相關(guān)資料,文中通過(guò)示例介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用struts2具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

前言

數(shù)據(jù)校驗(yàn)幾乎是每個(gè)應(yīng)用都要做的工作。用戶輸入的數(shù)據(jù),發(fā)送到服務(wù)器端,天知道用戶輸入的數(shù)據(jù)是否是合法的,是否為惡意輸入。所以一個(gè)健壯的應(yīng)用系統(tǒng)必須對(duì)用戶的輸入進(jìn)行校驗(yàn),將非法的輸入阻止在應(yīng)用之外,防止這些非法的輸入進(jìn)入系統(tǒng),從而保證系統(tǒng)的穩(wěn)定性、安全性。

我們都知道,為了更好的用戶體驗(yàn),以及更高的效率,現(xiàn)在的Web應(yīng)用都存在以下兩重?cái)?shù)據(jù)校驗(yàn):

  • 客戶端數(shù)據(jù)校驗(yàn)
  • 服務(wù)器端數(shù)據(jù)校驗(yàn)

對(duì)于客戶端數(shù)據(jù)校驗(yàn)主要是通過(guò)JavaScript代碼來(lái)完成;而對(duì)于服務(wù)器端數(shù)據(jù)校驗(yàn)是整個(gè)應(yīng)用阻止非法數(shù)據(jù)的最后防線,主要通過(guò)在應(yīng)用中編程實(shí)現(xiàn)。

Struts2框架為了減輕開(kāi)發(fā)人員的工作量,提高工作效率,在數(shù)據(jù)校驗(yàn)這方面也下了很大功夫,那么Struts2是如何完成數(shù)據(jù)校驗(yàn)的呢?(由于Struts2框架的客戶端校驗(yàn)?zāi)芰^弱,不予總結(jié),這篇文章主要總結(jié)Struts2框架的服務(wù)器端數(shù)據(jù)校驗(yàn)功能)

編寫校驗(yàn)規(guī)則文件

我們都知道數(shù)據(jù)校驗(yàn)都是一些繁瑣的代碼,為了從這些繁瑣的代碼中抽身出來(lái),Struts2框架提供了基于配置文件的數(shù)據(jù)校驗(yàn),只需要編寫校驗(yàn)規(guī)則文件即可,校驗(yàn)規(guī)則文件指定每個(gè)表單域應(yīng)該滿足怎樣的規(guī)則。

下面通過(guò)一個(gè)Demo示例來(lái)說(shuō)說(shuō)Struts2框架的輸入校驗(yàn)。

前臺(tái)頁(yè)面:

<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>

后臺(tái)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
 {
  // 這里簡(jiǎn)化了操作
  return SUCCESS;
 }
}

通過(guò)上面的Action代碼可以看到,我并沒(méi)有為添加任何的字段校驗(yàn)代碼,而我們只需要編寫一個(gè)校驗(yàn)文件,如下:

<?xml version="1.0" encoding="UTF-8"?>
<!-- 指定校驗(yàn)配置文件的DTD信息 -->
<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.2//EN"
 "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">
<!-- 校驗(yàn)文件的根元素 -->
<validators>
 <!-- 校驗(yàn)Action的name屬性 -->
 <field name="name">
  <!-- 指定name屬性必須滿足必填規(guī)則 -->
  <field-validator type="requiredstring">
   <param name="trim">true</param>
   <message>必須填入名字</message>
  </field-validator>
  <!-- 指定name屬性必須匹配正則表達(dá)式 -->
  <field-validator type="regex">
   <param name="regexExpression"><![CDATA[(\w{4,25})]]></param>
   <message>您輸入的用戶名只能是字母和數(shù)字,且長(zhǎng)度必須在4到25之間</message>
  </field-validator>
 </field>

 <!-- 校驗(yàn)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>您輸入的用戶名只能是字母和數(shù)字,且長(zhǎng)度必須在4到25之間</message>
  </field-validator>
 </field>

 <!-- 校驗(yàn)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>

 <!-- 校驗(yàn)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的校驗(yàn)文件規(guī)則與Struts1的校驗(yàn)文件設(shè)計(jì)方式不同,Struts2中每個(gè)Action都有一個(gè)校驗(yàn)文件,因此該校驗(yàn)文件的文件名應(yīng)該遵守如下規(guī)則:

<Action名字>-validation.xml

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

與類型轉(zhuǎn)換失敗相似的是,當(dāng)輸入校驗(yàn)失敗后,Struts2也是自動(dòng)返回名為"input"的Result,因此需要在struts.xml文件中配置名為"input"的Result。

國(guó)際化提示信息

對(duì)于校驗(yàn)失敗的情況下,就需要給用戶提示錯(cuò)誤信息,那么現(xiàn)在就出現(xiàn)了個(gè)問(wèn)題,在多語(yǔ)言環(huán)境下,如何正確的提示對(duì)應(yīng)語(yǔ)言的提示信息呢?像上面那樣直接在校驗(yàn)文件中寫死可不行。為了國(guó)際化提示信息,為message元素指定key屬性,該key屬性指定是國(guó)際化提示信息對(duì)應(yīng)key。

例如,上述的校驗(yàn)文件,可以大致寫成這樣:

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

內(nèi)建校驗(yàn)器

在上面的校驗(yàn)文件中,可以看到這樣的語(yǔ)句:

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

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

我們可以使用解壓縮工具打開(kāi)xwork-core-2.3.24.1.jar文件,在xwork-core-2.3.24.1.jar\com\opensymphony\xwork2\validator\validators路徑下可以找到一個(gè)default.xml文件,這個(gè)文件就是Struts2默認(rèn)的校驗(yàn)器注冊(cè)文件,內(nèi)容如下:

<?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>
 <!-- 必填校驗(yàn)器 -->
 <validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>

 <!-- 必填字符串校驗(yàn)器 -->
 <validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/>

 <!-- 整數(shù)校驗(yàn)器 -->
 <validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>

 <!-- 長(zhǎng)整數(shù)校驗(yàn)器 -->
 <validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/>

 <!-- 短整數(shù)校驗(yàn)器 -->
 <validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/>

 <!-- 雙精度浮點(diǎn)數(shù)校驗(yàn)器 -->
 <validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/>

 <!-- 日期校驗(yàn)器 -->
 <validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/>

 <!-- 表達(dá)式校驗(yàn)器 -->
 <validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>

 <!-- 字段表達(dá)式校驗(yàn)器 -->
 <validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>

 <!-- 電子郵件校驗(yàn)器 -->
 <validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/>

 <!-- URL校驗(yàn)器 -->
 <validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/>

 <!-- visitor校驗(yàn)器 -->
 <validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/>

 <!-- 轉(zhuǎn)換校驗(yàn)器 -->
 <validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/>

 <!-- 字符串長(zhǎng)度校驗(yàn)器 -->
 <validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/>

 <!-- 正則表達(dá)式校驗(yàn)器 -->
 <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 -->

關(guān)于這些校驗(yàn)器的具體使用,這里就不一一舉例了。

總結(jié)

這篇文章對(duì)Struts2框架中的校驗(yàn)器進(jìn)行了簡(jiǎn)單的總結(jié),對(duì)于這里說(shuō)的校驗(yàn)器,基礎(chǔ)的是如何使用,而最重要的是掌握Struts2校驗(yàn)器這種思想,將寫代碼來(lái)做的事情,通過(guò)配置來(lái)完成,這種方法很值得我們借鑒,在我們學(xué)習(xí)其它框架中,我們也會(huì)碰到這種方式。學(xué)習(xí),痛并快樂(lè)著。

好了,以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • Java實(shí)現(xiàn)的快速查找算法示例

    Java實(shí)現(xiàn)的快速查找算法示例

    這篇文章主要介紹了Java實(shí)現(xiàn)的快速查找算法,結(jié)合具體實(shí)例形式分析了快速查找算法的原理與相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-09-09
  • Struts2學(xué)習(xí)教程之自定義類型轉(zhuǎn)換器的方法

    Struts2學(xué)習(xí)教程之自定義類型轉(zhuǎn)換器的方法

    類型轉(zhuǎn)換器的作用是將請(qǐng)求中的字符串或字符串?dāng)?shù)組參數(shù)與action中的對(duì)象進(jìn)行相互轉(zhuǎn)換。下面這篇文章主要給大家介紹了關(guān)于Struts2學(xué)習(xí)教程之自定義類型轉(zhuǎn)換器的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2018-05-05
  • springboot掃描自定義的servlet和filter代碼詳解

    springboot掃描自定義的servlet和filter代碼詳解

    本文是一篇根據(jù)作者工作經(jīng)歷總結(jié)出來(lái)的關(guān)于springboot掃描自定義的servlet和filter代碼詳解的文章,小編覺(jué)得非常不錯(cuò),這里給大家分享下,和朋友們一起學(xué)習(xí),進(jìn)步。
    2017-10-10
  • 關(guān)于Tomcat出現(xiàn)The origin server did not find a current representation for the target resourc...的問(wèn)題

    關(guān)于Tomcat出現(xiàn)The origin server did not find a current represent

    這篇文章主要介紹了關(guān)于Tomcat出現(xiàn)The origin server did not find a current representation for the target resourc...的問(wèn)題,感興趣的小伙伴們可以參考一下
    2020-08-08
  • Java設(shè)置千分位分隔符的兩種方法

    Java設(shè)置千分位分隔符的兩種方法

    在 Java 中,有時(shí)候我們需要對(duì)數(shù)字進(jìn)行千分位分隔,以提升數(shù)字的可讀性,本文將介紹如何在 Java 中實(shí)現(xiàn)對(duì)數(shù)字設(shè)置千分位分隔符的方法,需要的朋友可以參考下
    2024-10-10
  • Java實(shí)現(xiàn)的日期處理類完整實(shí)例

    Java實(shí)現(xiàn)的日期處理類完整實(shí)例

    這篇文章主要介紹了Java實(shí)現(xiàn)的日期處理類,結(jié)合完整實(shí)例形式分析了Java針對(duì)日期的獲取、運(yùn)算、轉(zhuǎn)換等相關(guān)操作技巧,需要的朋友可以參考下
    2017-09-09
  • java版微信公眾平臺(tái)后臺(tái)接入

    java版微信公眾平臺(tái)后臺(tái)接入

    這篇文章主要為大家詳細(xì)介紹了java版微信公眾平臺(tái)后臺(tái)接入,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • Android內(nèi)存泄漏實(shí)戰(zhàn)解析

    Android內(nèi)存泄漏實(shí)戰(zhàn)解析

    Java是垃圾回收語(yǔ)言的一種。這篇文章主要介紹了Android內(nèi)存泄漏 的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • 實(shí)例分析Java中public static void main(String args[])是什么意思

    實(shí)例分析Java中public static void main(String args[])是什么意思

    這篇文章主要介紹了實(shí)例分析Java中public static void main(String args[])的意義,詳細(xì)分析了Java主函數(shù)main關(guān)鍵字聲明的具體含義和用法,需要的朋友可以參考下
    2015-12-12
  • java實(shí)現(xiàn)的DES加密算法詳解

    java實(shí)現(xiàn)的DES加密算法詳解

    這篇文章主要介紹了java實(shí)現(xiàn)的DES加密算法,結(jié)合實(shí)例形式詳細(xì)分析了java實(shí)現(xiàn)DES加密操作的原理、實(shí)現(xiàn)技巧與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2017-06-06

最新評(píng)論