struts原理 struts的工作原理是什么

作者&投稿:相涛 (若有异议请与网页底部的电邮联系)
MVC即Model-View-Controller的缩写,是一种常用的设计模式。MVC 减弱了业务逻辑接口和数据接口之间的耦合,以及让视图层更富于变化。MVC的工作原理

Struts 是MVC的一种实现,它将 Servlet和 JSP 标记(属于 J2EE 规范)用作实现的一部分。Struts继承了MVC的各项特性,并根据J2EE的特点,做了相应的变化与扩展。

Struts有一组相互协作的类(组件)、Serlvet以及jsp tag lib组成。基于struts构架的web应用程序基本上符合JSP Model2的设计标准,可以说是MVC设计模式的一种变化类型。根据上面对framework的描述,我们很容易理解为什么说Struts是一个web framwork,而不仅仅是一些标记库的组合。但 Struts 也包含了丰富的标记库和独立于该框架工作的实用程序类。Struts有其自己的控制器(Controller),同时整合了其他的一些技术去实现模型层(Model)和视图层(View)。在模型层,Struts可以很容易的与数据访问技术相结合,包括EJB,JDBC和Object Relation Bridge。在视图层,Struts能够与JSP, Velocity Templates,XSL等等这些表示层组件想结合。

Struts的工作原理

控制:通过图2大家可以看到有一个XML文件Struts-config.xml,与之相关联的是Controller,在Struts中,承担MVC中Controller角色的是一个Servlet,叫ActionServlet。ActionServlet是一个通用的控制组件。这个控制组件提供了处理所有发送到Struts的HTTP请求的入口点。它截取和分发这些请求到相应的动作类(这些动作类都是Action类的子类)。另外控制组件也负责用相应的请求参数填充 Action From(通常称之为FromBean),并传给动作类(通常称之为ActionBean)。动作类实现核心商业逻辑,它可以访问java bean 或调用EJB。最后动作类把控制权传给后续的JSP 文件,后者生成视图。所有这些控制逻辑利用Struts-config.xml文件来配置。

视图:主要由JSP生成页面完成视图,Struts提供丰富的JSP 标签库: Html,Bean,Logic,tiles等,这有利于分开表现逻辑和程序逻辑。

模型:模型以一个或多个java bean的形式存在。这些bean分为三类:Action Form、Action、JavaBean or EJB。Action Form通常称之为FormBean,封装了来自于Client的用户请求信息,如表单信息。Action通常称之为ActionBean,获取从ActionSevlet传来的FormBean,取出FormBean中的相关信息,并做出相关的处理,一般是调用Java Bean或EJB等。

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

核心:Struts的核心是ActionSevlet,ActionSevlet的核心是Struts-config.xml。

自己总结的
1.读取配置 初始化ModuleConfig对象 在web.xml中配置成自动启动的servlet (ActionServlet),读取struts-config.xml的配置信息 为不同的struts模块化初始化 相应的ModuleConfig对象
对象:ActionConfig、controlConfig,ForwardConfig,ForwardConfig,MessageResourceConfig
2.发送请求 提交表单,调用URL 请求的数据用http协议上传给web服务器
(.do请求和非.do请求)
3.填充form(实例化,复位,填充数据,校验,保存)
从ActionConfig中找出对应该请求的Action子类,如没有对应的Action,控制器直接转发给JSP或静态页面。如有对用的Action且这个Action有一个相应的ActionForm,ActionForm被实例化并用HTTP请求的数据填充其属性,并保存在ServletContext中(request或session中),这样就可以被其他的Action对象或jsp调用
4,派发请求
控制器根据配置信息ActionConfig将请求派发到具体的Action,相应的FormBean一并传给这个Action的execute方法
5,处理业务
Action一般包含一个execute方法,他负责执行相应的业务逻辑(调用其他业务模块)。完毕返回一个ActionForward对象,来执行转发工作
6,返回响应
Action根据业务处理的不同接回返回一个目标响应对象给总控制器,该目标响应对象对应一个具体的jsp页面或另一个Action
7,查找响应(翻译响应)
总控制器根据业务功能Action返回的目标响应对象,找到对应的资源对象,通常是一个具体的jsp页面
8,响应用户
目标响应对象将结果展现给用户目标对象(jsp)将结果页面展示给用户

访问过程
浏览器客户端访问——ActionServlet(一个应用程序只有一个)(找struts-config.xml,看是否有要访问的action,把表单中控件的值提取出来封装到对应form类的对象中,把请求,响应,form对象(ActionForm),跳转对象(ActionMapping)发到对应的action(类),action调用模块,检查FormBean是否有赋值(如果将FormBean返回自身请求页面(如注册页面)FormBean中值不丢,原来的表单控件值(需要用HTML标签)会保留),将相关信息返回ActionServlet,返回客户端

struts2.0的工作原理?~

客户端发出一个请求,服务器端StrutsPreparedAndExceuteFilter接收请求。
如果该请求是一个以 .action 结尾请求,则Struts2将请求转发至相应的Action,进行数据类型转换,如果数据类型转换出错,则返回到 input 指定的结果页面。
如果数据类型转换没有出错,则调用setXX 方法进行设值,如果使用了validate()验证方法(或者是使用了验证框架),则进行相应的验证。
如果验证出错,回到 input 指定的结果页面。
如果没有使用验证,或者验证没有出错,则执行 execute() 方法,返回到相应的页面。

扩展资料:
Struts2流程注解
当Web容器收到请求(HttpServletRequest)它将请求传递给一个标准的的过滤链包括(ActionContextCleanUp)过滤器。
经过Other filters(SiteMesh ,etc),需要调用FilterDispatcher核心控制器,然后它调用ActionMapper确定请求哪个Action,ActionMapper返回一个收集Action详细信息的ActionMaping对象。
FilterDispatcher将控制权委派给ActionProxy,ActionProxy调用配置管理(ConfigurationManager) 从配置文件中读取配置信息(struts.xml),然后创建ActionInvocation对象。
ActionInvocation在调用Action之前会依次的调用所用配置拦截器(Interceptor N)一旦执行结果返回结果字符串ActionInvocation负责查找结果字符串对应的(Result)然后执行这个Result Result会调用一些模版(JSP)来呈现页面。
拦截器(Interceptor N)会再被执行(顺序和Action执行之前相反)最后响应(HttpServletResponse)被返回在web.xml中配置的那些过滤器和核心控制器(FilterDispatcher)。
参考资料来源:百度百科-Struts 2

  Struts2工作流程:


  1.客户端(Client)向Action发用一个请求(Request)
  2.Container通过web.xml映射请求,并获得控制器(Controller)的名字
  3.容器(Container)调用控制器(StrutsPrepareAndExecuteFilter或FilterDispatcher)。在Struts2.1以前调用FilterDispatcher,Struts2.1以后调用StrutsPrepareAndExecuteFilter
  4. 控制器(Controller)通过ActionMapper获得Action的信息
  5.控制器(Controller)调用ActionProxy
  6.ActionProxy读取struts.xml文件获取action和interceptor stack的信息。
  7.ActionProxy把request请求传递给ActionInvocation
  8.ActionInvocation依次调用action和interceptor
  9. 根据action的配置信息,产生result
  10.Result信息返回给ActionInvocation
  11.产生一个HttpServletResponse响应
  12.产生的响应行为发送给客服端。

梅毒Trust试验的原理
答:用正常牛心肌的心类脂(Cardiolipin 二磷酸酰甘油衍生物)作为抗原,而不是用螺旋体作为抗原,来测定病人血清中的反应素(非特异性抗体---抗心磷脂抗体)。用来初步筛查梅毒螺旋体感染。 反应素在初期梅毒病灶出现后1~2周就可测出,在二期梅毒滴度最高,三期梅毒较低。所用抗原不具有特异性,除梅毒病人...

RPR试验和TRUST试验有什么不同?
答:RPR:快速血浆反应素,是一种非特异性抗体。TRUST:甲苯胺红不加热血清试验(toluidine red unheated serum test)的简称,是一种螺旋体抗原血清试验。1、快速血浆反应素试验是VDRL抗原的改良,敏感性及特异性与VDRL相似,优点是肉眼即可读出结果。用心磷脂作抗原,测定血清中抗心磷脂抗体,亦称反应素。2...

梅毒检测TRUST
答:(1)、首先这两种实验都是梅毒的初筛实验,TRUST实验比RPR实验敏感性略高(所以出现假阳性的机会也相对多)。RPR和TRUST的原理一样的,都属于非梅毒螺旋体抗原血清试验。两者的区别只是RPR是用特制的炭粉作为显示剂,而TRUST是用甲苯胺红作为显示剂。(2)、RPR和TRUST都是以心磷脂、卵磷脂及胆固醇作为...

arm的“trustzone”是怎样保证硬件安全?
答:原理是应用程式核心能够在两个状态之间切换(通常改称为领域(worlds)以避免和其他功能领域的名称混淆),在此架构下可以避免资讯从较可信的核心领域泄漏至较不安全的领域。ARMTrustZone®技术是系统范围的安全方法,针对高性能计算平台上的大量应用,包括安全支付、数字版权管理(DRM)、企业服务和基于We...

防火墙配置中,为什么要配置trust口和untrust口?
答:防火墙就是用来控制流量的,缺省是允许流量从trust口到untrust口方向的主动访问,而不允许untrust口到trust口方向的主动访问;当从trust口到untrust口有主动访问时,防火墙会保存这个连接信息,回应数据从untrust口到trust方向,防火墙会放行,但是不会允许untrust口到trust口的主动访问。(有点象你在家能访问...

认识SMMU以及理理SMMU与TrustZone的联系?
答:SMMU的架构与工作原理:- 作为地址转换的核心,SMMU通过Stream ID(区分不同设备)和Stream Table Entry (STE) 数据结构,实现了高效的地址查找。STE与Context Descriptor (CD)协同工作,根据设备需求选择线性查找或2级流表,以节省内存资源。核心机制与操作流程:- SMMU执行两阶段地址转换:首先,Stage 1...

https数字证书验证原理
答:数字证书是Https实现安全传输的关键,它是由权威的CA机构颁布。如上图 GeoTrust 便是一个CA机构。证书的主要内容包含如下几点:公钥、证书发布机构、证书持有者、证书有效期、签名算法、 指纹 和 指纹算法 。在网络传输中,要想实现自己的数据能够安全的传输,需要对请求数据进行加密。这样即使被数据包被...

求计算机网络专业术语!
答:trust 信任 tunnel 安全加密链路 vector of attack 攻击向量 Virtual directory 虚目录 Virtual Machine 虚拟机 VRML 虚拟现实模型语言 volume 文件集 vulnerability 脆弱性 weak passwurd 弱口令 well-known ports 通用端口 workstation 工作站 X.25 一种分组交换网协议 zone transfer 区域转换 已...

在信托中non-exhaustive discretionary trust和 exhaustive trust有...
答:1、既然是“自由信托”,那就意味着信托关系的达成,是委托人、受托人意思自治、协商已知的结果。一般信托原理项下,受益人由委托人指定;其受益权的实现,包括额度、表现形式等,首先需要看信托合同的约定。2、经信托合同约定,或在信托期间,经委托人书面授权,且受托人同意的,可以对受益人的具体对象...