5struts控制器组件
Struts核心组件及运行机制
如果<action>中的validate属性为true,调 用FormBean的validatte()方法
创建ActionForm
创建一个与HTML中表单一一对应的 JavaBean;
JavaBean继承类; 重写reset()方法; 重写validate()方法;
Validate()方法
回顾
什么是MVC? Struts是怎么去实现MVC的? Struts基本组件有那些? 基本组件之间有什么关系? Struts标签的运行机制是什么? Struts标签库的分类; 什么时候用什么标签;
重点
了解Struts的核心组件及运行机制 掌握如果扩展ActionServlet和RequestProcessor 了解DTO对象 掌握ActionForm的配置和使用; 掌握ActionForm与Action的邦定; 掌握ActionForm的数据验证; 掌握ActionForm的动态现实;
是否适合程序的要求; 返回一个ActionErrors对象; ActionErrors对象是一个MAP集合,存放的全都是
ActionMessage对象; ActionMessage对象的错误提示配合Resource bundle文
件使用; 如果ActionErrors集合里没有ActionMessage对象,则通过
表示层
控制层
逻辑层
数据库
对应的实现组件
与控制器组件相关的类主要包括: – ActionServlet:Struts架构的中央控制器,用于接受浏览器客户端用 户请求以及状态改变,并依据处理结果选择表示层不同视图的重定 向。 – RequestProcessor:包含了Struts控制器在处理servlet请求时所遵循的 控制逻辑。 – Action:控制器的一部分,用于模型交互,执行状态改变或状态查询, 以及告诉ActionServlet 下一个选择的视图。 – ActionForm:用于保存于表单数据相关的状态数据的改变。 – ActionMapping:用于控制在状态数据改变后的事件处理的方式。 – ActionForward:用户指向或者视图选择。
Struts框架详细分析
Struts框架详细分析Struts框架是一个开源的Java Web应用程序框架,用于构建基于MVC(Model-View-Controller)设计模式的Web应用程序。
它提供了一种结构化的方式来组织和管理Web应用程序的代码,使得开发人员可以更加高效地开发和维护应用程序。
本文将详细分析Struts框架的各个组成部分以及其工作原理。
一、框架概述Struts框架的核心思想是将应用程序分解为不同的层次:模型层(Model)、视图层(View)和控制层(Controller)。
模型层负责处理业务逻辑和数据存取,视图层负责展示用户界面,控制层负责接收用户的请求并调度合适的模型层处理。
通过这种分层的方式,Struts框架可以实现代码的解耦和重用。
二、组成部分1. 控制器(Controller)控制器是Struts框架的核心组件,负责接收用户请求并将其调度到合适的处理模块。
在Struts框架中,控制器通常由一个Servlet实现,称为ActionServlet。
ActionServlet会根据用户请求中的URL路径选择合适的Action类来处理请求。
2. 动作类(Action)动作类是处理用户请求的核心业务逻辑单元,它负责与模型层进行交互,并根据请求的内容进行相应的处理。
Struts框架提供了一个基本的Action类,称为ActionSupport,开发人员可以继承该类并实现自己的业务逻辑。
3. 视图(View)视图用于展示用户界面,通常是一个JSP页面。
在Struts框架中,视图可以通过标签库和表达式语言与模型层进行交互,动态地展示数据和接收用户输入。
4. 模型(Model)模型层主要负责处理业务逻辑和数据存取。
在Struts框架中,开发人员可以选择使用传统的JavaBean作为模型层,也可以使用更高级的框架,如Hibernate或MyBatis。
5. 配置文件Struts框架使用配置文件来管理应用程序的各个组件之间的关系。
Struts新手详解【5】_struts控制器DispatchAction
Struts旅程(五)struts控制器DispatchAction上篇演示了struts框架的由来,从而体现struts框架优点。
Struts中的表单处理器为ActionForm,而struts中的控制器主要是Action,以及DispatchAction控制器等。
Action在struts中,所有的用户都会经过ActionServlet的处理,而实际的工作是交给Action对象来处理的,ActionServlet可以从配置文件中创建ActionMapping对象,从ActionMapping对象中找到对应使用的Action,然后将用户请求转交给Action。
对Struts一个ActionMapping只能生成一个Action对象,当用户发起请求的时候会检查所需要的Action对象是否存在,如果不存在就会生成一个Action对象,在以后的处理过程中使用这个对象。
当我们使用Action的时候需要继承arg.apache.struts.action.Action这个类,在子类中加入所需要的业务逻辑处理,这些子类会返回ActionForward 对象,ActionServlet接受这个对象,把页面转发到指定页面,从而把用户请求的结果发送到对应的页面。
我们在struts-config.xml中进行配置。
配置的主要属性如下:(1)path属性:访问Action的URL地址,当用户请求路径和URL 匹配时,ActionServlet会把这个用户请求发送给Action处理。
(2)type属性:指定处理请求的Action对应的类,需要写类文件的包路径。
(3)name属性:指定我们的Action用到的ActionForm名字,这个ActionForm必须是在<form-beans>中定义过的。
(4)scope属性:指定ActionForm的使用范围,缺省值为session范围。
(5)input属性:指定表单验证出错的时候转向页面。
J2EE项目实训Struts框架技术——第7章 Struts业务控制器组件及应用(第1部分)
第7章Struts业务控制器组件及应用(第1/2部分)Struts框架系统在控制层的架构设计方面采用两种不同形式的控制器组件,分别为前端控制器ActionServlet和后端业务调度控制器Action组件。
而后端业务调度控制器Action组件其实也是J2EE“蓝图”(BluePrint)中所给定的基于Web Servlet组件技术的业务请求控制器架构模式的具体应用。
业务请求控制器Action组件主要完成前端表示层中的各个页面请求预处理和对后端的模型层组件(JavaBean和各种Enterprise JavaBean组件)的调度等方面的功能,同时也负责与业务处理和控制流有关的请求处理,同时将处理后的结果正确地派发到各个对应的表示层JSP页面中;业务请求控制器不仅与前端控制器有明显的分工——前端控制器主要侧重于业务请求处理之前的预处理,而业务请求控制器侧重于业务功能实现时的调度;而且一般还需要针对每个业务功能模块提供一个特定的业务请求控制器组件。
因此,前端控制器组件一般为全局控制器组件,而业务请求控制器组件一般为局部控制器组件。
下面将为读者重点介绍在Struts框架中承担后端业务调度控制器的各种组件——包括普通的Action组件、DispatchAction组件的工作机制,以及这些组件在项目中的实际应用。
1.1Struts 框架Action及DispatchAction组件Struts 框架中的Action组件类作为业务调度控制器而完成实际的业务功能请求的控制和管理,并根据请求的类型而实际调用特定的业务功能组件以完成最终的处理。
开发者在一般的应用开发状况下,只需要对Struts 框架中的标准Action组件类进行继承和扩展、并重写其中的execute() 方法,然后在struts-config.xml配置文件中加以配置定义(通过<action>标签)。
但采用常规的对Action组件类进行扩展时,在某些应用系统的开发中,会导致出现大量的Action组件的子类存在而使得项目变得非常臃肿,此时可以应用本节中将要介绍的DispatchAction组件类。
struts的工作原理
struts的工作原理Struts是一个基于Java技术的开源Web应用框架,它的工作原理主要包括以下几个方面:1. 请求处理流程:当客户端发送一个HTTP请求时,Struts框架会先由Servlet容器接收请求并将其传递给Struts的核心控制器DispatcherServlet。
DispatcherServlet负责将请求分发给相应的Action类进行处理。
2. 控制器:Struts的控制器是一个Servlet,它通过配置文件(struts-config.xml)定义了请求的处理方式。
在接收到请求后,控制器根据配置文件中的映射关系,找到对应的Action,并将请求转发给该Action处理。
3. Action处理:Action是Struts中的核心组件,它是一个POJO(Plain Old Java Object),负责接收请求的数据并调用业务逻辑处理。
Action可以通过实现Action接口或继承ActionSupport类来定义相应的处理方法。
4. 视图解析:在Action处理完成后,会返回一个逻辑视图名(logical view name),它表示了请求处理的结果。
Struts框架将根据视图配置文件(struts-config.xml)中的映射关系,找到对应的视图解析器(View Resolver)来解析逻辑视图名,并生成具体的视图页面。
5. 视图渲染:视图渲染是将模型数据填充到具体的视图页面中的过程。
Struts框架支持多种视图技术,如JSP、FreeMarker等。
视图模板通常包含了动态生成的HTML代码以及与模型数据相关的标签或脚本。
6. 响应输出:最后,Struts框架将渲染好的视图页面作为HTTP响应返回给客户端浏览器,并结束请求处理流程。
总结起来,Struts框架的工作原理是通过控制器分发请求给对应的Action进行处理,再将处理结果交给视图解析器解析并渲染成最终的视图页面,最后将视图页面作为HTTP响应返回给客户端。
J2EE项目实训Struts框架技术——第6章 Struts前端控制器组件及应用(第2部分)
第6章Struts前端控制器组件及应用(第2/2部分)1.1.1利用Filter组件保护特定的JSP页面由于采用对RequestProcesso类进行继承扩展时,只能够拦截保护以“*.do”形式的URL地址的请求。
而如果访问者直接对Web应用系统中的某个*.jsp页面文件直接进行请求,该CheckUserLoginRequestProcessor类将不会被触发。
因此,在本BBS论坛项目中还设计了一个过滤器Filter组件,并利用该Filter组件来保护特定的JSP页面。
1、添加一个过滤器Filter组件在项目中添加一个过滤器Filter组件,该过滤器Filter组件类名称为TransferJSPToAction 、并且实现javax.servlet.Filter接口,而包名称选择为com.px1987.webbbs.filter。
最后的输入结果请见图6.9所示。
图6.9添加一个过滤器Filter组件的图示2、编程该过滤器Filter组件类每当访问者如果直接对某个*.jsp页面文件直接请求访问时,在滤器Filter组件类TransferJSPToAction中直接跳转到系统登陆功能的页面,因为本过滤器监控的URL地址是*.jsp。
也就是用户只要对某个JSP页面发出直接的访问请求,将触发该过滤器组件类中的doFilter方法的执行。
最后的功能实现的结果代码请见【例6-6】所示,并请注意其中的黑体部分的代码。
【例6-6】TransferJSPToAction过滤器Filter组件类的代码示例package com.px1987.webbbs.filter;import java.io.IOException;import javax.servlet.*;public class TransferJSPToAction implements Filter {public void destroy() {}public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {String targetPage=null;RequestDispatcher oneRequestDispatcher=null;HttpServletRequest httprequest = (HttpServletRequest)request;targetPage="/showNoLoginError.do"; //直接跳转到系统登陆功能的页面oneRequestDispatcher=request.getRequestDispatcher(targetPage);oneRequestDispatcher.forward(request, response);return;}public void init(FilterConfig arg0) throws ServletException {}}3、部署该过滤器Filter组件类由于Filter组件类是由Servlet容器进行加载的,因此需要将本过滤器Filter组件类TransferJSPToAction在web.xml文件中进行部署。
Struts5
7/35
5.1.2 RequestProcessor类
在Struts1.1之前的版本中,ActionServlet类本身包含了很多 处理请求的代码,从1.1 开始,多数功能被移到 org.apache.struts.action.RequestProcessor类中,以减轻 ActionServlet类的负担. 对于多应用模块的struts应用,每个子模块都有各自的 RequestProcessor实例. 在ActionServlet 的process()方法中,一旦选择正确的子应 用模块,就会调用子应用模块的RequestProcessor实例的 process()方法来处理请求,在ActionServlet调用这个方法时, 会把当前的request和response对象传给它.
10/35
孙 丰 伟
public class UserLoginAction extends Action { public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { UserLoginForm userLoginForm = (UserLoginForm) form; if(userLoginForm.getUserName().equals("admin") && userLoginForm.getPassword().equals("admin")) { request.setAttribute("userName", userLoginForm.getUserName()); return mapping.findForward("success"); } // end if else { return mapping.findForward("failed"); } //end else } // method execute }
第3章 Struts核心组件介绍
Proprietary and Confidential Information of Longshine Technology
Thank You
朗 新 科 技 日开天霁,朗而新之
中国
Proprietary and Confidential Information of Longshine Technology
逻辑错误在Action类中的execute()方法中处理
17
Proprietary and Confidential Information of Longshine Technology
四、ActionForm类及异常处理
•ActionErrors类和ActionError类 Struts框架中包含两个非常重要的类,一个是ActionErrors 类一个是ActionError类,两个类的关系是继承关系
4
Proprietary and Confidential Information of Longshine Technology
一、控制器组件
ActionServlet类 Struts框架中的ActionServlet只会产生一个对象,由他来 接受所有客户的请求信息,在web.xml中做如下配置: <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </sevlet-mapping>
18
Proprietary and Confidential Information of Longshine Technology
Struts教程
Struts教程本教程将介绍Struts的基本概念和核心组件,以及如何使用Struts开发Web应用程序。
一、Struts概述1. 模型(Model):模型表示应用程序的数据和业务逻辑。
在Struts中,模型通常由Java类组成,用于处理数据操作和业务逻辑的实现。
2. 视图(View):视图是用户界面的呈现,通常是JSP(JavaServer Pages)文件。
它负责将数据呈现给用户,并处理用户输入。
3. 控制器(Controller):控制器负责处理用户请求,并将其分派给适当的模型和视图。
在Struts中,控制器由Action类实现,它根据请求的URL路径和参数执行相应的业务逻辑。
二、Struts的基本原理1.客户端发送HTTP请求到服务器。
2. 服务器的Servlet容器接收到请求,并将其分派给Struts的ActionServlet。
3. ActionServlet根据请求的URL路径找到相应的Action类。
4. Action类执行业务逻辑,并将业务结果存储在模型中。
5. Action类调用适当的视图呈现模型数据。
6.视图生成HTML页面并将其返回给客户端。
三、Struts的核心组件1. Action:Action是一个Java类,用于处理用户请求和执行业务逻辑。
它包含了不同的方法,如初始化、数据校验和处理逻辑等。
2. ActionForm:ActionForm是一个JavaBean,用于封装和验证用户输入的数据。
它通常与JSP页面的表单相对应,并且可以通过XML配置文件进行验证。
3. ActionMapping:ActionMapping用于将URL路径和参数映射到正确的Action类。
通过配置XML文件,开发人员可以指定不同URL路径的映射关系。
4. ActionServlet:ActionServlet是整个框架的核心控制器,负责接收客户端请求并将其分派给正确的Action类。
5. Struts配置文件:Struts配置文件是一个XML文件,用于配置整个应用程序的所有映射关系和其他设置。
Struts核心组件介绍
创建ActionForward对象两种方法
创建一个新的ActionForward对象实例 new ActionForward(“ok”,”ok.jsp”,true);
调用方法获得ActionForward对象 mapping.findForward(“error”);
<action> …… <forward name="ok" path="/ok.jsp" /> <forward name="error" path="/error.jsp" /> </action>
它来接受所有客户的请求信息,所以在web.xml文件 中作出以下配置。
…… <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> ……
Action类
<action attribute="loginForm" name="loginForm" scope="request" validate="true" path="/login" input="/login.jsp" type=“org.struts.action.LoginAction"> <forward name="ok" path="/ok.jsp" /> <forward name="error" path="/error.jsp" /> </action>
J2EE项目实训Struts框架技术——第6章 Struts前端控制器组件及应用(第1部分)
第6章Struts前端控制器组件及应用(第1/2部分)前端控制器模式是J2EE“蓝图”(BluePrint)中所给定的一种常见的系统架构模式,通过应用前端控制器模式能够为应用系统提供集中式控制和管理功能、并对所有的请求进行统一处理。
因为如果应用系统中没有这种集中式控制和管理的模块或控制的机制,将导致每个不同的系统服务都需要进行单独的视图处理,而出现重复性的代码、并致使系统开发代价提高;同时,如果没有一个固定的模块来管理各个视图组件之间的关联关系,致使其浏览功能下放于每个不同的视图组件中,最终必将降低应用系统的可维护性。
在Struts框架中所提供的ActionServlet组件,其实是J2EE平台中的前端控制器设计模式的具体应用。
通过提供ActionServlet组件来控制和协调来自不同用户的多个不同的请求以实现集中式控制和管理,并能够提供各种系统级的服务——包括内容提取、视图管理和浏览等方面的功能。
本章主要介绍在Struts框架中承担前端控制器的各种组件——包括ActionServlet组件、RequestProcessor组件和插件(PlugIn)的工作机制,以及这些组件在项目中的实际应用;同时也为读者介绍如何实现对Struts框架进行功能扩展的各种实现方法。
1.1ActionServlet组件及应用在J2EE平台的应用系统开发中,前端控制器一般是由Servlet组件承担的,并且可以为全局(整个系统只提供一个控制器组件)和局部前端控制器(每个模块都提供有自己的控制器组件、并且映射至不同的系统服务)。
而在Struts框架中的ActionServlet组件属于全局前端控制器组件。
全局前端控制器组件需要在应用系统的web.xml中加以部署定义,当客户端产生出某种形式(在Struts框架中的应用系统中,一般为*.do)的请求时,容器都要读取web.xml 配置文件中的<url-pattern>以便判断用户对资源的访问方式,并将请求分发到对应的业务控制器组件中。
struts的工作原理
struts的工作原理Struts是一种基于Java的开源Web应用程序开发框架,它提供了一种模型-视图-控制器(MVC)的架构模式,用于帮助开发人员构建灵活、可维护和可扩展的Web应用程序。
Struts框架的核心是一个控制器组件,它通过接收和处理用户请求来协调模型和视图之间的交互。
下面将详细介绍Struts的工作原理,以便更好地理解这个框架的内部机制。
1. 请求的接收:当用户在浏览器中发起一个HTTP请求时,该请求首先到达Web服务器。
Web 服务器将请求发送给Struts框架的核心控制器组件,即ActionServlet。
ActionServlet是一个单例对象,负责处理所有的用户请求。
2. 请求的路由:ActionServlet根据请求的URL路径和配置文件中的映射规则,将请求路由到相应的Action类。
Action类是Struts框架中的控制器组件,负责处理特定类型的请求。
3. Action的执行:一旦请求被路由到相应的Action类,Action类的执行过程开始。
Action类通常包含一个或多个处理方法(也称为Action方法),用于执行特定的业务逻辑。
在执行Action方法之前,Struts框架会自动将请求参数绑定到Action类的属性上。
4. 业务逻辑的处理:在Action方法中,开发人员可以编写业务逻辑代码,例如从数据库中检索数据、处理用户输入、执行计算等。
Action方法可以返回一个结果代码,用于指示下一步应该执行哪个视图。
5. 视图的选择:根据Action方法的返回结果代码,Struts框架将选择相应的视图来呈现给用户。
视图通常是一个JSP页面,用于生成动态的HTML内容,也可以是一个PDF文档、一个XML文件等。
6. 视图的渲染:一旦选择了视图,Struts框架将通过请求转发将控制权交给视图组件。
视图组件负责使用模型中的数据来生成最终的响应内容。
在JSP页面中,可以使用Struts标签库来访问Action类中的属性和方法。
struts框架的原理和应用
Struts是一个基于Java语言的开源Web应用程序框架,由Apache软件基金会开发和维护。
Struts框架基于MVC(模型-视图-控制器)设计模式,为构建企业级Java Web应用程序提供了一种简化和标准化的方法,使开发人员能够更加轻松地进行Web应用程序的设计和构建。
1. Struts框架的原理:Struts的工作原理主要是基于以下几个组件:* 控制器(ActionServlet):控制器是Struts框架的核心,负责接收浏览器发送的HTTP请求,根据请求调度处理程序,处理完请求后将结果返回给视图层。
* Action类:代表了一个具体的业务处理操作,负责处理来自用户的请求并响应。
每个Action类都需要继承框架提供的基本Action类,然后根据需求实现具体的业务逻辑。
* 配置文件(struts-config.xml):配置文件描述了Action对象、表单对象以及其他相关配置信息,例如URL映射关系、转发规则等。
控制器会根据配置文件里的信息执行相应的操作。
* 表单Bean(FormBean):表示Web页面提交表单的数据封装,用于在视图层和业务逻辑之间传递数据。
它们通常继承自框架提供的基本FormBean类,并定义表单中需要的属性和验证方法。
* 视图(JSP页面):视图层负责呈现Web应用程序的用户界面,通常使用JSP页面来实现。
JSP页面可以利用Struts自定义标签库(如:logic、html、bean等),方便地创建动态Web内容。
* Struts框架的应用:由于Struts框架简化了Web应用程序的开发过程且具有较高的稳定性和可扩展性,因此被广泛应用于企业级Java Web应用程序的开发。
例如在线商城、内容管理系统、企业信息管理系统等都可以使用Struts框架构建。
Struts框架的主要优点:* 结构清晰:基于MVC设计模式,将程序结构化为模型、视图和控制器三个部分,有利于代码的组织和维护。
第4章 Struts核心组件及运行机制
Action组件
• org.apache.struts.actions.Action类是Struts框架包的 核心类之一,用于与模型进行交互,执行状态改 变或状态查询,以及告诉ActionServlet下一个要跳 转的视图。控制器会调用Action类的execute()方法 处理用户请求,Action类中execute()方法的源码如 下:
7
ActionForm组件
• 通过编写org.apache.struts.action.ActionForm类的子 类,用于从一个或者多个HTML表单中获取数据并 将它传递给Action类 • ActionForm的一个属性与HTML表单一个数据域对应 • ActionForm类需要符合JavaBean规范,因此要在自 定义的ActionForm子类中为每个属性定义对应的set 和get方法 • 如果需要使用Struts框架提供的可配置自动数据验 证功能,还必须在自定义的ActionForm子类中重写 validate()方法
14
编写Struts程序的步骤
• 1、新建一个Web项目名称为strutsdemo,假设位 于d:\workspace\strutsdemo • 2、复制需要的Struts框架包到WEB-INF/lib目录,将 Struts解压后的lib目录中的所有包考到应用的 /WEB-INF/lib
– struts.jar、antlr.jar、commons-beanutils.jar、 commons-digester.jar、commons-logging.jar、 commons-validator.jar、jakarta-oro.jar和commons-fileupload.jar
…… getters and setters
struts的工作原理
struts的工作原理Struts是一个基于Java的开源MVC框架,用于构建Web应用程序。
它提供了一种将业务逻辑、数据访问和用户界面分离的方式,以提高应用程序的可维护性和可扩展性。
在本文中,我们将详细介绍Struts的工作原理,包括其核心组件、请求处理流程和数据流动。
一、核心组件1. 控制器(Controller):Struts的控制器是一个Servlet,它充当了整个框架的核心。
当用户发起请求时,控制器负责接收请求并将其路由到相应的处理程序。
2. 动作(Action):动作是一个Java类,用于处理具体的业务逻辑。
每个动作都实现了Action接口,并重写了execute()方法。
控制器通过配置文件将请求映射到相应的动作。
3. 表单(Form):表单用于封装用户提交的数据。
每个表单都是一个JavaBean,它包含了与用户界面相关的属性和验证规则。
表单的数据由控制器传递给相应的动作进行处理。
4. 视图(View):视图负责展示数据给用户。
在Struts中,通常使用JSP作为视图技术。
动作处理完数据后,将数据存储在请求的属性中,并将请求转发给相应的JSP页面进行展示。
5. 拦截器(Interceptor):拦截器用于在请求处理的不同阶段执行一些共享的任务,如身份验证、日志记录等。
拦截器可以在控制器和动作之间进行配置,以实现特定的功能。
二、请求处理流程1. 用户发起请求:用户在浏览器中输入URL或点击链接,向服务器发送请求。
2. 控制器接收请求:服务器接收到请求后,将其交给Struts的控制器。
3. 控制器路由请求:控制器根据配置文件将请求路由到相应的动作。
4. 动作处理请求:动作接收到请求后,根据业务逻辑进行处理。
它可以从请求中获取表单数据,并执行相应的操作。
5. 动作返回结果:动作处理完请求后,将结果存储在请求的属性中,并将请求转发给相应的JSP页面。
6. 视图展示数据:JSP页面接收到请求后,从请求的属性中获取数据,并将其展示给用户。
struts的工作流程
struts的工作流程Struts的工作流程Struts是一个开源的Java Web应用程序框架,它的工作流程是一个基于MVC设计模式的过程。
本文将详细介绍Struts的工作流程,以帮助读者更好地理解和使用该框架。
1. 控制器层Struts的工作流程始于控制器层,它负责接收用户的请求并进行处理。
控制器层主要由ActionServlet组成,它是Struts框架的核心控制器。
当用户发起请求时,ActionServlet首先接收到请求,并根据配置文件中的映射规则将请求分发给相应的Action处理。
2. Action层Action层是Struts框架中的核心处理逻辑层。
当ActionServlet将请求分发给相应的Action后,Action会根据请求的类型和参数进行相应的处理。
Action可以从请求中获取用户提交的数据,并进行验证、处理和转换。
在处理完请求后,Action会将处理结果封装成一个ActionForm对象,并将控制权交给视图层。
3. 视图层视图层是Struts框架中负责展示数据的部分。
在Struts中,视图层通常由JSP页面来实现。
当Action将处理结果封装成ActionForm 对象后,它会将该对象传递给相应的JSP页面进行展示。
JSP页面可以通过EL表达式或JSTL标签库来访问ActionForm对象中的数据,并将其展示给用户。
4. 数据模型层数据模型层是Struts框架中负责处理业务逻辑的部分。
在Struts中,数据模型层通常由业务逻辑组件和数据访问组件组成。
业务逻辑组件负责处理业务逻辑,如验证用户输入、计算数据等;数据访问组件负责与数据库交互,如查询、插入、更新等操作。
在Struts的工作流程中,数据模型层主要由Action调用和协调。
以上就是Struts的基本工作流程。
当用户发起请求时,控制器层的ActionServlet接收到请求并将其分发给相应的Action处理。
Action负责处理请求并将处理结果封装成ActionForm对象。
J2EE项目实训Struts框架技术——第5章 Struts框架ActionForm组件及应用(第1部分)
第5章Struts框架ActionForm组件及应用(第1/3部分)在Web应用系统的开发中,合理地应用HTML表单以及对表单的各种功能操作是每个Web 开发人员都必须要面对的技术问题。
在常规的J2EE Web实现技术中,是利用HttpServletRequest类来包装Http的请求、并利用其中的getParameter()方法获得用户表单所提交的参数。
此种实现方式不仅代码琐岁、而且不是面向对象方式。
那么如何有效地进行表示层页面表单中的数据管理和控制呢?在Struts框架中又是如何进行表单管理呢?1.1Struts ActionForm组件在Struts框架中通过提供ActionForm组件来改善常规的Web表单编程处理技术,并且倡导以面向对象的方式进行Web表单编程实现。
由于ActionForm组件类为标准的JavaBean组件类,Web应用系统表示层页面中的某个表单所对应的ActionForm组件类在具体构建时只需要继承于org.apache.struts.ActionForm类。
这个组件对象捕获通过Http 请求所提交的客户端表单参数。
并利用它和Struts框架中所提供的自定义标签库技术相互结合,可以实现对客户端的页面表单数据的良好封装和支持。
1.1.1Struts框架中的ActionForm类1、ActionForm表单组件类的主要作用1)能够实现以面向对象的方式包装页面表单请求提交的参数ActionForm组件类其实是一个值对象(Value Object)形式的JavaBean组件,通过在其中定义出成员属性来映射和描述请求的客户端页面表单中的各个域数据;同时也可以通过在ActionForm组件中所提供的数据检查方法validate对用户请求的参数进行合法性的检查,从而实现对通过HTML 表单请求输入的各个参数都将在传递给业务层组件之前进行合法性的校验。
一旦属性经过了校验,所有的表单中的成员属性就要被封装为一个值对象的ActionForm组件并传递给业务调度控制器组件类Action进行数据访问。
Struts控制器组件
Struts控制器组件Struts控制器组件负责接收用户的请求,更新模型.以及选择合适的视图组件返回给客户端.控制器组件有助于将模型和视图分离,有了这种分离可以在同一个模型的基础上得心应手的开发多种模型的视图.主要是ActionServlet框架中央控制器,RequestProcessor每个子应用的模块处理器,Action负责处理具体的业务的组件.Struts采用ActionServlet和RequestProcessor组件进行集中控制,并且采用Action组件来完成具体的业务单项处理.控制器组件的控制机制:主要认识是接受用户请求,根据用户的请求调用合适的模型来执行业务逻辑,获取业务逻辑的结果,根据当前状态以及业务逻辑执行结果选择合适的视图组件返回给客户端.ActionServlet类:是Struts框架的核心控制器组件,所有的用户请求都先由它来处理,然后再由它把请求转发给其他组件.容器启动的时候或者用户首次请求ActionServlet的时候加载ActionServlet类在这两种情况下,容器都会在ActionServlet被加载后立即执行它的init()方法,这可以保证当ActionServlet处理用户请求的时候已经被初始化.至于具体的初始化方法我们不用去管,下面研究一下ActinServlet的process()方法.当主控制器实例接收到Http请求后,在doGet()或者doPost()方法中都会调用process()方法来处理请求.在这个方法中首先调用selectModule()方法,这个方法选择负责处理用于请求的子应用模块.然后把子应用模块相关的ModuleConfig和MessageResources对象存储到request范围内,这使得框架的其余组件可以方便地从request范围内读取这些对象.从而获取应用配置信息和消息资源.ActionServlet是可以派生子类的但是感觉没什么意义了,多数的功能都被移动到了RequestProcessor类中,以便减轻ActionServlet的负担.RequestProcessor类:对于应用模块,每个子应用模块都由各自的RequestProcessor实例.在ActionServlet的process()方法中一旦选择了正确的子应用模块,就会调用子应用的模块的RequestProcessor类,每个子应用模块都可以拥有单纯的RequestProcessor类.开发人员可以很方便的创建客户化的RequestProcessor类.Action类:是用户请求和业务逻辑之间的桥梁,每个Action充当客户的一项业务代理.在RequestProcessor类预处理请求的时候.在创建了Action的实例后,就调用自身的processActionPerForm()方法,该方法调用Action的execute()方法.为了确保线程安全thread-safe,在一个应用的生命周期中.Struts框架只会为每个Action类创建一个Action 实例.所有的客户请求共享同一个Action实例.并且所有的请求线程可以执行它的execute方法.Action类的execute()方法返回一个ActionForward对象,代表了Web资源的逻辑对象,这里的Web资源可以是JSP页面,JAVA servlet或者Action.从execute()方法返回的对象有两种方法:创建一个动态的ActionForward实例和在配置文件的action元素里的子元素<forward>元素.在execute()方法只需要调用mapping实例参数的findForward()方法,来获得特定的ActionForward对象.<action>元素的roles属性是指定这个Action 的用户必须具备的安全角色.多个角色之间以逗号隔开.利用Token解决重复提交:在某些情况下,如果用户对同一个HTML 表单多次提交,Web应用必须能够判断用户的重复提交的行为,以做出相应的处理.可以利用同步令牌Token机制来解决Web应用重复提交的问题.Struts给出了一个参考实例.Action类中提供了一系列和T oken 相关的方法判断存储在当前用户会话中的令牌值和请求参数中的令牌是否匹配,如果匹配返回true.否则返回false.方法是protected boolean isTokenValid(request).实用类:RequestUtils类:org.apache.struts.util.RequestUtlis为Struts框架提供了一些处理请求的通用的方法.ModuleUtils 类:org.apache.strtus.taglib.ModuleUtils类提供了处理子应用应用模块的实用方法.Globals类:org.apache.struts.Globals类提供了一组公共类型的静态常量.控制器组件的核心技术可以说就是Servlet,控制器也是Struts的灵魂也是MVC模式的核心,所以如果想学好Struts就必须彻底的了解控制器的运行原理.(网友们的支持,是我继续写技术文章的动力!)。
Struts控制器
ACCP V4.0
ActionServlet 控制总线
ActionServlet实际也是一个从HttpServlet派生的类,该类 扩展了doGet和doPost方法,这两个方法都会调用其扩展 的process方法,并且该类还扩展了init方法 扩展的init方法做了如下事情:
初始日志等文件,初始web.xml的ServletConfig 初始ModuleConfig来读取strutus-config.xml 初始资源文件和数据源配置 初始插件(Plugin) 对多个子模块进行初始化
<html:submit property="method">
复写protected Map getKeyMethodMap()
Map的Put("资源名","方法名")
ACCP V4.0
本章小结
本章主要介绍了Struts框架中的控制器的实现过 程,其基本处理流程是
1. 2. 3. 4. 5. 6. 7. 用户首先提交请求,由ActionServlet负责接收 然后调用RequestProcess的Proccess方法 Proccess方法负责提取struts-config.xml中的配置信息 接着对缓存等初始化,并创建ActionForm 然后找到相应的Action然后执行Action的execute方法 并返回ActionForward 再由proccess方法根据<forward>标签进行转发页面
ACCP V4.0
struts-config.xml
Struts中通过struts-config来完成对应用程序的执 行配置工作.其配置范围包括:
数据源<data-sources> 视图组件配置<form-beans> 全局异常处理<global-exceptions> 全局转向<global-forwards> 控制器组件映射<action-mapping> 控制器扩展<controller> 资源文件<message-resources> 插件扩展<plug-in>
重点内容Struts与ServletJSP配置Struts应用Struts主要控制
public String getScope() 该方法返回映射的属性域(会话或请求)。
JSP实用简明教程
三、Struts主要控制器组 件
3、ActionForm组件 ActionForm组件用于保存请求的参数。Struts框架假设用户在应
控制器是Struts框架的核心,Struts框架提供了中心控制器类 ActionServlet和Action类作为用户自定义动作类的公共超类。控制器主要 由ActionServlet担当,但是对于业务逻辑的操作,则主要由Action、 ActionForm和ActionMapping/ActionForward这几个组件协调完成。其中 Action扮演了真正的控制逻辑的实现者,ActioForm处理一些表单相关操作 ,而ActionMapping和ActionForward则指定了不同业务逻辑或流程的运行 方向。
JSP实用简明教程
二、配置Struts的应用
2、struts-config.xml配置文件 该配置文件的作用是将struts组件结合在一起。配置文件可以定
义: • 全局转发 • ActionMapping类 • ActionForm bean • JDBC数据源
JSP实用简明教程
三、Struts主要控制器组 件
(2)Struts框架是MVC模式的实现框架 ,它的体系结构如下图所示。
JSP实用简明教程
二、配置Байду номын сангаасtruts的应用
在使用Struts框架开发Web应用的时候,有两个重要的配置文件需 要编写,分别是web.xml和struts-config.xml。 1、配置web.xml
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ActionServlet组件:充当struts框架的中央控制器。
RequestProcessor组件,充当每个子应用模块的请求处理器
Action组件,负责处理一项具体的业务。
1控制器组件的控制机制
struts的控制器组件主要完成以下任务:
接收用户请求
根据用户请求,调用合适的模型组件来执行相应的业务逻辑
获取业务逻辑执行结果
根据当前状态以及业务逻辑执行结果,选择合适的视图组件返回给用户
1》ActionServlet类
org.apache.struts.action.ActionServlet类是struts框架的核心控制器组件,所有的用户请求都先由ActionServlet来处理,然后再由ActionServlet把请求转发给其他组件。struts框架只允许在一个应用中配置一个ActionServlet类,在应用的生命周期中,仅创建一个ActionServlet类的实例,这个ActionServlet实例可以同时响应多个用户请求。
我们在ShoppingCartActions类中定义了两个业务方法:view()和update()
public class ShoppingCartActions extends DispatchAction{
public ActionForward view(
ActionMapping mapping,
4》ActionForward类
Action类的execute()方法返回一个ActionForward对象,ActionForward对象代表了Web资源的逻辑抽象,这里的Web资源可以是JSP页面或Action。从execute()方法中返回ActionForward对象有两种方法:
第一个方法在execute()方法中动态创建一个ActionForward实例,如下:
protected void saveToken(HttpServletRequest request) 添加令牌
获取数据库连接
protected DataSource getDataSource(HttpServletRequest request)
protected DataSource getDataSource(HttpServletRequest request, String key)
public void saveMessages(HttpServletRequest request,ActionMessages messages)
ActionError实例被用来存储错误信息,这个方法在错误关键字下的请求属性列表中存储ActionError对象。通过使用在struts标记库中定义的自定义标记,JSP页能够显示这些错误信息。ActionMessages 用来存储一些提示信息,不是错误,在jsp页面可以使用标记现实这些提示信息。
Type,返回<ation>元素的name属性值
String name = mapping.getName();
String path = mapping.getPath();
String type = mapping.getType();
请求有效性处理,使用令牌可以有效的防止重复提交。
protected String generateToken(HttpServletRequest request) 创建一个令牌.
protected boolean isTokenValid(HttpServletRequest request) 检查令牌是否有效
除了execute ()方法外,还有以下方法:
可以获得或设置与请求相关联的区域:
public Locale getLocale(HttpServletRequest request)
public void setLocale(HttpServletRequest request,Locale locale)
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception{
...........
}
}
然后在配置DispatchAction类,需要把parameter属性设置为method(parameter="method"),method仅仅相当于一个变量名,它会存储用户将要调用的那个方法(insert或update)如:
C:\Program Files\Java\jdk1.5.0_12\jre\lib\ext
首先创建一个扩展的DipatchAction类的子类,不必覆盖execute()方法,而是创建一些实现实际业务操作的方法。这些业务方法都应该和execute方法具有同样的方法签名,即它们的参数和返回类型都应该相同。此外也应该声明抛出Exception。例如:
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception{
...........
}
public ActionForward update(
ActionMapping mapping,
return new ActionForward("Failure","/security/singin.jsp",true);
以上ActionForward构造方法的第一个参数代表ActionForward实例的逻辑名,第二个参数指定转发路径,第三个参数指定是否进行重定向。(true,则代表重定向。false,代表请求转发)
〈html:link action="subject.do?method=update"〉我要发贴〈/html:link>
如果在在form表单中提交,需要向下面一样,***注意必须加上method="post",否则会出错***
<form method="post" action="fatie.do?method=insert">
3》Action类
Action类是用户请求和业务逻辑之间的桥梁,每个Action充当客户的一项业务代理。在创建Action实例后,就调用自身的processActionPerform()方法,该方法再调用Action类的execute()方法。execute()调用相应的逻辑业务方法,完成业务请求。
protected boolean isTokenValid(HttpServletRequest request,Boolean reset) 检查令牌是否有效,并且重置令牌(如果reset 是true)
protected void resetToken(HttpServletRequest request) 重置令牌
2》RequestProcessor类
struts框架只允许应用存在一个ActionServlet类,但可以存在多个客户化的RequestProcessor类,每个子应用模块都可以拥有单独的RequestProcessor类,ActionServlet的process()方法中,一旦选择可正确的子应用模块,就会调用子应用模块的RequestProcessor实例的process()放来处理请求。
<action
path="/bankuai/fatie"
type="cn.hxex.tutorial.fatieAction"
name="tiezi"
parameter="method">
*******org.apache.struts.actions.DispatchAction类*******
DispatchAction继承自Action类,它是一个抽象类,封装了一些基础方法,来解决使用一个Action处理多个操作的能力,这就是DispatchAction最大的用途.<action>的parameter属性是给DispatchAction使用的,Action只会执行execute()方法,DispatchAction会根据parameter的值执行特定的方法,注意parameter的值不要设置为exectute,也不要覆盖DispatchAction中的execute()。
第二个方法是调用ActionMapping实例的findForward()方法,来获得特定的ActionForward实例:
return mapping.findForward("success");
5》ActionMapping类
ActionMapping代表当前Action的配置信息。Action将使用ActionMapping的findForward()方法,此方法返回一个指定名称的ActionForward,这样Action就完成了本地转发。若没有找到具体的ActionForward,就返回一个null.
public ActionForward getInputForward() 得到本action的输入ActionForard.
ActionMapping继承于org.apache.struts.config.ActionConfig
getName,返回<ation>元素的name属性值