包看就會逻卖,如果哪沒看懂檀训,歡迎評論區(qū)留言交流
前置
0 項目地址
地址
結(jié)構(gòu)
1 創(chuàng)建web工程
????參考鏈接
????根據(jù)需要選擇合適的tomcat
2 lib下導(dǎo)入jar包
struts、jakarta-oro
????其中jakarta-oro和commons-validator是因為validation框架導(dǎo)入的佃牛,其余是struts所必須的。(當(dāng)然也可以去我的項目里面下載jar)
[圖片上傳失敗...(image-27751e-1600337777042)]
3 寫代碼
1 創(chuàng)建struts項目
(1)LoginAction.java
package validate;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport {
private static final long serialVersionUID = 1L;
private String a;
public String getA() {
return a;
}
public void setA(String a) {
this.a = a;
}
@Override
public String execute() throws Exception {
System.out.println("action方法execute");
if (getA().equals("admin")) {
return SUCCESS;
} else {
super.addActionError("用戶名錯誤!");
return INPUT;
}
}
}
(2)struts的相關(guān)xml
????利用include標(biāo)簽,將一個struts.xml配置文件分割成多個配置文件镀层,比較清晰
struts-validate.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>
<!-- name package的名字 extends:繼承的父package名稱 -->
<!-- namespace:package命名空間。如目前l(fā)ogin的是http://localhost:8080/login -->
<package name="validate" extends="struts-default" namespace="/">
<action name="login" class="validate.LoginAction" method="execute">
<result name="success">/WEB-INF/pages/validate/success.jsp</result>
<result name="input">/WEB-INF/pages/validate/index.jsp</result>
</action>
</package>
</struts>
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>
<include file="/validate/struts-validate.xml"/>
</struts>
(3)web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>struts-validation</display-name>
<welcome-file-list>
<welcome-file>/WEB-INF/pages/validate/index.jsp</welcome-file>
</welcome-file-list>
<!-- struts2 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
(4)jsp
- validate="true"是開啟驗證皿曲,創(chuàng)建struts項目時可將此句刪除
index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="Java"
import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<body>
登錄
<s:form action="login" validate="true" method="post" namespace="/">
<s:textfield name="a" id="a" label="a"></s:textfield>
<s:textfield name="b" id="b" label="b"></s:textfield>
<s:submit value="提交"></s:submit>
</s:form>
<s:actionerror />
</body>
</html>
success.jsp
<%@ page contentType="text/html;charset=UTF-8" language="Java"
import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<body>
成功
</body>
</html>
2 添加validate
1 相關(guān)知識
- 1 validation.xml和*Action.java放在一起
- 2 validation.xml命名規(guī)則
(1)<ActionClassName>-validation.xml
????ActionClassName放的是要驗證Action類的名字
(2)<ActionClassName>-<actionName>-validation.xml
????actionName指struts.xml里面配置的action name唱逢,如LoginAction-login-validation.xml - 3 s:form具備輸出校驗錯誤的能力
- 4 前面struts.xml配置input,是為了讓校驗失敗后屋休,返回index.jsp
2 代碼
- 對b的校驗采取的是自定義validator
LoginAction-validation.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.2//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">
<validators>
<field name="a">
<field-validator type="requiredstring">
<message>此項必輸</message>
</field-validator>
<field-validator type="stringlength">
<param name="minLength">3</param>
<message>長度必須大于3</message>
</field-validator>
</field>
<field name="b">
<field-validator type="bValidator">
<param name="b">b</param>
<message>bbbbb</message>
</field-validator>
</field>
</validators>
BValidator.java
package validate;
import com.opensymphony.xwork2.validator.ValidationException;
import com.opensymphony.xwork2.validator.validators.FieldValidatorSupport;
public class BValidator extends FieldValidatorSupport {
private String b;
@Override
public void validate(Object object) throws ValidationException {
//獲取字段名
String fieldName = super.getFieldName();
String value = (String)super.getFieldValue(fieldName,object);
System.out.println("自定義validator"+fieldName+","+value);
if(value == null || value == "") {
//使LoginAction-validation.xml中b的message可以顯示
this.addFieldError(fieldName, object);
//添加校驗錯誤惶我,和上一條語句任選其一即可
this.getValidatorContext().addFieldError(fieldName, this.getValidatorContext().getText(value+"b為空"+b));
return;
}
}
}
validators.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.2//EN"
"http://struts.apache.org/dtds/xwork-validator-config-1.0.dtd">
<!-- 此DOCTYPE和default.xml中的一致 -->
<validators>
<!-- 驗證器注冊 -->
<validator name = "bValidator" class = "validate.BValidator"/>
</validators>
4 啟動中遇到的問題
(1)Caught Exception while registering Interceptor class org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor - interceptor - jar:file:/D:/eclipse/tools/apache-tomcat-7.0.86-windows-x64/apache-tomcat-7.0.86/wtpwebapps/struts-validation/WEB-INF/lib/struts2-core-2.3.37.jar!/struts-default.xml:222:127
解決:配置離線dtd(dtd資源),當(dāng)然也可以在我的代碼中找博投,就在src目錄下面
配置方法:參考
(2)警告: No configuration found for the specified action: 'Login' in namespace
若是struts中配置了namespace="/"绸贡,但s:form中沒有配置,則會出現(xiàn)
(3)Local DTD is missing for publicID: -//OpenSymphony Group//XWork Validator 1.0.2
解決:更換LoginAction-validation.xml開頭為
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.2//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">
提升
struts2權(quán)威指南pdf完整版+源代碼
鏈接 提取碼:seks