亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Struts2的輸入校驗(yàn)實(shí)例代碼

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

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

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

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

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

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

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

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

(1)代碼校驗(yàn):

    代碼校驗(yàn)分為三個(gè)步驟: 

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

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

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

用戶界面 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>用戶注冊(cè)</title>
 </head> 
 <body style="text-align: center;">
 <table align="center" width="50%">
  <tr>
   <td style="color: red">
    <!-- <s:fielderror></s:fielderror> --> <!-- 這里是顯示錯(cuò)誤的地方 -->
   </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="注冊(cè)">
  </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視圖中可以通過(guò)<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;
 //這里我通過(guò)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ù)器端需要完成對(duì)數(shù)據(jù)的校驗(yàn)
 @Override
 public void validate() {
  //測(cè)試是否得到屬性值,證實(shí)已經(jīng)得到
 System.out.println(username+"---"+password+"---"+password2);
 if(username==null || username.length()<6 || username.length()>20){
  //把錯(cuò)誤信息保存到字段中
  this.addFieldError("username", "有戶名輸入不合法");
 }
 if(password==null || password.length()<6 || password.length()>20){
  //把錯(cuò)誤信息保存到字段中
  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();
 }
}

運(yùn)行結(jié)果:

 (2)框架校驗(yàn)

 框架校驗(yàn)也就是通過(guò)XML配置方式進(jìn)行數(shù)據(jù)校驗(yàn) ,這也是我們?cè)谄髽I(yè)開(kāi)發(fā)的主流校驗(yàn)。

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

 我先把步驟寫一下:

     步驟一:編寫JSP

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

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

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

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

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

       同時(shí)要滿足:Xml校驗(yàn)文件和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>用戶注冊(cè)</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="注冊(cè)">
     </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>{
 //手動(dòng)創(chuàng)建一個(gè)對(duì)象
 private User user =new User();
 @Override
 public String execute() throws Exception {
  return NONE;
 }
 public User getModel() {
  return user;
 }  
}

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

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

在之前我講過(guò)封裝數(shù)據(jù)的三種方法不清楚的可以看下這篇文章:Struts框架(6)---action接收請(qǐng)求參數(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>有戶名長(zhǎng)度必須在 ${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>不是一個(gè)合法的郵箱地址</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不需要任何改變,和之前一樣就可以了

運(yùn)行結(jié)果:

   如果你覺(jué)得提示錯(cuò)誤的位置有點(diǎn)丑,那你可以運(yùn)用Struts2的<s:form>標(biāo)簽,效果會(huì)更好

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

xml校驗(yàn)文件詳解: 

<validators>: 根元素

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

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

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

      的校驗(yàn)器,這些校驗(yàn)器的定義可以在xwork-2.x.jar中的

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

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

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

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

struts2校驗(yàn)規(guī)則:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

相關(guān)文章

  • IDEA的Mybatis Log Plugin插件配置和使用詳解

    IDEA的Mybatis Log Plugin插件配置和使用詳解

    這篇文章主要介紹了IDEA的Mybatis Log Plugin插件配置和使用,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Feign?日期格式轉(zhuǎn)換錯(cuò)誤的問(wèn)題

    Feign?日期格式轉(zhuǎn)換錯(cuò)誤的問(wèn)題

    這篇文章主要介紹了Feign?日期格式轉(zhuǎn)換錯(cuò)誤的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java判斷兩個(gè)集合是否具有交集及如何獲得交集詳解

    Java判斷兩個(gè)集合是否具有交集及如何獲得交集詳解

    這篇文章主要給大家介紹了關(guān)于Java判斷兩個(gè)集合是否具有交集及如何獲得交集的相關(guān)資料,文中通過(guò)圖文以及實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07
  • java實(shí)現(xiàn)靜默加載Class示例代碼

    java實(shí)現(xiàn)靜默加載Class示例代碼

    這篇文章主要給大家介紹了關(guān)于java實(shí)現(xiàn)靜默加載Class的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-10-10
  • Java編程使用Runtime和Process類運(yùn)行外部程序的方法

    Java編程使用Runtime和Process類運(yùn)行外部程序的方法

    這篇文章主要介紹了Java編程使用Runtime和Process類運(yùn)行外部程序的方法,結(jié)合實(shí)例形式分析了java使用Runtime.getRuntime().exec()方法運(yùn)行外部程序的常見(jiàn)情況與操作技巧,需要的朋友可以參考下
    2017-08-08
  • Java如何把map分割成多個(gè)map

    Java如何把map分割成多個(gè)map

    這篇文章主要介紹了Java如何把map分割成多個(gè)map,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-08-08
  • Fluent Mybatis如何做到代碼邏輯和sql邏輯的合一

    Fluent Mybatis如何做到代碼邏輯和sql邏輯的合一

    對(duì)比原生Mybatis, Mybatis Plus或者其他框架,F(xiàn)luentMybatis提供了哪些便利呢?很多朋友對(duì)這一問(wèn)題不是很清楚,今天小編給大家?guī)?lái)一篇教程關(guān)于Fluent Mybatis如何做到代碼邏輯和sql邏輯的合一,一起看看吧
    2021-08-08
  • SpringBoot 整合 JMSTemplate的示例代碼

    SpringBoot 整合 JMSTemplate的示例代碼

    這篇文章主要介紹了SpringBoot 整合 JMSTemplate的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • Springboot常用注解及配置文件加載順序詳解

    Springboot常用注解及配置文件加載順序詳解

    這篇文章主要介紹了Springboot常用注解及配置文件加載順序,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-11-11
  • 非常實(shí)用的java萬(wàn)年歷制作方法

    非常實(shí)用的java萬(wàn)年歷制作方法

    這篇文章主要為大家詳細(xì)介紹了非常實(shí)用的java萬(wàn)年歷制作方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-02-02

最新評(píng)論