日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用Struts2验证框架实现输入校验

發布時間:2025/6/15 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用Struts2验证框架实现输入校验 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

學習了《Struts2權威指南》中關于Struts2的輸入校驗,自己動手測試了一把,也遇到一些問題,在這里記錄一下。直接看代碼:

login.jsp

[xhtml] view plaincopy
  • <%@?page?language="java"?contentType="text/html;?charset=UTF-8"?pageEncoding="UTF-8"%>??
  • <%@taglib?prefix="s"?uri="/struts-tags"?%>??
  • <!DOCTYPE?html?PUBLIC?"-//W3C//DTD?HTML?4.01?Transitional//EN"?"http://www.w3.org/TR/html4/loose.dtd">??
  • <html>??
  • <head>??
  • <meta?http-equiv="Content-Type"?content="text/html;?charset=UTF-8">??
  • <title></title>??
  • </head>??
  • <body>??
  • ?<!--?使用Struts標簽?通過配置form表單validate="true"開啟客戶端校驗-->??
  • ?<s:form?action="login"?validate="true">??
  • ????<s:textfield?name="username"?label="用戶名"></s:textfield>??
  • ????<s:password?name="password"?label="密???碼"></s:password>??
  • ????<s:submit?value="提交"></s:submit>??
  • </s:form>??
  • ?</body>??
  • </html>??
  • LoginAction.java

    [java] view plaincopy
  • package?com.petrochina.action.system;??
  • ??
  • import?com.opensymphony.xwork2.ActionSupport;??
  • ??
  • public?class?LoginAction?extends?ActionSupport?{??
  • ??
  • ????private?static?final?long?serialVersionUID?=?1L;??
  • ????private?String?username;//用戶名??
  • ????private?String?password;//密碼??
  • ??
  • ????@Override??
  • ????public?String?execute()?throws?Exception?{??
  • ????????if?(getUsername().equals("admin")?&&?getPassword().equals("admin"))?{??
  • ????????????return?SUCCESS;??
  • ????????}?else?{??
  • ????????????return?INPUT;??
  • ????????}??
  • ????}??
  • ??
  • ????public?String?getUsername()?{??
  • ????????return?username;??
  • ????}??
  • ??
  • ????public?void?setUsername(String?username)?{??
  • ????????this.username?=?username;??
  • ????}??
  • ??
  • ????public?String?getPassword()?{??
  • ????????return?password;??
  • ????}??
  • ??
  • ????public?void?setPassword(String?password)?{??
  • ????????this.password?=?password;??
  • ????}??
  • }??
  • 校驗文件LoginAction-validation.xml,其生成路徑要和LoginAction.class在一起.

    [xhtml] view plaincopy
  • <?xml?version="1.0"?encoding="UTF-8"?>??
  • ?<!--?xwork校驗器的DTD信息?-->??
  • ?<!DOCTYPE?validators?PUBLIC??
  • ?????????"-//OpenSymphony?Group//XWork?Validator?1.0.2//EN"??
  • ?????????"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">??
  • ?<validators>??
  • ????<!--?字段校驗器,校驗username屬性?-->??
  • ????<field?name="username">??
  • ????????<!--?配置必填字符串校驗器?-->??
  • ????????<field-validator?type="requiredstring">??
  • ????????????<!--?通過key指定國際化資源文件?-->??
  • ????????????<message?key="user.required"/>??
  • ????????</field-validator>??
  • ????</field>??
  • ????<!--?字段校驗器,校驗password屬性?-->??
  • ?????<field?name="password">??
  • ????????<!--?配置必填字符串校驗器?-->??
  • ????????<field-validator?type="requiredstring">??
  • ????????????<message?key="pass.required"></message>??
  • ????????</field-validator>??
  • ????????<!--?密碼長度必須是3到6位?-->??
  • ????????<field-validator?type="stringlength">??
  • ????????????<param?name="minLength">3</param>??
  • ????????????<param?name="maxLength">6</param>??
  • ????????????<message?key="pass.length"></message>??
  • ????????</field-validator>??
  • ?????</field>??
  • ?</validators>??
  • struts.xml

    [xhtml] view plaincopy
  • <?xml?version="1.0"?encoding="UTF-8"?>??
  • <!DOCTYPE?struts?PUBLIC?"-//Apache?Software?Foundation//DTD?Struts?Configuration?2.1//EN"??
  • ????????"http://struts.apache.org/dtds/struts-2.1.dtd">??
  • <struts>??
  • ????<!--?struts常量定義?-->??
  • ??????
  • ????<!--?指定struts國際化資源文件的baseName?-->??
  • ????<constant?name="struts.custom.i18n.resources"?value="messageResource"/>??
  • ????<!--?指定每次HTTP請求時是否重新加載國際化資源文件,默認為false,開發階段設為true?-->??
  • ????<constant?name="struts.i18n.reload"?value="true"/>??
  • ????<!--?配置應用的編碼方式?-->??
  • ????<constant?name="struts.i18n.encoding"?value="UTF-8"/>???
  • ??????
  • ????<!--?action?定義?-->??
  • ????<package?name="mystruts"?extends="struts-default">??
  • ????????<action?name="login"?class="com.petrochina.action.system.LoginAction">??
  • ????????????<result?name="success">/welcome.jsp</result>??
  • ????????????<!--?校驗錯誤直接返回"input"字符串,所以要定義"input"對應的視圖資源?-->??
  • ????????????<result?name="input">/login.jsp</result>??
  • ????????</action>??
  • ????</package>??
  • </struts>??
  • 國際化資源文件messageResource_zh_CN.properties

    [xhtml] view plaincopy
  • #struts校驗??
  • user.required=用戶名不能為空??
  • pass.required=密碼不能為空??
  • pass.length=密碼必須是3到6位??
  • 文件結構:

    登錄頁面:

    不輸入任何內容,點擊"提交",效果如下:

    可見對LoginAction中的password屬性定義的兩個校驗器都起作用了,但如果這兩個校驗信息同時顯示有點冗余,此時可以通過設置short-circuit="true"來配置校驗器短路.修改后的LoginAction-validation.xml中password字段的定義如下:

    [xhtml] view plaincopy
  • <!--?字段校驗器,校驗password屬性?-->??
  • ?????<field?name="password">??
  • ????????<!--?配置必填字符串校驗器?-->??
  • ????????<field-validator?type="requiredstring"?short-circuit="true">??
  • ????????????<message?key="pass.required"></message>??
  • ????????</field-validator>??
  • ????????<!--?密碼長度必須是3到6位?-->??
  • ????????<field-validator?type="stringlength">??
  • ????????????<param?name="minLength">3</param>??
  • ????????????<param?name="maxLength">6</param>??
  • ????????????<message?key="pass.length"></message>??
  • ????????</field-validator>??
  • ?????</field>??
  • 這樣如果密碼為空就提交的話只會提示"密碼不能為空",效果如下:

    ?

    PS:直接訪問jsp頁面(http://localhost:8080/struts/login.jsp)會報錯:

    ?

    但是通過action(http://localhost:8080/struts/login.action)就可以正常訪問,去掉struts的客戶端驗證(在jsp頁面的form表單中去掉validate="true"屬性)也可以正常訪問.在網上查了一下資料,大家的解決方法都是走action.個人覺得原因是:通過Action訪問Struts2會加載LoginAction-validation.xml,從而讀取配置的校驗器信息,根據配置的校驗器信息生成客戶端校驗腳本(Javascript),如果直接訪問jsp頁面那么就獲取不到校驗器信息(Method public java.util.List org.apache.struts2.components.Form.getValidators(java.lang.String) threw an exception when invoked on org.apache.struts2.components.Form@18db6e1 - Class: freemarker.ext.beans.SimpleMethodModel),從而無法生成客戶端腳本.

    總結

    以上是生活随笔為你收集整理的使用Struts2验证框架实现输入校验的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。