struts框架搭建及validator示例

简介: struts框架搭建struts必备jar包struts的校验(validation)struts的validation框架需要的jar包struts的validation.xml:Local DTD is missing for publicIDxwork-validator-1.0.2.dtd

包看就会,如果哪没看懂,欢迎评论区留言交流或者私信

前置

配置tomcat

0 项目地址

结构
在这里插入图片描述

1 创建web工程

    参考链接
    根据需要选择合适的tomcat
在这里插入图片描述

2 lib下导入jar包

strutsjakarta-oro
    其中jakarta-oro和commons-validator是因为validation框架导入的,其余是struts所必须的。(当然也可以去我的项目里面下载jar)
在这里插入图片描述

3 写代码

1 创建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的相关xml
    利用include标签,将一个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命名空间。如目前login的是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"是开启验证,创建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 相关知识
  • 1 validation.xml和*Action.java放在一起
  • 2 validation.xml命名规则
    (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资源),当然也可以在我的代码中找,就在src目录下面
配置方法:参考
(2)警告: No configuration found for the specified action: 'Login' in namespace
若是struts中配置了namespace="/",但s:form中没有配置,则会出现
(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权威指南pdf完整版+源代码

目录
相关文章
|
虚拟化 Docker Windows
VMware Workstation Pro 启动虚拟机报错,您的主机不满足在启用 Hyper-V 或 Device/Credential Guard 的情况下运行 VMware Workstatio
原因 出现此问题可能是您安装的docker或其他软件启用了Hyper-V,导致虚拟机无法启动 解决方法 右键开始,选择【应用和功能】
2460 0
VMware Workstation Pro 启动虚拟机报错,您的主机不满足在启用 Hyper-V 或 Device/Credential Guard 的情况下运行 VMware Workstatio
langchain 入门指南(三)- token的计算
langchain 入门指南(三)- token的计算
591 0
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的医院挂号预约系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的医院挂号预约系统的详细设计和实现(源码+lw+部署文档+讲解等)
182 1
|
JavaScript 数据可视化 图形学
iCraft Editor - 助你轻松绘制出色的立体架构图
iCraft Editor是一款创新工具,专为绘制立体架构图设计,带来直观且吸引人的3D视觉体验。它简化了复杂系统的表达,支持自由旋转与缩放,让用户从多角度审视设计。简洁界面与丰富图形库让操作变得简单快捷,即使是新手也能迅速上手。iCraft Editor支持子场景嵌套及外部模型导入,适用于软件架构设计、系统部署维护等多种场景,提升沟通效率。无需编程基础,即可在线免费使用,轻松实现复杂设计的可视化。开启3D新视角,让您的创意无限延伸![官网](https://icraft.gantcloud.com)
1960 1
iCraft Editor - 助你轻松绘制出色的立体架构图
|
人工智能 JSON Serverless
AI “黏土画风”轻松拿捏,手把手带你云端部署 ComfyUI
ComfyUI 是一款基于节点工作流稳定扩散算法的全新 WebUI,相对于传统的 WebUI,ComfyUI 的部署和学习曲线较陡峭,函数计算基于 Serverless 应用中心开发“ComfyUI 应用模版”,简化开发者的部署流程,帮助简单、快捷实现全新而精致的绘画体验,点击本文查看一键部署 ComfyUI 的方法。
19320 7
一文讲明白什么是市场调研
一文讲明白什么是市场调研
425 0
一文讲明白什么是市场调研
|
Cloud Native 安全 自动驾驶
全新升级!《云原生架构白皮书 2022 版》重磅发布
今年,《云原生架构白皮书2022版》正式上线,相较于2020年版本,本次内容新增数十家企业实战经验合集,同时在云原生产品矩阵中,新增多个核心产品家族,如容器产品家族、微服务产品家族、云原生技术中台 CNStack 产品家族等,更加一站式助力企业数字化转型。
9241 1
全新升级!《云原生架构白皮书 2022 版》重磅发布
|
安全 算法 网络安全
网络安全与信息安全:漏洞、加密和安全意识的探索
在数字时代,网络安全与信息安全是每个互联网用户必须面对的挑战。本文将深入探讨网络漏洞的产生原因,加密技术如何保护我们的信息安全,以及提升安全意识的重要性。通过这些知识点的分享,我们希望能增强大家对网络安全的认识,共同构建更安全的网络环境。
|
XML 测试技术 API
Python的API自动化测试
【4月更文挑战第17天】使用Python进行API自动化测试,可选框架如unittest、pytest。结合requests库发送HTTP请求,编写测试用例描述场景,使用断言验证响应。通过参数化测试提高覆盖率,集成CI工具实现自动化。记录测试结果,如用pytest和requests编写简单测试脚本。利用Postman、Allure和mocking技术优化测试流程。持续维护测试用例以应对API变化。
154 2
|
数据采集 编解码 JSON
使用Python进行网站数据爬取和视频处理
在互联网时代,我们经常需要从网站上获取数据并进行分析或处理。有时候,我们还需要对视频数据进行一些操作,比如剪辑、转码、合成等。Python是一门非常适合做数据分析和视频处理的编程语言,它有很多强大的库和工具可以帮助我们完成这些任务。本文将介绍如何使用Python的requests模块爬取网站数据并进行视频处理的方法和步骤。
467 0
使用Python进行网站数据爬取和视频处理