`
shukuiyan
  • 浏览: 413561 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

一个struts工程的创建过程及运行原理(续2)

阅读更多

2 表单验证的流程

login.jsp网页上,不输入姓名,直接单击submit按钮,会提示“请输入用户名”的信息。

当用户提交LoginForm表单时,请求路径为/login.do,服务器执行表单验证流程如下:

1Servlet容器在web.xml文件中寻找<url-pattern>属性为”*.do”<servlet-mapping>元素:

<servlet-mapping>

    <servlet-name>action</servlet-name>

    <url-pattern>*.do</url-pattern>

  </servlet-mapping>

2Servlet容器依据以上<servlet-mapping>元素的<servlet-name>属性action,在web.xml文件中寻找匹配的<servlet>元素:

<servlet-name>action</servlet-name>

    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>

3Servlet容器把请求转发给以上<servlet>元素指定的ActionServletActionServlet依据用户请求路径”/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属性为trueActionServlet调用LoginForm对象的validate()方法执行表单验证。

6LoginForm对象的validate()方法返回一个ActionErrors对象,里面包含一个

ActionMessage对象,这个ActionMessage对象中封装了错误消息,消息key

login.error.username”,在Resource Bundle中与之值匹配的消息文本为:

login.error.username=请输入用户名

(7) ActionServletLoginFormvalidate()方法返回的ActionErrors对象保存request范围内,然后根据<action>元素的input属性,把客户请求转发给login.jsp

8login.jsp<html:errors>标签从request范围内读取ActionErrors对象,再从ActionErrors对象中读取ActionMessage对象,把它包含的错误消息显示在网页上。

3 逻辑验证失败的流程

接下来在login.jspHTML表单中输入用户名为admin,然后单击submit按钮,当服务器端相应客户的请求时,验证流程如下:

1)重复以上(1------4

2ActionServlet调用LoginForm对象的validate()方法,这次validate()方法返回的ActionErrors对象中不包含任何ActionMessage对象,表示表单验证成功。

3ActionServlet查找loginAction实例是否存在,如果不存在就创建一个实例。然后调用LoginActionexecute()方法

4LoginActionexecute()方法先进行逻辑验证,由于没有通过逻辑验证,就创建了一个ActionMessage对象,这个ActionMessage对象封装了错误消息,消息key

login.error.badusername= 用户名不能为admin

execute()方法把ActionMessage对象保存在ActionMessages对象中,再把ActionMessages对象存放在request范围内。最后返回一个ActionForward对象,该对象包含的请求转发路径为<action>元素的input属性指定的login.jsp

5ActionServlet依据LoginAction返回的ActionForward对象,再把请求转发给login.jsp

6login.jsp<html:errors>标签从request范围内读取ActionMessages对象,再从ActionMessages对象中读取ActionMessage对象,把它包含的错误消息显示在网页上。

4 逻辑验证成功的流程

1)重复以上(1----3

2LoginActionexecute()方法先执行逻辑验证,这次通过了验证,然后执行相关的业务逻辑,最后调用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中)

4LoginActionexecute()方法然后把ActionForward对象返回给ActionServletActionServlet再把客户请求转发给login.jsp

5login.jsp<bean:message>标签从Resource Bundle中读取文本,把它们输出到网页上,最后生成动态网页。

分享到:
评论

相关推荐

    struts2 HelloWorld 例子工程包

    Struts2是一个强大的MVC(模型-视图-控制器)框架,广泛应用于Java Web开发中。这个"HelloWorld"例子工程包是初学者入门Struts2的绝佳起点,旨在帮助开发者理解并熟悉该框架的基本结构和工作原理。 首先,让我们...

    徒手配置Struts2

    ### 徒手配置Struts2的关键知识点 #### 一、徒手配置Struts2环境时需注意的关键事项 ...此外,通过深入理解配置文件的每一个元素,可以帮助开发者更好地掌握Struts2的工作原理,从而提高应用程序的开发效率和质量。

    Struts2 code jar+实现struts2步骤文档

    这个压缩包包含了核心库(core)的jar文件和一个实现Struts2工程的步骤文档,这对于初学者或者开发者来说是极其有价值的资源。 1. **Struts2核心库(Core Jars)**: - Struts2的核心库提供了框架的基本功能,包括...

    struts2.0环境配置

    在项目中创建一个新的Web工程,然后在web.xml中配置Struts2的核心过滤器。这通常包括以下代码: ```xml &lt;filter-name&gt;struts2 &lt;filter-class&gt;org.apache.struts2.dispatcher.ng.filter....

    struts2 学习重点笔记

    - **定义**:Struts2 是 Apache 组织提供的一个基于 MVC 架构模式的开源 Web 应用框架。 - **核心**:Struts2 的核心其实是 WebWork 2,它融合了 Struts 1 的一些优秀思想。 - **优势**:使用 Struts2 可以显著提高...

    struts2 代码学习 小工程

    本项目是Struts2的学习实践,通过一个小型工程来帮助理解Struts2的核心概念和工作原理。 1. **Struts2框架介绍**:Struts2是Apache软件基金会下的一个开源项目,它继承了Struts1的优点并解决了其不足,提供了一种...

    struts2的helloworld例子

    这个"struts2的helloworld例子"是为初学者准备的一个基础教程,旨在帮助理解Struts2框架的基本工作原理和配置过程。下面将详细阐述这个例子中的关键知识点。 首先,Struts2框架的核心是Action类,它是处理用户请求...

    实验3 Struts2的简单开发和配置

    通过实践一个简单的用户登录程序,加深对Struts2工作原理的理解,并能够独立完成Struts2项目的搭建与调试。 #### 实验背景 Struts2是一个基于MVC(Model-View-Controller)架构模式的开源框架,它简化了Web应用...

    hibernate+struts+css,能直接运行。

    标题中的“hibernate+struts+css”指的是一个基于Java技术栈的Web应用程序开发框架。...对于学习Java Web开发的初学者或者需要参考示例代码的开发者来说,这是一个非常有价值的资源,可以直接运行并理解其工作原理。

    Struts2 实例 HelloWorld

    在本章中,我们将深入理解如何通过一个简单的HelloWorld实例来启动和运行Struts2应用,同时了解其核心组件和配置过程。 首先,HelloWorld实例是初学者学习新框架时常见的入门教程。在本例中,它的目标是帮助读者对...

    struts2所有jar以及自带实例项目

    此外,还提供了一个名为"struts2-mailreader-2.0.11.1.war"的示例项目,它是一个具体的Struts2应用实例,可以帮助开发者更好地理解和学习如何在实践中使用Struts2框架。 首先,我们来深入理解Struts2的核心概念和...

    struts1.2.9 jar包及源码

    Struts 1.2.9 是一个非常经典的Java Web开发框架,由Apache软件基金会开发,主要用于构建基于MVC(Model-View-Controller)设计模式的Web应用程序。此框架的发布版本包括jar包和源码,方便开发者进行学习、调试和...

    利用felix和struts2实现osgi web

    Struts2是一个流行的MVC框架,用于构建Web应用的控制层。最新版本的Struts2(如2.1.8.1)开始支持与Felix OSGi的集成,使得开发者能在传统的Web开发环境中利用OSGi的模块化和动态部署特性,而无需大幅度改变开发...

    [web工程]集成struts2 mvc

    最后,提供的“demo”文件可能包含了一个简单的Struts2示例工程,你可以解压后运行并分析其结构,以加深对Struts2集成的理解。记得检查`src/main/java`、`src/main/resources`、`WebContent/WEB-INF`等关键目录,看...

    Struts2开发包struts2-blank-2.2.1

    总的来说,Struts2-blank-2.2.1开发包为Java web开发者提供了一个方便的起点,通过它可以快速设置开发环境,理解Struts2的工作原理,并开始编写基于Struts2的业务逻辑。这个版本也体现了Struts2的灵活性和扩展性,...

    Struts2文件动态上传和动态下载(可自动生成下载内容)

    Struts2是一个强大的MVC(模型-视图-控制器)...总之,这个项目为开发者提供了一个实践Struts2文件上传和动态下载功能的平台,通过学习和研究源代码,可以深入理解Struts2框架在这方面的工作原理,提升Web开发技能。

    struts1 开源项目研究

    Struts1是一个经典的开源MVC框架,由Apache软件基金会维护,它在Java Web开发领域有着广泛的应用。这个项目的研究将帮助我们深入理解Web应用程序的架构设计,以及如何通过框架简化开发流程。 首先,Struts1的核心是...

    Struts2 中文pdf

    10. **实战开发**:通过实例学习如何从零开始搭建一个Struts2项目,包括创建Maven工程、添加依赖、编写Action、配置Struts2以及部署和运行。 这个中文PDF文档会提供详尽的解释和示例代码,帮助开发者快速掌握Struts...

Global site tag (gtag.js) - Google Analytics