2 表单验证的流程
在login.jsp网页上,不输入姓名,直接单击submit按钮,会提示“请输入用户名”的信息。
当用户提交LoginForm表单时,请求路径为/login.do,服务器执行表单验证流程如下:
(1)Servlet容器在web.xml文件中寻找<url-pattern>属性为”*.do”的<servlet-mapping>元素:
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
(2)Servlet容器依据以上<servlet-mapping>元素的<servlet-name>属性action,在web.xml文件中寻找匹配的<servlet>元素:
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
(3)Servlet容器把请求转发给以上<servlet>元素指定的ActionServlet,ActionServlet依据用户请求路径”/login.do”,在Struts配置文件中检索path属性为”/login”的<action>元素:
<action-mappings >
<action
attribute="loginForm"
input="/form/login.jsp"
name="loginForm"
path="/login"
scope="request"
type="yan.struts.action.LoginAction">
<set-property property="cancellable" value="true" />
<forward name="login-success" path="/success.jsp" />
</action>
</action-mappings>
(更确切的说,ActionServlet此时检索的是ActionMapping对象,而不是直接访问Struts配置文件中的action元素,因为在ActionServelt初始化的时候,会加载Struts配置文件,把各种配置信息保存在相应的配置类的实例中,例如<action>元素的配置信息存放在ActionMapping对象中).
(4)ActionServlet根据<action>元素的name属性,创建一个LoginForm对象,把客户提交的表单数据传给LoginForm对象,再把LoginForm对象保存在<action>元素的scope属性指定的request范围内。
(5)由于<action>元素的alidate属性为true,ActionServlet调用LoginForm对象的validate()方法执行表单验证。
(6)LoginForm对象的validate()方法返回一个ActionErrors对象,里面包含一个
ActionMessage对象,这个ActionMessage对象中封装了错误消息,消息key为
“login.error.username”,在Resource Bundle中与之值匹配的消息文本为:
login.error.username=请输入用户名
(7) ActionServlet把LoginForm的validate()方法返回的ActionErrors对象保存request范围内,然后根据<action>元素的input属性,把客户请求转发给login.jsp。
(8)login.jsp的<html:errors>标签从request范围内读取ActionErrors对象,再从ActionErrors对象中读取ActionMessage对象,把它包含的错误消息显示在网页上。
3 逻辑验证失败的流程
接下来在login.jsp的HTML表单中输入用户名为admin,然后单击submit按钮,当服务器端相应客户的请求时,验证流程如下:
(1)重复以上(1)------(4)
(2)ActionServlet调用LoginForm对象的validate()方法,这次validate()方法返回的ActionErrors对象中不包含任何ActionMessage对象,表示表单验证成功。
(3)ActionServlet查找loginAction实例是否存在,如果不存在就创建一个实例。然后调用LoginAction的execute()方法
(4)LoginAction的execute()方法先进行逻辑验证,由于没有通过逻辑验证,就创建了一个ActionMessage对象,这个ActionMessage对象封装了错误消息,消息key为
login.error.badusername= 用户名不能为admin
execute()方法把ActionMessage对象保存在ActionMessages对象中,再把ActionMessages对象存放在request范围内。最后返回一个ActionForward对象,该对象包含的请求转发路径为<action>元素的input属性指定的login.jsp。
(5)ActionServlet依据LoginAction返回的ActionForward对象,再把请求转发给login.jsp,
(6)login.jsp的<html:errors>标签从request范围内读取ActionMessages对象,再从ActionMessages对象中读取ActionMessage对象,把它包含的错误消息显示在网页上。
4 逻辑验证成功的流程
(1)重复以上(1)----(3)
(2)LoginAction的execute()方法先执行逻辑验证,这次通过了验证,然后执行相关的业务逻辑,最后调用ActionMapping.findForward()方法,参数为”login-success”:
return mapping.findForward("login-success");
(3)ActionMapping.findForward()方法从<action>元素中寻找name属性为“login-success”的<forward>子元素,然后返回与之对应的ActionForward对象,它代表的请求转发路径为
“/success.jsp”。
(更确切的说,ActionMapping从本身包含的HashMap中查找name属性为“login-success”的ActionForward对象。在ActionServlet初始化时会加载struts配置文件,把<action>元素的配置信息存放在ActionMapping对象中。<action>元素中可以包含多个<forward>子元素,每个<forward>子元素的配置信息存放在一个ActionForward对象中,这些ActionForward对象存放在ActionMapping对象的HashMap中)
(4)LoginAction的execute()方法然后把ActionForward对象返回给ActionServlet,ActionServlet再把客户请求转发给login.jsp
(5)login.jsp的<bean:message>标签从Resource Bundle中读取文本,把它们输出到网页上,最后生成动态网页。
分享到:
相关推荐
Struts2是一个强大的MVC(模型-视图-控制器)框架,广泛应用于Java Web开发中。这个"HelloWorld"例子工程包是初学者入门Struts2的绝佳起点,旨在帮助开发者理解并熟悉该框架的基本结构和工作原理。 首先,让我们...
### 徒手配置Struts2的关键知识点 #### 一、徒手配置Struts2环境时需注意的关键事项 ...此外,通过深入理解配置文件的每一个元素,可以帮助开发者更好地掌握Struts2的工作原理,从而提高应用程序的开发效率和质量。
这个压缩包包含了核心库(core)的jar文件和一个实现Struts2工程的步骤文档,这对于初学者或者开发者来说是极其有价值的资源。 1. **Struts2核心库(Core Jars)**: - Struts2的核心库提供了框架的基本功能,包括...
在项目中创建一个新的Web工程,然后在web.xml中配置Struts2的核心过滤器。这通常包括以下代码: ```xml <filter-name>struts2 <filter-class>org.apache.struts2.dispatcher.ng.filter....
- **定义**:Struts2 是 Apache 组织提供的一个基于 MVC 架构模式的开源 Web 应用框架。 - **核心**:Struts2 的核心其实是 WebWork 2,它融合了 Struts 1 的一些优秀思想。 - **优势**:使用 Struts2 可以显著提高...
本项目是Struts2的学习实践,通过一个小型工程来帮助理解Struts2的核心概念和工作原理。 1. **Struts2框架介绍**:Struts2是Apache软件基金会下的一个开源项目,它继承了Struts1的优点并解决了其不足,提供了一种...
这个"struts2的helloworld例子"是为初学者准备的一个基础教程,旨在帮助理解Struts2框架的基本工作原理和配置过程。下面将详细阐述这个例子中的关键知识点。 首先,Struts2框架的核心是Action类,它是处理用户请求...
通过实践一个简单的用户登录程序,加深对Struts2工作原理的理解,并能够独立完成Struts2项目的搭建与调试。 #### 实验背景 Struts2是一个基于MVC(Model-View-Controller)架构模式的开源框架,它简化了Web应用...
标题中的“hibernate+struts+css”指的是一个基于Java技术栈的Web应用程序开发框架。...对于学习Java Web开发的初学者或者需要参考示例代码的开发者来说,这是一个非常有价值的资源,可以直接运行并理解其工作原理。
在本章中,我们将深入理解如何通过一个简单的HelloWorld实例来启动和运行Struts2应用,同时了解其核心组件和配置过程。 首先,HelloWorld实例是初学者学习新框架时常见的入门教程。在本例中,它的目标是帮助读者对...
此外,还提供了一个名为"struts2-mailreader-2.0.11.1.war"的示例项目,它是一个具体的Struts2应用实例,可以帮助开发者更好地理解和学习如何在实践中使用Struts2框架。 首先,我们来深入理解Struts2的核心概念和...
Struts 1.2.9 是一个非常经典的Java Web开发框架,由Apache软件基金会开发,主要用于构建基于MVC(Model-View-Controller)设计模式的Web应用程序。此框架的发布版本包括jar包和源码,方便开发者进行学习、调试和...
Struts2是一个流行的MVC框架,用于构建Web应用的控制层。最新版本的Struts2(如2.1.8.1)开始支持与Felix OSGi的集成,使得开发者能在传统的Web开发环境中利用OSGi的模块化和动态部署特性,而无需大幅度改变开发...
最后,提供的“demo”文件可能包含了一个简单的Struts2示例工程,你可以解压后运行并分析其结构,以加深对Struts2集成的理解。记得检查`src/main/java`、`src/main/resources`、`WebContent/WEB-INF`等关键目录,看...
总的来说,Struts2-blank-2.2.1开发包为Java web开发者提供了一个方便的起点,通过它可以快速设置开发环境,理解Struts2的工作原理,并开始编写基于Struts2的业务逻辑。这个版本也体现了Struts2的灵活性和扩展性,...
Struts2是一个强大的MVC(模型-视图-控制器)...总之,这个项目为开发者提供了一个实践Struts2文件上传和动态下载功能的平台,通过学习和研究源代码,可以深入理解Struts2框架在这方面的工作原理,提升Web开发技能。
Struts1是一个经典的开源MVC框架,由Apache软件基金会维护,它在Java Web开发领域有着广泛的应用。这个项目的研究将帮助我们深入理解Web应用程序的架构设计,以及如何通过框架简化开发流程。 首先,Struts1的核心是...
10. **实战开发**:通过实例学习如何从零开始搭建一个Struts2项目,包括创建Maven工程、添加依赖、编写Action、配置Struts2以及部署和运行。 这个中文PDF文档会提供详尽的解释和示例代码,帮助开发者快速掌握Struts...