Struts(二)

本文介绍Struts框架中的表单处理与验证方法,包括如何通过ActionForm类获取表单数据、表单验证的实现方式及动态表单的使用等关键技术点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

表单处理:

获取表单数据:

struts中,要想得到表单的数据,可以写个javabean,并且这个bean必须继承了ActionForm这个类,然后struts会自动将表单的数据封装到ActionForm的子类中,取得时候直接get就可以了

1.ActionForm

2.修改Struts_config.xml文件,定义formbean,action中引入formbean

 

引例:

 

环境配置:

web项目根目录:first_struts

     /first_struts

     /first_struts/JS

     /first_struts/pages login.jsp success.jsp fail.jsp

     /first_struts/pice

     /first_struts/WEB-INF : web.xml struts_config.xml

                    /WEB-INF/classes

                    /WEB-INF/lib

                    /WEB-INF/src

                             /src/yuchen.form1.LoginAction.java

                             /src/yuchen.form1.LoginForm.java

 

程序目标:

测试struts应用,用户进入登陆页面,当提交数据的时候,显示登陆成功页面

得到表单数据,如果用户输入的是root,那么提示不能用这个名字登陆,否则,登陆成功

 

知识点:

1.struts应用中处理表单的方式:

需要将表单数据存放到一个javabean中,这个javabean的模型已经写好了,只要我们继承ActionForm类就

可以了,这个就可以从表单中读取参数了

2.语法

struts_config.xml中定义formbean,然后在action中写上这个url中表单所对应的formbean

<form-bean

       name="loginform"

       type="yuchen.form1.LoginForm"/>//声明formbean

      

        <action

              name="loginform"  //引入formbean

              scope="request"

            path="/login"

              type="yuchen.form1.LoginAction">

              <forward name="success" path="/pages/success.jsp"/>

              <forward name="fail" path="/pages/fail.jsp"/>

         </action>

 

jsp:

引用上面的login.jsp success.jsp

 

fail.jsp:

<h1>can no root login!</h1>

 

struts-config.xml:

<form-bean

            name="loginform"

            type="yuchen.form1.LoginForm"/>

 

        <action

              name="loginform"  //引入formbean

              scope="request"

            path="/login"

              type="yuchen.form1.LoginAction">

              <forward name="success" path="/pages/success.jsp"/>

              <forward name="fail" path="/pages/fail.jsp"/>

         </action>

 

java:

引用上面的LoginAction.java

 

LoginForm.java:

package yuchen.form1;

 

import org.apache.struts.action.ActionForm;

 

public class LoginForm extends ActionForm{

     private String user;

     private String pwd;

     public LoginForm(){};

     public String getPwd() {

         return pwd;

     }

     public void setPwd(String pwd) {

         this.pwd = pwd;

     }

     public String getUser() {

         return user;

     }

     public void setUser(String user) {

         this.user = user;

     }

    

}

 

表单验证:

1.ActionForm validate()

2.ActionErrors

3.ActionMessage

4.资源文件

5.引例

 

ActionForm validate():

要想做服务器端的表单验证,可以使用ActionFormvalidate方法,在这个方法中定义验证逻辑

这个方法将返回ActionErrors类型的对象

 

ActionErrors:

这个类型的对象里面封装了若干的ActionMessage对象

 

ActionMessage:

这个里面有指向资源文件的key

 

资源文件:

classes/:MessageResources.properties

作用:这个资源文件里面有key指向的一些字符串,我们如果需要在页面上显示一些字符串信息,就可以使用

这个资源文件来实现,好处就是维护方便,可以国际化

struts-config.xml中可以定义资源文件:

<message-resources>

 

ActionForm里面是ActionMessage,ActionMessage里面是key,key指向一个资源文件

 

 

引例:

 

环境配置:

web项目根目录:first_struts

     /first_struts

     /first_struts/JS

     /first_struts/pages login.jsp success.jsp fail.jsp

     /first_struts/pice

     /first_struts/WEB-INF : web.xml struts_config.xml

                    /WEB-INF/classes MessageResources.properties

                    /WEB-INF/lib

                    /WEB-INF/src

                             /src/yuchen.form.LoginAction.java

                             /src/yuchen.form.LoginForm.java

 

程序目标:

测试struts应用,用户进入登陆页面,当提交数据的时候,显示登陆成功页面

得到表单数据,如果用户输入的是root,那么提示不能用这个名字登陆,否则,登陆成功

用户登陆,加入登陆验证,用户名和密码不能为空,如果为空,流转到login.jsp,如果是root显示登陆失败

 

知识点:

1.使用资源文件,并将资源文件中的values显示在jsp页面上,只有在产生错误的情况下才会显示

为资源文件加入新的key-value:修改MessageResources.properties

struts-config.xml中加入标签

ActionFormvildate方法中new ActionErrorsActionMessage(key)对象

显示资源文件中的values:jsp页面中导入struts标签<%@taglib prefix="html" uri="/tags/struts-html" %> uriweb.xmlstruts-html对应的url 使用<html:errors>当发生错误的时候显示

2.加入表单验证功能

struts-config.xml中加入<input>如果产生错误,导入指定的url,允许表单验证validate="true"

ActionForm类中重写validate方法

 

jsp:

login.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"

    pageEncoding="ISO-8859-1"%>

<%@taglib prefix="html" uri="/tags/struts-html" %>

 

<!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=ISO-8859-1">

<title>Insert title here</title>

</head>

<body>

<html:errors/>

     <form action="/first-struts/login.do" method="post">

         userName: <input type="text" name="user" /><br>

         password: <input type="text" name="pwd" /><br>

         <input type="submit" />

     </form>

</body>

</html>

 

引用上面的fail.jsp and  success.jsp

 

修改struts-config.xml:

 

    <action-mappings>

        <action

             input="/pages/login.jsp"

             name="loginForm"

              scope="request"

              validate="true"

              path="/login"

            type="yuchen.form2.LoginAction">

              <forward name="success" path="/pages/success.jsp"/>

              <forward name="fail" path="/pages/fail.jsp"/>

   </action>

 

资源文件:

error.user=User name can not be empty

error.pwd=Password can not be empty

 

引用LoginAction.java

 

修改LoginForm.java:

添加validate方法

     public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {

         // TODO Auto-generated method stub

         ActionErrors errors=new ActionErrors();

         ActionMessage am=null;

         if(user==null||user.trim().length()==0){

              am=new ActionMessage("error.user");

              errors.add("user",am);

         }

         if(pwd==null||pwd.trim().length()==0||pwd.trim().length()<3){

              am=new ActionMessage("error.pwd");

              errors.add("pwd",am);

         }

        

         return errors;

     }

 

国际化:

1.什么是国际化?有什么用?

2.开发步骤

3.引例

 

什么是国际化?有什么用?

界面友好化,比如说,中国区域的打开网站,显示中文,美国区打开网站显示的是英文

 

开发步骤:

1.写个文本文件,在里面写key-value

2.使用工具转化,并改副名

3.重启应用程序

 

引例:

引用上面的例子,上面的例子当提示错误信息的时候显示的是英文,我们做国际化,让他可以显示中文

1.写个文本文件,在里面写key-value

tome.txt:

error.user=用户名不能为空

error.pwd=密码不能为空

 

2.使用工具转化,并改副名 jdk1.5 bin中的native2ascii 要转化的文件 转到哪个文件

MessageResources_zh.properties:

error.user=/u7528/u6237/u540d/u4e0d/u80fd/u4e3a/u7a7a

error.pwd=/u5bc6/u7801/u4e0d/u80fd/u4e3a/u7a7a

 

struts exception:

1.什么是struts exception:有什么用?

2.内容

3.引例

 

什么是struts error?有什么用?

struts异常是处理action发生的异常,使用的是资源文件输出异常信息

 

内容:

action两种情况产生的异常:

1.action还没有将数据传递到m层的时候就产生的异常

2.收到m层的结果后产生了异常,例如:数据库连接不正常,返回的结果不对等等

 

处理流程:

1.捕获异常

2.抛出异常,requestproessor接到这个异常

3.转给默认的异常处理器(也可以自己定义一个异常处理的类)

4.将处理的信息显示在一个jsp页面上

 

引例:

程序目标:

当用户输入root的时候,我们在action中抛出一个异常,将异常信息显示出来

程序逻辑:

1.action做校验

2.如果userroot,产生一个异常

3.抛出异常

4.Struts-config.xml中配置异常的声明

5.jsp显示异常信息

 

知识点:

 

login.jsp:

如果发生异常,显示异常信息,这个信息是在资源文件中定义的

<%@ page language="java" contentType="text/html; charset=utf-8"

    pageEncoding="utf-8"%>

<%@taglib prefix="html" uri="/tags/struts-html" %>

<!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>Insert title here</title>

</head>

<body>

     <html:errors />

     <form action="/yuchen-struts/login.do" method="post">

         userName: <input type="text"  name="user"/><br>

         password: <input type="password" name="pwd" />

         <input type="submit" />

     </form>

</body>

</html>

 

success.jsp:

<h1>success!</h1>

 

LoginAction.java:

package yuchen.exception;

 

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

 

import org.apache.struts.action.Action;

import org.apache.struts.action.ActionForm;

import org.apache.struts.action.ActionForward;

import org.apache.struts.action.ActionMapping;

 

public class LoginAction extends Action{

 

     @Override

     public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest

request, HttpServletResponse response) throws Exception {

         // TODO Auto-generated method stub

         LoginForm lf=(LoginForm)form;

         if("root".equals(lf.getUser())){

              throw new LoginException("erro");

         }

         return mapping.findForward("success");

     }

    

}

 

LoginForm.java:

package yuchen.exception;

 

import javax.servlet.http.HttpServletRequest;

 

import org.apache.struts.action.ActionErrors;

import org.apache.struts.action.ActionForm;

import org.apache.struts.action.ActionMapping;

 

public class LoginForm extends ActionForm{

 

     private String user;

     private String pwd;

    

     public LoginForm() {

        

     }

 

     public String getPwd() {

         return pwd;

     }

 

     public void setPwd(String pwd) {

         this.pwd = pwd;

     }

 

     public String getUser() {

         return user;

     }

 

     public void setUser(String user) {

         this.user = user;

     }

    

}

 

LoginException.java:

package yuchen.exception;

 

public class LoginException extends Exception {

     public LoginException(String message){

         super(message);

     }

}

 

struts-config.xml:

//声明ActionForm

    <form-beans>

     <form-bean

            name="loginForm"

            type="yuchen.exception.LoginForm"/>

 

//声明action and exception

        <action

             name="loginForm"

              scope="request"

              path="/login"

            type="yuchen.exception.LoginAction">

              <exception

            key="error.root"

            type="yuchen.exception.LoginException"

            path="/pages/login.jsp"/>

              <forward name="success" path="/pages/success.jsp"/>

         </action>

 

资源文件:error.root=You can not be a root!

 

动态form:

1.什么是动态form?有什么用?

2.语法

3.引例

 

什么是动态form?有什么用?

懒汉form,不用写ActionForm类了,直接在配置文件中声明,这样的好处在于如果表单的数量变更就不用再修改ActionForm类了,struts会根据配置文件自动生成代码,但是没有表单验证的功能了

 

语法:

修改struts-config.xml:

     <form-bean

            name="dyLoginForm"

            type="org.apache.struts.action.DynaActionForm">

         <form-property name="user" type="java.lang.String" />

         <form-property name="pwd" type="java.lang.String" />

     </form-bean>

DynaActionForm这个类是动态form类,声明表单的属性

action类这样写:

DynaActionForm df=(DynaActionForm)arg1;

df.get("参数");

 

引例:

程序目标:

判断用户名和密码,如果是yuchen,123显示成功页面,否则显示失败

程序逻辑:

1.login.jsp,success.jsp,fail.jsp

2.LoginAction.java

3.struts-config.xml form

 

login.jsp success.jsp fail.jsp

 

LoginAction.java:

package yuchen.dyloginform;

 

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

 

import org.apache.struts.action.Action;

import org.apache.struts.action.ActionForm;

import org.apache.struts.action.ActionForward;

import org.apache.struts.action.ActionMapping;

import org.apache.struts.action.DynaActionForm;

 

public class LoginAction extends Action{

 

     @Override

     public ActionForward execute(ActionMapping arg0, ActionForm arg1, HttpServletRequest

arg2, HttpServletResponse arg3) throws Exception {

         // TODO Auto-generated method stub

         DynaActionForm df=(DynaActionForm)arg1;

         String nextUrl;

         if(("yuchen".equals(df.get("user"))&&"123".equals(df.get("pwd")))||

("admin".equals(df.get("user"))&&"admin".equals(df.get("pwd")))){

              nextUrl="success";

         }else{

              nextUrl="fail";

         }

         return arg0.findForward(nextUrl);

     }

    

}

 

配置文件:

     <form-bean

            name="dyLoginForm"

            type="org.apache.struts.action.DynaActionForm">

         <form-property name="user" type="java.lang.String" />

         <form-property name="pwd" type="java.lang.String" />

     </form-bean>

 

    <action-mappings>

         <action

             name="dyLoginForm"

              scope="request"

              path="/login"

            type="yuchen.dyloginform.LoginAction">

              <forward name="success" path="/pages/success.jsp"/>

              <forward name="fail" path="/pages/fail.jsp"/>

   </action>

 
标题基于SpringBoot+Vue的学生交流互助平台研究AI更换标题第1章引言介绍学生交流互助平台的研究背景、意义、现状、方法与创新点。1.1研究背景与意义分析学生交流互助平台在当前教育环境下的需求及其重要性。1.2国内外研究现状综述国内外在学生交流互助平台方面的研究进展与实践应用。1.3研究方法与创新点概述本研究采用的方法论、技术路线及预期的创新成果。第2章相关理论阐述SpringBoot与Vue框架的理论基础及在学生交流互助平台中的应用。2.1SpringBoot框架概述介绍SpringBoot框架的核心思想、特点及优势。2.2Vue框架概述阐述Vue框架的基本原理、组件化开发思想及与前端的交互机制。2.3SpringBoot与Vue的整合应用探讨SpringBoot与Vue在学生交流互助平台中的整合方式及优势。第3章平台需求分析深入分析学生交流互助平台的功能需求、非功能需求及用户体验要求。3.1功能需求分析详细阐述平台的各项功能需求,如用户管理、信息交流、互助学习等。3.2非功能需求分析对平台的性能、安全性、可扩展性等非功能需求进行分析。3.3用户体验要求从用户角度出发,提出平台在易用性、美观性等方面的要求。第4章平台设计与实现具体描述学生交流互助平台的架构设计、功能实现及前后端交互细节。4.1平台架构设计给出平台的整体架构设计,包括前后端分离、微服务架构等思想的应用。4.2功能模块实现详细阐述各个功能模块的实现过程,如用户登录注册、信息发布与查看、在线交流等。4.3前后端交互细节介绍前后端数据交互的方式、接口设计及数据传输过程中的安全问题。第5章平台测试与优化对平台进行全面的测试,发现并解决潜在问题,同时进行优化以提高性能。5.1测试环境与方案介绍测试环境的搭建及所采用的测试方案,包括单元测试、集成测试等。5.2测试结果分析对测试结果进行详细分析,找出问题的根源并
内容概要:本文详细介绍了一个基于灰狼优化算法(GWO)优化的卷积双向长短期记忆神经网络(CNN-BiLSTM)融合注意力机制的多变量多步时间序列预测项目。该项目旨在解决传统时序预测方法难以捕捉非线性、复杂时序依赖关系的问题,通过融合CNN的空间特征提取、BiLSTM的时序建模能力及注意力机制的动态权重调节能力,实现对多变量多步时间序列的精准预测。项目不仅涵盖了数据预处理、模型构建与训练、性能评估,还包括了GUI界面的设计与实现。此外,文章还讨论了模型的部署、应用领域及其未来改进方向。 适合人群:具备一定编程基础,特别是对深度学习、时间序列预测及优化算法有一定了解的研发人员和数据科学家。 使用场景及目标:①用于智能电网负荷预测、金融市场多资产价格预测、环境气象多参数预报、智能制造设备状态监测与预测维护、交通流量预测与智慧交通管理、医疗健康多指标预测等领域;②提升多变量多步时间序列预测精度,优化资源调度和风险管控;③实现自动化超参数优化,降低人工调参成本,提高模型训练效率;④增强模型对复杂时序数据特征的学习能力,促进智能决策支持应用。 阅读建议:此资源不仅提供了详细的代码实现和模型架构解析,还深入探讨了模型优化和实际应用中的挑战与解决方案。因此,在学习过程中,建议结合理论与实践,逐步理解各个模块的功能和实现细节,并尝试在自己的项目中应用这些技术和方法。同时,注意数据预处理的重要性,合理设置模型参数与网络结构,控制多步预测误差传播,防范过拟合,规划计算资源与训练时间,关注模型的可解释性和透明度,以及持续更新与迭代模型,以适应数据分布的变化。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值