最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Struts2的輸入校驗實例代碼

 更新時間:2017年03月13日 15:02:38   作者:雨點的名字  
這篇文章主要介紹了Struts2的輸入校驗實例代碼,非常不錯,具有參考借鑒價值, 需要的朋友可以參考下

在我們項目實際開發(fā)中在數(shù)據(jù)校驗時,分為兩種,一種是前端校驗,一種是服務(wù)器校驗:

   客戶端校驗:主要是通過jsp寫js腳本,它的優(yōu)點很明顯,就是輸入錯誤的話提醒比較及時,能夠減輕服務(wù)器的負(fù)擔(dān),但是客戶端校驗并不是安全的,簡單來講就是防君子防不了小人。

   服務(wù)器端校驗:最大特點就是數(shù)據(jù)安全,但是如果只有服務(wù)器端校驗,會大大增加服務(wù)器端的負(fù)擔(dān)。

所以一般在我們開發(fā)中,是客戶端和服務(wù)器端校驗相結(jié)合作用的。

那這篇文章,我只講服務(wù)器端校驗,在Struts2支持兩種校驗方式:

    代碼校驗 :在服務(wù)器通過編輯java代碼完成數(shù)據(jù)校驗

   配置校驗: xml配置校驗 通過xml配置文件完成數(shù)據(jù)的校驗

(1)代碼校驗:

    代碼校驗分為三個步驟: 

步驟一、封裝數(shù)據(jù)

步驟二、實現(xiàn)要校驗的Action  必須繼承ActionSupport

步驟三、覆蓋Validate方法  然后完成業(yè)務(wù)邏輯數(shù)據(jù)的校驗

用戶界面 register.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<html>
 <head>
 <title>用戶注冊</title>
 </head> 
 <body style="text-align: center;">
 <table align="center" width="50%">
  <tr>
   <td style="color: red">
    <!-- <s:fielderror></s:fielderror> --> <!-- 這里是顯示錯誤的地方 -->
   </td>
  </tr> 
 </table>
  <form action="${pageContext.request.contextPath }/login" method="post" >
   用戶名:<input type="text" name="username"><br><br>
   密  碼:<input type="text" name="password"><br><br>
     確認(rèn)密碼:<input type="text" name="password2"><br><br>
      <input type="reset" value="清空">
      <input type="submit" value="注冊">
  </form>
 </body>
</html>

struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
 "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
 "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts> 
  <!-- 配置常量信息 -->
  <constant name="struts.devMode" value="true"></constant>  
  <package name="struts2" extends="struts-default" >
   <action name="login" class="com.study.Login.RegisterAction">
   <result name="success">/success.jsp</result>
   <!-- 在input視圖中可以通過<s:fielderror/>顯示失敗信息 -->
   <result name="input">/register.jsp</result>
   </action>
  </package>   
</struts>

RegisterAction.java

import com.opensymphony.xwork2.ActionSupport;
public class RegisterAction extends ActionSupport{
 private String username;
 private String password;
 private String password2;
 //這里我通過set方法封裝數(shù)據(jù) 
 public void setUsername(String username) {
  this.username = username;
 }
 public void setPassword(String password) {
  this.password = password;
 }
 public void setPassword2(String password2) {
  this.password2 = password2;
 }
 @Override
 public String execute() throws Exception {
  return NONE;
 }
 //在服務(wù)器端需要完成對數(shù)據(jù)的校驗
 @Override
 public void validate() {
  //測試是否得到屬性值,證實已經(jīng)得到
 System.out.println(username+"---"+password+"---"+password2);
 if(username==null || username.length()<6 || username.length()>20){
  //把錯誤信息保存到字段中
  this.addFieldError("username", "有戶名輸入不合法");
 }
 if(password==null || password.length()<6 || password.length()>20){
  //把錯誤信息保存到字段中
  this.addFieldError("password", "密碼輸入不合法");
 }else if( password2==null || password2.length()<6 || password2.length()>20){
  this.addFieldError("password2", "密碼輸入不合法");
 }else if(!password.equals(password2)){
  this.addFieldError("password2", " 兩次密碼不一致");
 }
  super.validate();
 }
}

運行結(jié)果:

 (2)框架校驗

 框架校驗也就是通過XML配置方式進(jìn)行數(shù)據(jù)校驗 ,這也是我們在企業(yè)開發(fā)的主流校驗。

XML校驗原理: 將很多規(guī)則代碼已經(jīng)寫好只需要在xml文件中定義需要使用的校驗規(guī)則即可。,所以大大減少了我們的開發(fā)時間。

 我先把步驟寫一下:

     步驟一:編寫JSP

     步驟二:編寫Action 繼承ActionSupport或者Validateable接口

   步驟三:封裝請求參數(shù)

   步驟四:編寫xml校驗規(guī)則文件

    Xml校驗文件的命名規(guī)則:   Action類名-validation.xml 對Action中所有的方法都執(zhí)行校驗

      舉例命名規(guī)則RegisterAction-validation.xml

       同時要滿足:Xml校驗文件和Action類要在同一包下

 步驟一: register.jsp

 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
 <head>
 <title>用戶注冊</title>
 </head>
 <body style="text-align: center;">
 <table align="center" width="50%">
  <tr>
   <td style="color: red">
    <s:fielderror></s:fielderror>
   </td>
  </tr>
 </table>
  <form action="${pageContext.request.contextPath }/login.action" method="post" >
   <table width="60%" >
    <tr>
     <td>用戶名</td>
     <td>
      <input type="text" name="username" >
     </td>
    </tr>
    <tr>
     <td>密碼</td>
     <td>
      <input type="password" name="password" >
     </td>
    </tr>
    <tr>
     <td>確認(rèn)密碼</td>
     <td>
      <input type="password" name="password2" >
     </td>
    </tr>
    <tr>
     <td>年齡</td>
     <td>
      <input type="text" name="age" >
     </td>
    </tr>
    <tr>
     <td>郵箱</td>
     <td>
      <input type="text" name="email" >
     </td>
    </tr>
    <tr>
     <td>生日</td>
     <td>
      <input type="text" name="birthday" >
     </td>
    </tr>
    <tr>
     <td>畢業(yè)日期</td>
     <td>
      <input type="text" name="graduation" >
     </td>
    </tr>
    <tr>
     <td>
      <input type="reset" value="清空">
     </td>
     <td>
      <input type="submit" value="注冊">
     </td>
    </tr>
   </table>
  </form>
 </body>
</html>

  步驟二:RegisterAction.java

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
public class RegisterAction extends ActionSupport implements ModelDriven<User>{
 //手動創(chuàng)建一個對象
 private User user =new User();
 @Override
 public String execute() throws Exception {
  return NONE;
 }
 public User getModel() {
  return user;
 }  
}

步驟三:封裝請求參數(shù)

上面手動校驗的案例我是用set方法封裝數(shù)據(jù),那這里我采用的是使用ModelDriven接口,對請求數(shù)據(jù)進(jìn)行封裝,

在之前我講過封裝數(shù)據(jù)的三種方法不清楚的可以看下這篇文章:Struts框架(6)---action接收請求參數(shù)

User.java

import java.util.Date;
public class User {
 private String username;
 private String password;
 private String password2;
 private Integer age;
 private String email;
 private Date birthday;
 private Date graduation;
 /*
  * 給屬性提供get和set方法
  */
}

步驟四:RegisterAction-validation.xml

<!DOCTYPE validators PUBLIC
  "-//Apache Struts//XWork Validator 1.0.2//EN"
  "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">
 <validators>
 <!--dtd約束在xwork-core-**.jar包中 --> 
  <field name="username">
    <field-validator type="requiredstring">
     <param name="trim">true</param>
     <message>用戶民不能為空</message>
    </field-validator>
    <field-validator type="stringlength">
    <param name="minLength">6</param>
    <param name="maxLength">15</param>
    <message>有戶名長度必須在 ${minLength} 和 ${maxLength}之間 </message>
    </field-validator>
  </field> 
  <field name="password">
    <field-validator type="requiredstring">
     <param name="trim">true</param>
     <message>密碼不能為空</message>
    </field-validator>
    <field-validator type="stringlength">
    <param name="minLength">6</param>
    <param name="maxLength">15</param>
    <message>密碼必須在 ${minLength}和${maxLength}之間 </message>
    </field-validator>
  </field> 
  <field name="password2">
   <field-validator type="fieldexpression">
    <param name="expression"><![CDATA[password==password2]]></param>
    <message>兩次密碼不一致</message>
   </field-validator>
  </field>
  <field name="age">
   <field-validator type="required">
    <param name="trim">true</param>
    <message>年齡不能為空</message>
   </field-validator>
   <field-validator type="int">
    <param name="min">1</param>
    <param name="max">150</param>
    <message>年齡必須在 ${min} 和 ${max}之間</message>
   </field-validator>
  </field>
  <field name="email">
   <field-validator type="email">
    <message>不是一個合法的郵箱地址</message>
   </field-validator>
  </field>
  <field name="birthday">
   <field-validator type="date">
    <param name="min">2001-01-01</param>
    <param name="max">2003-12-31</param>
    <message>生日必須在 ${min} 和${max}之間</message>
   </field-validator>  
  </field> 
 </validators>

struts.xml不需要任何改變,和之前一樣就可以了

運行結(jié)果:

   如果你覺得提示錯誤的位置有點丑,那你可以運用Struts2的<s:form>標(biāo)簽,效果會更好

現(xiàn)在兩種方式都講了,現(xiàn)在對xml配置的要點一些知識要點進(jìn)行歸納。

xml校驗文件詳解: 

<validators>: 根元素

<field>:指定action中要校驗的屬性,name屬性指定將被驗證的表單字段的名字

<field-validator>:指定校驗器, type 指定驗證規(guī)則

     上面指定的校驗器requiredstring是由系統(tǒng)提供的,系統(tǒng)提供了能滿足大部分驗證需求

      的校驗器,這些校驗器的定義可以在xwork-2.x.jar中的

      com.opensymphony.xwork2.validator.validators下的default.xml中找到。

<param>:子元素可以向驗證程序傳遞參數(shù)

<message>:子元素為校驗失敗后的提示信息,如果需要國際化,可以為message

                          指定key屬性,key的值為屬性文件中的key。

struts2校驗規(guī)則:

系統(tǒng)提供的校驗器如下:

required (必填校驗器,要求被校驗的屬性值不能為null)

requiredstring (必填字符串校驗器,要求被校驗的屬性值不能為null,并且長度大于0,默認(rèn)情況下會對字符串去前后空格)

stringlength(字符串長度校驗器,要求被校驗的屬性值必須在指定的范圍內(nèi),否則校驗失敗,minLength參數(shù)指定最小長度,maxLength參數(shù)指定最大長度,trim參數(shù)指定校驗field之前是否去除字符串前后的空格)

regex(正則表達(dá)式校驗器,檢查被校驗的屬性值是否匹配一個正則表達(dá)式,expression參數(shù)指定正則表達(dá)式,caseSensitive參數(shù)指定進(jìn)行正則表達(dá)式匹配時,是否區(qū)分大小寫,默認(rèn)值為true)

int(整數(shù)校驗器,要求field的整數(shù)值必須在指定范圍內(nèi),min指定最小值,max指定最大值)

double(雙精度浮點數(shù)校驗器,要求field的雙精度浮點數(shù)必須在指定范圍內(nèi),min指定最小值,max指定最大值)

fieldexpression(字段OGNL表達(dá)式校驗器,要求field滿足一個ognl表達(dá)式,expression參數(shù)指定ognl表達(dá)式,該邏輯表達(dá)式基于ValueStack進(jìn)行求值,返回true時校驗通過,否則不通過)

email(郵件地址校驗器,要求如果被校驗的屬性值非空,則必須是合法的郵件地址)

url(網(wǎng)址校驗器,要求如果被校驗的屬性值非空,則必須是合法的url地址)

date(日期校驗器,要求field的日期值必須在指定范圍內(nèi),min指定最小值,max指定最大值)

conversion(轉(zhuǎn)換校驗器,指定在類型轉(zhuǎn)換失敗時,提示的錯誤信息)

visitor(用于校驗action中復(fù)合類型的屬性,它指定一個校驗文件用于校驗復(fù)合類型屬性中的屬性)

expression(OGNL表達(dá)式校驗器,它是一個非字段校驗器, expression參數(shù)指定ognl表達(dá)式,該邏輯表達(dá)式基于ValueStack進(jìn)行求值,返回true時校驗通過,否則不通過,該校驗器不可用在字段校驗器風(fēng)格的配置中)

最后講一個細(xì)節(jié):

編寫校驗文件時,不能出現(xiàn)幫助信息

在編寫ActionClassName-validation.xml校驗文件時,如果出現(xiàn)不了幫助信息,可以按下面方式解決:

windwos->preferences->myeclipse->files and editors->xml->xmlcatalog

點“add”,在出現(xiàn)的窗口中的location中選“File system”,然后在xwork-2.1.2解壓目錄的src\java目錄中選擇xwork-validator-1.0.3.dtd,

回到設(shè)置窗口的時候不要急著關(guān)閉窗口,應(yīng)把窗口中的Key Type改為URI 。Key改為http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd

以上所述是小編給大家介紹的Struts2的輸入校驗實例代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • 詳解Maven settings.xml配置(指定本地倉庫、阿里云鏡像設(shè)置)

    詳解Maven settings.xml配置(指定本地倉庫、阿里云鏡像設(shè)置)

    這篇文章主要介紹了詳解Maven settings.xml配置(指定本地倉庫、阿里云鏡像設(shè)置),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-12-12
  • Java異步編程Future應(yīng)用方式

    Java異步編程Future應(yīng)用方式

    Java中的Future接口用于構(gòu)建復(fù)雜并行操作,它允許異步執(zhí)行任務(wù),并在需要時獲取結(jié)果,通過Future接口,可以避免多線程編程中的一些常見問題,如線程執(zhí)行順序和結(jié)果獲取的復(fù)雜性,然而,在使用Future時需要注意,并行執(zhí)行可能會變?yōu)榇袌?zhí)行,特別是在使用get()方法時
    2025-02-02
  • Java多線程之如何確定線程數(shù)的方法

    Java多線程之如何確定線程數(shù)的方法

    創(chuàng)建線程和銷毀線程都是比較耗時的操作,如果每個任務(wù)都創(chuàng)建一個線程去處理,這樣線程會越來越多,那么應(yīng)該如何確定線程的數(shù)量,本文就詳細(xì)的介紹一下,感興趣的可以了解一下
    2022-03-03
  • SpringBoot異常: nested exception is java.lang.NoClassDefFoundError: javax/servlet/ServletContext解決方案

    SpringBoot異常: nested exception is java.lang.NoClassDefFoundE

    這篇文章主要介紹了SpringBoot異常: nested exception is java.lang.NoClassDefFoundError: javax/servlet/ServletContext解決方案,說明了錯誤原因和解決方案,需要的朋友可以參考下
    2021-06-06
  • 解決java使用axios.js的post請求后臺時無法接收到入?yún)⒌膯栴}

    解決java使用axios.js的post請求后臺時無法接收到入?yún)⒌膯栴}

    今天小編就為大家分享一篇解決java使用axios.js的post請求后臺時無法接收到入?yún)⒌膯栴},具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • 詳解java 單例模式及方法總結(jié)

    詳解java 單例模式及方法總結(jié)

    這篇文章主要介紹了詳解java 單例模式及方法總結(jié)的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • Reactive反應(yīng)式編程及使用介紹

    Reactive反應(yīng)式編程及使用介紹

    這篇文章主要介紹了為什使用Reactive反應(yīng)式編程的原因分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助祝大家多多進(jìn)步,早日升職加薪
    2022-02-02
  • Java+Mysql學(xué)生管理系統(tǒng)源碼

    Java+Mysql學(xué)生管理系統(tǒng)源碼

    這篇文章主要為大家詳細(xì)介紹了Java+Mysql學(xué)生管理系統(tǒng)源碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-06-06
  • 淺談SpringBoot是如何實現(xiàn)日志的

    淺談SpringBoot是如何實現(xiàn)日志的

    這篇文章主要介紹了淺談SpringBoot是如何實現(xiàn)日志的,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • 解決IDEA中同項目引用報紅問題

    解決IDEA中同項目引用報紅問題

    在IDEA中,如果項目引用報紅,可能是因為IDEA的引用緩存問題,可以通過File->Invalidate Caches/Restart清空緩存并重建索引來解決,這個方法可以幫助解決同項目中引用找不到的問題,恢復(fù)正常的項目引用,消除報紅
    2024-09-09

最新評論

巩留县| 斗六市| 临沭县| 牙克石市| 陇西县| 武强县| 岑溪市| 神池县| 社会| 西安市| 广饶县| 鸡东县| 云安县| 蕉岭县| 蒙阴县| 武汉市| 胶州市| 普定县| 六安市| 仁寿县| 高要市| 清流县| 河南省| 突泉县| 雷波县| 包头市| 周至县| 天门市| 乌拉特前旗| 万载县| 齐河县| 西丰县| 南木林县| 奉贤区| 贵定县| 东乌| 黎川县| 宽甸| 图木舒克市| 聂拉木县| 镇平县|