Struts工作原理

合集下载

三大框架的底层机制及原理21页word文档

三大框架的底层机制及原理21页word文档

Struts1的工作原理Struts1工作原理图:1、初始化:struts框架的总控制器ActionServlet是一个Servlet,它在web.xml中配置成自动启动的Servlet,在启动时总控制器会读取配置文件(struts-config.xml)的配置信息,为struts中不同的模块初始化相应的对象。

(面向对象思想)2、发送请求:用户提交表单或通过URL向WEB服务器提交请求,请求的数据用HTTP协议传给web服务器。

3、form填充:struts的总控制器ActionServlet在用户提交请求时将数据放到对应的form对象中的成员变量中。

4、派发请求:控制器根据配置信息对象ActionConfig将请求派发到具体的Action,对应的formBean一并传给这个Action中的excute()方法。

5、处理业务:Action一般只包含一个excute()方法,它负责执行相应的业务逻辑(调用其它的业务模块)完毕后返回一个ActionForward对象。

服务器通过ActionForward对象进行转发工作。

6、返回响应:Action将业务处理的不同结果返回一个目标响应对象给总控制器。

7、查找响应:总控制器根据Action处理业务返回的目标响应对象,找到对应的资源对象,一般情况下为jsp页面。

8、响应用户:目标响应对象将结果传递给资源对象,将结果展现给用户。

ssh框架启动流程系统从职责上分为四层:表示层、业务逻辑层、数据持久层和域模块层。

其中使用Struts作为系统的整体基础架构,负责MVC的分离,在Struts框架的模型部分,利用Hibernate 框架对持久层提供支持,业务层用Spring支持。

具体做法是:用面向对象的分析方法根据需求提出一些模型,将这些模型实现为基本的Java对象,然后编写基本的DAO接口,并给出Hibernate的DAO实现,采用Hibernate架构实现的DAO类来实现Java类与数据库之间的转换和访问,最后由Spring完成业务逻辑。

Struts2漏洞利用原理及OGNL机制

Struts2漏洞利用原理及OGNL机制

Struts2漏洞利⽤原理及OGNL机制Struts2漏洞利⽤原理及OGNL机制研究概述在MVC开发框架中,数据会在MVC各个模块中进⾏流转。

⽽这种流转,也就会⾯临⼀些困境,就是由于数据在不同MVC层次中表现出不同的形式和状态⽽造成的:View层—表现为字符串展⽰数据在页⾯上是⼀个扁平的、不带数据类型的字符串,⽆论数据结构有多复杂,数据类型有多丰富,到了展⽰的时候,全都⼀视同仁的成为字符串在页⾯上展现出来。

数据在传递时,任何数据都都被当作字符串或字符串数组来进⾏。

Controller层—表现为java对象在控制层,数据模型遵循java的语法和数据结构,所有的数据载体在Java世界中可以表现为丰富的数据结构和数据类型,你可以⾃⾏定义你喜欢的类,在类与类之间进⾏继承、嵌套。

我们通常会把这种模型称之为复杂的对象树。

数据在传递时,将以对象的形式进⾏。

可以看到,数据在不同的MVC层次上,扮演的⾓⾊和表现形式不同,这是由于HTTP协议与java的⾯向对象性之间的不匹配造成的。

如果数据在页⾯和Java世界中互相传递,就会显得不匹配。

所以也就引出了⼏个需要解决的问题:1.当数据从View层传递到Controller层时,我们应该保证⼀个扁平⽽分散在各处的数据集合能以⼀定的规则设置到Java世界中的对象树中去。

同时,能够灵活的进⾏由字符串类型到Java中各个类型的转化。

2.当数据从Controller层传递到View层时,我们应该保证在View层能够以某些简易的规则对对象树进⾏访问。

同时,在⼀定程度上控制对象树中的数据的显⽰格式。

我们稍微深⼊思考这个问题就会发现,解决数据由于表现形式的不同⽽发⽣流转不匹配的问题对我们来说其实并不陌⽣。

同样的问题会发⽣在Java世界与数据库世界中,⾯对这种对象与关系模型的不匹配,我们采⽤的解决⽅法是使⽤如hibernate,iBatis等框架来处理java对象与关系数据库的匹配。

现在在Web层同样也发⽣了不匹配,所以我们也需要使⽤⼀些⼯具来帮助我们解决问题。

1Struts的工作原理

1Struts的工作原理

1. Struts的工作原理在Struts中,用户的请求一般以*.do作为请求服务名,所有的*.do请求均被指向ActionSevlet,ActionSevlet根据Struts-config.xml中的配置信息,将用户请求封装成一个指定名称的FormBean,并将此FormBean传至指定名称的ActionBean,由ActionBean完成相应的业务操作,如文件操作,数据库操作等。

每一个*.do均有对应的FormBean名称和ActionBean名称,这些在Struts-config.xml中配置。

2. Struts优点与缺点Struts是开源软件,使开发者能更深入的了解其内部实现机制。

Struts 优点:业界"标准"(很多成功案例),学习资源丰富。

Struts的优点主要集中体现在两个方面:Taglib和页面导航。

a、利用Struts提供的taglib可以大大节约开发时间。

b、维护扩展比较方便。

通过一个配置文件,即可把握整个系统各部分之间的联系,这对于后期的维护有着莫大的好处。

c、表现与逻辑分离d、表单验证解决了请求数据的验证问题,增强了系统健壮性。

e、便于团队开发Struts缺点:a、大量的使用标签,对于初学者难度较大。

b、ActionForms使用不便、无法进行单元测试(StrutsTestCase只能用于集成)3. Struts提供了几个标签库?都是什么标签库?Struts提供了五个标签库,即:HTML、Bean、Logic、Template和Nested。

HTML 标签用来创建能够和Struts 框架和其他相应的HTML 标签交互的HTML 输入表单Bean 标签在访问JavaBeans 及其属性,以及定义一个新的bean 时使用Logic 标签管理条件产生的输出和对象集产生的循环Template 标签随着Tiles框架包的出现,此标记已开始减少使用Nested 标签增强对其他的Struts 标签的嵌套使用的能力< Html:form>, < html:submit>, < Html:button>, <Html:text>, <Html:select><logic:iterate>, <logic:forward>, <logic:redirect>, <logic:iterate>, <logic:present>,<logic:empty> ... 参考:struts Logic标签说明<bean:write>, <bean:message>, <bean:parameter>, <bean:size>4. Tiles框架是什么?Tiles框架为创建Web页面提供了一种模板机制,它能将网页的布局和内容分离5.谈谈HashMap和Hashtable的区别。

struts2核心工作流程与原理

struts2核心工作流程与原理

struts2核心工作流程与原理做为一名技术人员,听到太多关于.net和java的比较的话题。

我想对那些技术人员说,请先了解一下什么是java(或者.net)吧,其实你根本不了解。

这是Struts2官方站点提供的Struts 2 的整体结构。

一个请求在Struts2框架中的处理大概分为以下几个步骤1.客户端提起一个(HttpServletRequest)请求,如上文在浏览器中输入”http://localhost:8080/TestMvc/add.action”就是提起一个(HttpServletRequest)请求。

2.请求被提交到一系列(主要是三层)的过滤器(Filter),如(ActionContextCleanUp、其他过滤器(SiteMesh等)、 FilterDispatcher)。

注意这里是有顺序的,先ActionContextCleanUp,再其他过滤器(SiteMesh等)、最后到 FilterDispatcher。

3.FilterDispatcher是控制器的核心,就是mvc中c控制层的核心。

下面粗略的分析下我理解的FilterDispatcher工作流程和原理:FilterDispatcher进行初始化并启用核心doFilter其代码如下:public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain ) throws IOException, ServletException {HttpServletRequest request = (HttpServletRequest) req;HttpServletResponse response = (HttpServletResponse) res;ServletContext servletContext = filterConfig.getServletContext();// 在这里处理了HttpServletRequest和HttpServletResponse。

三大框架

三大框架

Hibernate1.Hibernate 的初始化.读取Hibernate 的配置信息-〉创建Session Factory1)创建Configeration类的实例。

它的构造方法:将配置信息(Hibernate config.xml)读入到内存。

一个Configeration 实例代表Hibernate 所有Java类到Sql数据库映射的集合。

2)创建SessionFactory实例把Configeration 对象中的所有配置信息拷贝到SessionFactory的缓存中。

SessionFactory的实例代表一个数据库存储员源,创建后不再与Configeration 对象关联。

缓存(cache):指Java对象的属性(通常是一些集合类型的属性--占用内存空间。

SessionFactory的缓存中:Hibernate 配置信息。

OR映射元数据。

缓存-大:重量级对象小:轻量级对象3)调用SessionFactory创建Session的方法1】用户自行提供JDBC连接。

Connection con=dataSource.getConnection(); Session s=sessionFactory.openSession(con);2】让SessionFactory提供连接Session s=sessionFactory.openSession();4)通过Session 接口提供的各种方法来操纵数据库访问。

Hibernate 的缓存体系一级缓存:Session 有一个内置的缓存,其中存放了被当前工作单元加载的对象。

每个Session 都有自己独立的缓存,且只能被当前工作单元访问。

二级缓存:SessionFactory的外置的可插拔的缓存插件。

其中的数据可被多个Session共享访问。

SessionFactory的内置缓存:存放了映射元数据,预定义的Sql语句。

Hibernate 中Java对象的状态1.临时状态(transient)特征:1】不处于Session 缓存中2】数据库中没有对象记录Java如何进入临时状态1】通过new语句刚创建一个对象时2】当调用Session 的delete()方法,从Session 缓存中删除一个对象时。

struts的工作原理

struts的工作原理

struts的工作原理Struts是一个基于Java的开源Web应用程序框架,它遵循了MVC(Model-View-Controller)设计模式,用于简化Web应用程序的开辟过程。

Struts的工作原理涉及到请求的处理、控制流程以及数据流动等方面。

下面将详细介绍Struts的工作原理。

1. 请求处理:当用户在浏览器中输入URL并发送请求时,请求首先到达Web服务器。

Web服务器根据URL的映射规则将请求转发给Struts框架。

2. 控制流程:Struts框架通过一个核心控制器(Controller)来管理请求的处理流程。

核心控制器是一个Servlet,它负责接收请求并将其分发给相应的Action处理。

3. Action处理:Action是Struts框架的核心组件之一,负责处理具体的业务逻辑。

每一个Action对应一个特定的请求,它接收请求参数、执行相应的业务逻辑,并返回结果。

4. 数据流动:在Struts框架中,数据的流动遵循MVC设计模式。

当请求到达Action时,Action会根据请求参数获取所需的数据,并将其存储在一个称为ActionForm的JavaBean中。

5. 视图呈现:视图(View)负责将处理结果展示给用户。

在Struts框架中,通常使用JSP (JavaServer Pages)作为视图技术。

Action会将处理结果传递给JSP,然后JSP负责将结果呈现给用户。

6. 结果返回:在Action处理完成后,它会返回一个结果对象给核心控制器。

结果对象包含了下一步要执行的操作,比如跳转到另一个页面或者返回错误信息。

7. 响应生成:核心控制器根据结果对象中的指示,生成相应的响应并返回给Web服务器。

Web服务器将响应发送给浏览器,最终用户可以看到处理结果。

总结:Struts框架的工作原理可以概括为:用户发送请求到Web服务器,Web服务器将请求转发给Struts框架的核心控制器,核心控制器将请求分发给相应的Action进行处理,Action处理完成后将结果返回给核心控制器,核心控制器根据结果生成响应并返回给Web服务器,最终用户可以看到处理结果。

struts1工作原理

struts1工作原理

struts1工作原理Struts1工作原理1. 什么是Struts1Struts1是一个开源的Java Web应用框架,用于开发MVC (Model-View-Controller)模式的Web应用程序。

它提供了一种结构化的方式来组织、管理和处理Web应用程序的请求和响应。

2. MVC模式简介什么是MVC模式MVC模式是一种软件设计模式,用于将一个应用程序的逻辑分为三个独立的部分:模型(Model)、视图(View)和控制器(Controller)。

每个部分都有不同的职责,有助于实现应用程序的解耦和可重用性。

MVC模式在Struts1中的应用在Struts1中,模型(Model)负责处理业务逻辑和数据,视图(View)负责表示用户界面,而控制器(Controller)负责协调模型和视图之间的交互。

3. Struts1的工作原理Struts1的工作原理可以分为以下几个步骤:配置Struts1环境首先,需要在Web应用程序的配置文件中配置Struts1环境。

通常使用一个名为``的文件来定义应用程序的相关设置,例如控制器的映射和配置文件路径等。

客户端发送请求当客户端发送一个请求时,请求会被发送到Web服务器。

通常,请求的URL中会包含一个特定的后缀,用于指示该请求需要由Struts1来处理。

Struts1的Front Controller接收请求Struts1的Front Controller是一个核心组件,它负责接收所有的请求。

当一个请求到达时,Front Controller会根据配置文件中的映射规则,将请求路由到相应的Action。

Action处理请求一旦请求被路由到相应的Action,Action就会开始处理该请求。

它会根据请求的参数和业务逻辑的需要,执行相应的操作。

例如,从数据库中获取数据、处理用户输入、调用其他模块等。

Action返回结果一旦Action完成了请求的处理,它会生成一个结果对象并将其返回给Struts1的Front Controller。

struts2工作原理-开源框架

struts2工作原理-开源框架
org.apache.struts2.dispatcher Struts2的核心包,最重要的类都放在该包中。
org.apache.struts2.impl 该包只定义了3个类,他们是StrutsActionProxy、StrutsActionProxyFactory、StrutsObjectFactory,这三个类都是对xwork的扩展。
/**
*ConstantforanHTTPrequest dispatcher}.
*/
publicstaticfinal String SERVLET_DISPATCHER =
"com.opensymphony.xwork2.dispatcher.ServletDispatcher";
/**
*ConstantfortheHTTPresponseobject.
*/
publicstaticfinal String HTTP_RESPONSE = "com.opensymphony.xwork2.dispatcher.HttpServletResponse";
/**
*Constantfortheservlet context}object.
*/
publicstaticfinal String SERVLET_CONTEXT = "com.opensymphony.xwork2.dispatcher.ServletContext";
以下是对各包的简要说明:
包名 说明
org.apache.struts2. components 该包封装视图组件,Struts2在视图组件上有了很大加强,不仅增加了组件的属性个数,更新增了几个非常有用的组件,如updownselect、doubleselect、datetimepicker、token、tree等。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

请求到来 不匹配 返回错误信息
ActionMapping是否匹配 匹配 ActionForm是否存在 不存在 存在
使用ActionForm,保存用户数据
创建ActionForm,保存用户数据

是否验证表单
是 ActionForm.validate()方法 没错误 Action是否存在 不存在 创建Action 是否有错误 有错误 返回错误信息 返回 ActionFo rward
(控制器)
接收用户请求 调用模型响应用户请求
选择视图显示响应结果
(视图) 显示模型状态 接收数据更新请求 把用户输入数据传 给控制器
(模型) 代表应用程序状态 响应状态查询 处理业务流程 通知视图业务状态 更新
Java Web应用的结构
XML配置文件 JSP 自定义标签库
XML
JavaBean
EJB
• (4)如果ActionForm的validate()方法返回 一个null或返回一个不包含ActionMessage 的ActionErrors对象,就表示表单验证成功. • (5)ActionServlet根据ActionMapping实例 包含的映射信息决定将请求转发给哪个 Action.如果Action实例不存在,就创建一 个Action实例,然后调用Action的execute() 方法.
Struts实现MVC的原理
• Struts实质上就是在JSP Model2的基础上 实现的一个MVC框架.在Struts框架中,模 型由实现业务逻辑的JavaBean或EJ B组件 构成,控制器由ActionServlet和Action来实 现,视图由一组JSP文件构成.
struts-config.xml
• (6)Action的execute()方法返回一个 ActionForward对象,ActionServlet再把客户请求 转发给ActionForward对象指向的JSP组件. • (7)ActionForward对象指向的JSP组件生成动态 网页,返回给客户. • 其中第四步,如果ActionForm的validate()方法返 回一个包含一个或多个ActionMessage的 ActionErrors的对象,就表示表单验证失败,此时 ActionServlet将直接把请求转发给包含用户提 交表单的JSP组件.在这种情况下,不会再创建 Action对象并调用Action的execute()方法.
存在
Action.execute()方法
调用商业逻辑方法
ActionServlet 处理ActionForward
转发
JSP1..n
思考题
• Struts的缺点有哪些? • 如何改进?
THANK YOU
Struts的工作原理
• 对于采用Struts框架的WEB应用,在WEB 应用启动时加载并初始化 ActionServlet,ActionServlet从strutsconfig.xml文件中读取配置信息,把他们存 放到各种配置对象中,例如Action的映射 信息存放在ActionMapping对象中. • 当ActoinServlet受到一个客户请求时,将执 行如下流程:
一起来解决我们的问题!GO--
ห้องสมุดไป่ตู้
JSP作为自主独立的模块
请求 浏览器 响应 JSP
修改 数据
读取 数据 数据库
JSP Model1
• • • • • HTML和JAVA代码强耦合在一起 内嵌流程控制 调试困难 强耦合 美学
JSP
浏览器 数据库
Java Bean
JSP Model2
• 是一种联合使用JSP和Servlet来提供动态内容的 方法,JSP生成表示层内容,让Servlet完成深层次 的处理任务. • Servlet充当控制器的角色,负责处理用户的请求, 创建JSP页需使用的Java Bean对象,根据用户请 求选择合适的JSP页返回给用户. • JSP仅负责检索由Servlet创建的Java Bean对象, 从Servlet中提取动态内容插入到静态模板.
浏 览 器
WEB 服 务 器
(控制器) ActionServlet
Action
(模型) JavaBean EJB
(视图) JSP
Action
Action
ActionFormBean的作用
ActionFormBean (包含用户输入数据) 视图 组件 ActionFormBean (包含修改后的数据) 控制器 组件
(控制器) Servlet
浏览器 数据库
(视图) JSP
(模型) JavaBean
MVC概述
• MVC是一种设计模式,它强制把应用程序 的输入,处理,输出分开. • MVC把应用程序分成三个核心模块:模型, 视图,控制器,它门分别担当不同的任务.
MVC设计模式
• • • • • 视图(View) 控制器(Control) 模型(Module) MVC处理过程: 首先控制器接收用户的请求,并决定调用哪个模 型来进行处理;然后模型根据用户的请求进行相 应的业务逻辑处理,并返回数据;最后控制器调 用响应的视图来格式化模型返回的数据,并通过 视图呈现给用户.
Struts的工作原理
讲师:赵君 2006年10月21日
问题?
• • • • • • • • • MVC概述 MVC设计模式 JSP作为自主独立的模块 JSP Model1 JSP Model2 Java Web应用的结构 Struts概述 Struts实现MVC的原理 Struts的工作原理
准备好了吗?
• (1)检索和用户请求匹配的ActionMapping对像, 如果不存在,就返回用户请求路径无效的信息. • (2)如果ActionForm实例不存在,就创建一个 ActionForm实例,把客户提交的表单数据存到 ActionForm实例中. • (3)根据配置信息决定是否需要表单验证,如果 需要验证,就调用ActionForm的validate()方法.
Servlet
Java实用类
• MVC的优点: • 首先,多个视图共享一个模型. • 其次,模型,视图,控制器保持相对独立,修改一方 不会影响另两方. • 此外,控制器提高了应用程序的灵活和可配置. • MVC的实用范围: • 大量用户界面,并且业务逻辑复杂的大中型应用 程序.
Struts概述
• Struts是基于MVC的WEB应用框架. • Struts为Java Web应用提供现成的通用框 架. • Struts可以提高Web开发应用的速度,开发 人员的精力集中在解决实际业务问题上.
相关文档
最新文档