Struts2原理详解

Struts2工作原理及代码 【代码】Struts2工作原理及代码。 阅读详情

注:以下内容是根据一些网友的内容综合理解后发布的,如果有什么不妥之处请告之


1.Struts2的基本组成

Struts2有3部分组成:核心控制器(FilterDispatcher)、业务控制器和用户实现的业务逻辑组件,其中FilterDispatcher是由Struts2框架提供的,而用户需要手动实现业务控制器(Action)和业务逻辑组件(就是业务逻辑部分)

2.核心控制器:FilterDispatcher  

  
FilterDispatcher是Struts 2框架的核心控制器,该控 制器作为一个Filter运行在Web应用中,它负责拦截所有的用户请求 ,当用户请求到达时,该Filter会过滤用户请求。如果用户请求以action结尾,该请求将被转入Struts 2框架处理。 

Struts 2框架获得了*.action请求后,将根据*.action请求的前面部分决定调用哪个业务逻辑组件 ,例如,对于login.action请求,Struts 2调用名为login的Action来处理该请求。 

Struts 2应用中的Action都被定义在struts.xml文件中,在该文件中定义Action时,定义了该Action的name属性和class属性,其中name属性决定了该Action处理哪个用户请求(请求和method方法中的action名字对应),而class属性决定了该Action的实现类。

Struts 2用于处理用户请求的Action实例 ,并不是用户实现的业务控制器,而是Action代理 ——因为用户实现的业务控制器并没有与Servlet API耦合,显然无法处理用户请求 。而Struts 2框架提供了系列拦截器,该系列拦截器负责将HttpServletRequest请求中的请求参数解析出来,传入到Action中 ,并回调Action 的execute方法来处理用户请求。 
显然,上面的处理过程是典型的AOP(面向切面编程)处理方式
从上图可以看出:用户实现的Action类仅仅是Struts 2的Action代理的代理目标。用户实现的业务控制器(Action)则包含了对用户请求的处理。 用户的请求数据包含在 HttpServletRequest对象里,而用户的Action类无需访问HttpServletRequest对象。拦截器负责将 HttpServletRequest里的请求数据解析出来,并传给业务逻辑组件Action实例。

3.业务控制器  

  
正如从上图所看到的,业务控制器组件就是用户实现Action类的实例 ,Action类里通常包含了一个execute方法,该方法返回一个字符串——该字符串就是一个逻辑视图名,当业务控制器处理完用户请求后,根据处理结果不同,execute方法返回不同字符串   ——每个字符串对应一个视图名。 

程序员开发出系统所需要的业务控制器后,还需要配置Struts 2的Action,即需要配置Action的如下三个部分定义: 

—  Action所处理的URL。 

—  Action组件所对应的实现类。 

—  Action里包含的逻辑视图和物理资源之间的对应关系
。 

每个Action都要处理一个用户请求,而用户请求总是包含了指定URL。当Filter Dispatcher拦截到用户请求后,根据请求的URL和Action处理URL之间的对应关系来处理转发。

4.Struts 2的模型组件  
 

通常, MVC框架里的业务控制器会调用模型组件的方法来处理用户请求。也就是说,业务逻辑控制器不会对用户请求进行任何实际处理,用户请求最终由模型组件负责处理。业务控制器只是中间负责调度的调度器,这也是称Action为控制器的原因。  

 


从上图中看到Action调用业务逻辑组件的方法。当控制器需要获得业务逻辑组件实例时,通常并不会直接获取业务逻辑组件实例,而是通过工厂模式来获得业务逻辑组件的实例;或者利用其他IoC容器(如Spring容器)来管理业务逻辑组件的实例。  

5.Struts 2的视图组件  

   Struts 2已经改变了Struts 1只能使用JSP作为视图技术的现状,Struts 2允许使用其他的模板技术,如FreeMarker、Velocity作为视图技术。 

当Struts 2的控制器返回逻辑视图名时,逻辑视图并未与任何的视图技术关联,仅仅是返回一个字符串,该字符串作为逻辑视图名 。 

当我们在struts.xml文件中配置 Action时,不仅需要指定Action的name属性和class属性,还要为Action元素指定系列result子元素,每个result子元素定义一个逻辑视图和物理视图之间的映射 。前面所介绍的应用都使用了JSP技术作为视图,故配置result子元素时没有指定type属性,默认使用JSP 作为视图资源。 

如果需要在Struts 2中使用其他视图技术,则可以在配置result子元素时,指定相应的type属性即可。例如,如果需要使用FreeMarker,则为result指定值为freemarker的type属性;如果想使用Velocity模板技术作为视图资源,则为result指定值为velocity的type属性…… 

 
   经过上面介绍,我们发现Struts 2框架的其实就webwork2.2的升级版 
一个请求在Struts2框架中的处理大概分为以下几个步骤 
1 客户端初始化一个指向Servlet容器 (例如Tomcat)的请求 
2 这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin) 
3 接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action 
4 如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy 
5  ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类 
6 ActionProxy创建一个ActionInvocation的实例。 
7 ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。 
8 一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果 。返回结果通常是(但不总是,也可 能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper 

在上述过程中所有的对象(Action,Results,Interceptors,等)都是通过ObjectFactory来创建的。

第055篇:陆地观测卫星数据服务平台高级检索方法 检索数据检索到肩膀疼,这谁能信?谁能? 阅读详情

相关推荐

VirtualBox虚拟机上ubuntu系统安装问题记:显示画面太小、启动就异常退出等

报错:Failed to load R0 module D:/VMMR0.r0: The path is not clean of leading double slashes: ‘D:/VMMR0.r0’ (VERR_SUPLIB_PATH_NOT_CLEAN).解决方法特别简单,就是安装VIrtualBox的时候不要安装在CDE等盘根目录下。首先VirtualBox的下载安装过程是比较简单的,此处就不赘述了。然后E盘下新建个目录,安装到这个目录下就可解决。

qq_42595610的博客 2825

struts2工作流程

一、struts2工作流程  1、Struts 2框架本身大致可以分为3个部分:核心控制器FilterDispatcher、业务控制器Action和用户实现的企业业务逻辑组件。 1)核心控制器FilterDispatcher是Struts 2框架的基础,包含了框架内部的控制流程和处理机制。 2)业务控制器Action和业务逻辑组件是需要用户来自己实现的。用户在开发Action和业务逻辑组件的

huaweitman的专栏 2111

【科研导航】【计算机视觉与图像处理】从顶刊到潜力股:跨学科(电子/电气/信息)SCI期刊投稿全景图

本文全面解析了计算机视觉与图像处理领域的SCI期刊投稿策略,涵盖从顶刊到潜力股的各类期刊特点。重点介绍了IEEE Transactions系列、Elsevier旗舰期刊以及二区优质期刊的审稿偏好和投稿技巧,特别适合电子/电气/信息交叉学科的研究者。文章还提供了三区、四区期刊的实用投稿建议,帮助科研新手快速找到适合的发表平台。

weixin_30897233的博客 81

Struts2基本知识

1.Struts2的工作原理            Struts 2框架本身大致可以分为3个部分:核心控制器FilterDispatcher、业务控制器Action和用户实现的企业业务逻辑组件。核心控制器FilterDispatcher是 Struts 2框架的基础,包含了框架内部的控制流程和处理机制。业务控制器Action和业务逻辑组件是需要用户来自己实现的。用户在开发Action和业务逻辑

mickey_gezi的专栏 581

告别复杂配置!用GuidosToolbox 3.0做MSPA景观格局分析,从安装到出图全记录

本文详细介绍了如何使用GuidosToolbox 3.0进行MSPA景观格局分析,从安装配置到出图全流程。涵盖环境准备、数据预处理、参数设置、结果解读及可视化技巧,帮助用户快速掌握这一生态安全评估工具。特别针对安装教程中的常见问题提供解决方案,提升分析效率。

weixin_29248313的博客 489

SpringBoot 整合 Drools:从环境搭建到复杂业务落地,精通规则引擎实战指南

本文介绍了Drools规则引擎的基础概念及其与SpringBoot的整合方法。首先概述了规则引擎的核心价值,包括业务规则解耦、可维护性提升等。重点讲解了Drools的核心组件(规则、事实、会话等)及其工作原理。随后详细说明了在SpringBoot项目中集成Drools的步骤,包括添加依赖、配置自动加载规则文件、创建KieContainer等关键配置类。文章还提供了完整的DRL规则文件示例和SpringBoot集成配置代码,为开发人员提供了从理论到实践的完整指导。通过这种方式,可以轻松实现业务规则与系统代码的

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 1432

框架之struts2(一)

一.struts2位于三层架构中的表现层(struts2 MVC框架),是基于MVC设计模式的WEB层框架     1.MVC框架         *M:Model模型,封装数据,javabean         *V:view视图,展示界面,jsp页面         *C:controller控制器,控制程序流程,servlet     2.Servlet与Filte

Apeopl的博客 564

19、时间触发通信与时间触发以太网技术解析

本文深入解析了时间触发通信和时间触发以太网(TTEthernet)技术,涵盖了其在实时系统中的应用,特别是安全关键领域如航空航天。文章详细介绍了TTEthernet的通信服务、协议参数化、时钟同步机制、诊断服务、故障隔离方法以及验证工作,并通过示例配置展示了其灵活性和可扩展性。TTEthernet通过引入确定性时间触发通信范式,在同一物理网络上实现了时间触发、速率受限和尽力而为三种流量类别的集成,为分布式实时系统提供了高可靠性和实时性保障。

efc12345678的博客 115

struts2核心技术

Struts2两个重要组成部分 struts2核心就是核心控制器和业务控制器。 核心控制器StrutsPrepareAndExecuteFilter StrutsPrepareAndExecuteFilter作为一个filter运行在web应用中,负责拦截所有用户请求,该filter 会过滤用户请求,然 后将请求都交给struts2框架处理。 拦截器会默认拦截扩展名为.action的请求,...

scry_945的博客 437

【软件测试】- 公有云、私有云、混合云简介以及如何在公有云与私有云上分别搭建测试环境

公有云、私有云以及混合云是目前云计算领域的三种主要模式。它们之间的区别主要在于部署方式、数据访问和管理控制的不同。在阿里云或腾讯云上使用 Kubernetes 和 Docker 搭建测试环境可以提供高度的可伸缩性和灵活性。这样的环境非常适合于需要在多种配置和条件下进行测试的复杂应用。通过云服务提供的工具和服务,可以轻松管理和监控整个测试过程。在云服务上搭建测试环境涉及选择合适的云提供商、配置云资源、安装和设置所需软件等步骤。### 1. 选择云服务提供商。

weixin_46453070的博客 2339

将 SAP BTP ABAP environment 与 SAP S/4HANA Cloud 公有云版集成:从架构理念到落地实战

本文探讨了在SAP云环境中实现ABAP扩展应用与S/4HANA Cloud系统集成的技术方案。通过建立标准化的远程通信通道,开发者可在SAP BTP ABAP环境中开发扩展应用,同时安全访问S/4HANA Cloud的核心业务数据和服务。文章详细介绍了整体架构设计、开发实现步骤(包括定义通信场景、生成服务消费模型和编写调用代码)以及管理员在S/4HANA侧的配置工作(创建通信安排和技术用户)。通过一个业务伙伴自助注册平台的案例,展示了如何在不修改标准系统的情况下实现云扩展,体现了SAP"干净核心&

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 239

struts2的核心和工作原理

在学习struts2之前,首先我们要明白使用struts2的目的是什么?它能给我们带来什么样的好处? 设计目标     Struts设计的第一目标就是使MVC模式应用于web程序设计。在这儿MVC模式的好处就不在提了。 技术优势     Struts2有两方面的技术优势,一是所有的Struts2应用程序都是基于client/server HTTP交换协议,The Java Servlet

蒋倩兰——蕙质兰心 38万+

YOLO11涨点优化:Loss魔改 | WIoU (Wise-IoU) v3版本全面替换,基于动态非单调聚焦机制,让模型更聪明地学习

YOLOv11目标检测中的WIoU v3损失函数改进 本文探讨了YOLOv11目标检测模型中CIoU损失函数的局限性,并提出了WIoU v3改进方案。关键发现包括: CIoU的缺陷:在低质量样本(小目标/遮挡目标)上过度惩罚,导致模型优化方向偏离,小目标AP往往比大目标低30%左右。 WIoU v3的创新: 动态非单调聚焦机制:根据样本"离群度"智能分配梯度 让模型重点优化中等质量样本,减少对低质量样本的无效关注 采用指数移动平均来自适应调整质量评判标准 实际效果:WIoU v3在保持大

2601_95807009的博客 422

struts2原理及基本应用

struts2工作原理 1、tomcat启动,会先去读取web.xml文件;然后会去初始化struts2核心过滤器StrutsPreparedAndExecuteFilter,在该过滤器中第一次会调用过滤器中的init方法进行初始化,而初始化方法中就有一个对象,Dispatcher对象,该对象会去读取并解析struts2.xml,struts-default.xml等文件。 2、客户端向服务器发送...

hyly_zhard的博客 752

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Struts2工作原理

1.客户端发送请求到达Struts2的控制器StrutsPrepareAndExecuteFilter; 2.StrutsPrepareAndExecuteFilter调用PrepareOperations类的findActionMapping方法; public void doFilter(ServletRequest req, ...

哈哈彬的博客 338

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

struts2框架原理

struts2框架原理

mr_array的博客 329

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Struts2原理

Struts2原理.....

126

struts2原理

struts2原理

u011919606的专栏 323

struts2的原理及作用

struts2的目的是什么 MVC模式应用于web程序设计 给我们带来什么样的好处?         (1)  实现了MVC模式,层次结构清晰,使程序员只需关注业务逻辑的实现。         (2)  丰富的标签库,大大提高了开发的效率.         (3) Struts2提供丰富的拦截器实现。         (4) 通过配置文件,就可以

面包侠的博客 1782

struts2原理架构图

struts2 原理架构图

蜗牛 1515

Struts2原理分析,自己实现一个struts2

今天没有时间继续撰写关于osworkflow的源码剖析文章了,换一个思路,写一下struts2相关的东西,先来说说为什么要写这样的一个东西,公司有一套自主研发的云服务平台,CTO告诉我站在用户的角度,从头到尾部署自己的应用,让我写一个基于php的http应用和基于j2ee的http应用,php的昨天已经写完并且顺利部署,照常运行,今天本来要写java的,开始动手之前,我纠结一件事情,第一现在的ja

清心寡欲,做一个专注的程序员 2146

Struts2 Action原理

Struts2 Action原理 一、6大核心组件原理 6大核心组件作用 1、FC 前端控制器,负责统一的分发请求。 2、Action 业务控制器,负责处理某一类业务。 3、ValueStack Action与JSP数据交互的媒介。 4、Interceptor 拦截器,负责扩展Action,处理Action的共通事务。 5、Result 负责输出的组件。 6、Tags

小圣_fighting的博客 2789

【合肥黑马程序员】Struts2的工作原理

这是我们合肥黑马程序员的技术老师总结的Struts2的工作原理,希望能够帮助到各位!

yyl3c61的博客 289

Struts2的原理

Struts2是一个基于MVC设计的Java web应用框架 Struts2在以MVC中解决了三个问题: 1.控制器如何根据用户的请求决定调用哪个模型(具体是模型中的Action组件)进行处理 2.如何在业务逻辑处理器与servlet API 分离的情况下使处理器获得请求参数,并得以执行 3.如何将处理后返回的数据传给相应的视图生成动态网页响应给用户 工作流程: 1.浏览器发起一个Requ...

yigegegege的博客 315

Struts 2原理概述

一.Struts 2原理 Struts2是在Struts1的基础上发展而来的,Struts是WebWork和Struts1的集合,采用的正是WebWork的核心,更多的是WebWork。 上图来源于Struts2官方站点,是Struts 2 的整体结构。 1、客户端初始化一个指向Servlet容器(例如Tomcat)的请求; 2、这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做A...

weixin_43800631的博客 345
上一篇: Struts2拦截器简单示例
下一篇: Struts2中拦截器、过滤器的区别
北斗安心联
博客等级 码龄16年 6粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值