亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Struts2的輸入校驗實例代碼

發布時間:2020-09-05 09:43:41 來源:腳本之家 閱讀:148 作者:雨點的名字 欄目:編程語言

在我們項目實際開發中在數據校驗時,分為兩種,一種是前端校驗,一種是服務器校驗:

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

   服務器端校驗:最大特點就是數據安全,但是如果只有服務器端校驗,會大大增加服務器端的負擔。

所以一般在我們開發中,是客戶端和服務器端校驗相結合作用的。

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

    代碼校驗 :在服務器通過編輯java代碼完成數據校驗

   配置校驗: xml配置校驗 通過xml配置文件完成數據的校驗

(1)代碼校驗:

    代碼校驗分為三個步驟: 

步驟一、封裝數據

步驟二、實現要校驗的Action  必須繼承ActionSupport

步驟三、覆蓋Validate方法  然后完成業務邏輯數據的校驗

用戶界面 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 >
 <table align="center" width="50%">
  <tr>
   <td >
    <!-- <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>
     確認密碼:<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方法封裝數據 
 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;
 }
 //在服務器端需要完成對數據的校驗
 @Override
 public void validate() {
  //測試是否得到屬性值,證實已經得到
 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();
 }
}

運行結果:

Struts2的輸入校驗實例代碼

 (2)框架校驗

 框架校驗也就是通過XML配置方式進行數據校驗 ,這也是我們在企業開發的主流校驗。

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

 我先把步驟寫一下:

     步驟一:編寫JSP

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

   步驟三:封裝請求參數

   步驟四:編寫xml校驗規則文件

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

      舉例命名規則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 >
 <table align="center" width="50%">
  <tr>
   <td >
    <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>確認密碼</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>畢業日期</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>{
 //手動創建一個對象
 private User user =new User();
 @Override
 public String execute() throws Exception {
  return NONE;
 }
 public User getModel() {
  return user;
 }  
}

步驟三:封裝請求參數

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

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

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不需要任何改變,和之前一樣就可以了

運行結果:

Struts2的輸入校驗實例代碼

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

現在兩種方式都講了,現在對xml配置的要點一些知識要點進行歸納。

xml校驗文件詳解: 

<validators>: 根元素

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

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

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

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

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

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

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

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

struts2校驗規則:

系統提供的校驗器如下:

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

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

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

regex(正則表達式校驗器,檢查被校驗的屬性值是否匹配一個正則表達式,expression參數指定正則表達式,caseSensitive參數指定進行正則表達式匹配時,是否區分大小寫,默認值為true)

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

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

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

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

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

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

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

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

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

最后講一個細節:

編寫校驗文件時,不能出現幫助信息

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

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

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

回到設置窗口的時候不要急著關閉窗口,應把窗口中的Key Type改為URI 。Key改為http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

德安县| 陕西省| 辛集市| 池州市| 德庆县| 奉新县| 包头市| 和硕县| 广昌县| 灵武市| 宁远县| 大名县| 青川县| 福建省| 吴川市| 图片| 龙海市| 晋中市| 临颍县| 普安县| 静宁县| 磴口县| 德惠市| 龙岩市| 连云港市| 阿坝县| 岫岩| 尉氏县| 青冈县| 景德镇市| 杭州市| 锡林郭勒盟| 任丘市| 阿坝| 连州市| 龙游县| 九台市| 辽阳县| 固镇县| 武定县| 饶河县|