struts2工作原理
- 格式:pdf
- 大小:405.51 KB
- 文档页数:21
一.Struts2基础知识1. struts2的特点及配置1.1struts2与struts1的比较1)在软件设计上struts2没有struts1那样跟ServletApi和StrutsApi有着紧密的耦合,Struts2的应用可以不因爱ServletApi和StrutsApi.struts2的这种设计属于无侵入式设计,而Struts1却属于侵入式设计public class OrderListAction ectends Action//struts依赖于java2)Struts2提供了拦截器,利用拦截器可以进行AOP编程,实现如权限拦截等功能3)Struts2提供了类型转换器,我们可以把特殊的请求参数转换成我们需要的类型,在struts1中,如果我们实现同样的功能,就必须向struts1的底层实现BeanUtil注册类型转换器4)Struts2提供了支持多种表现层技术,如JSp,freeMarker等5)Struts2的输入校验可以对指定方法进行校验,解决了Struts的长久之疼6)提供了全局范围,包范围和Action范围的国际化资源文件管理实现1.2搭建struts2的开发环境1)新建web项目2)导入必要的包3)写配置文件Struts2默认的配置文件为Struts.xml,该文件需要存放在WEB-INF/classes下,该文件的配置模板如下(在m yeclipse中放在src目录下就可以了)模板在D:\Program Files\struts-2.3.4.1-all\struts-2.3.4.1\apps 解压struts2-blank.var再打开web-info/classes中的struts.x m l文件即可<?xml version="1.0"encoding="UTF-8"?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration2.3//EN""/dtds/struts-2.3.dtd"><struts></struts>4)在web.xm l中加入Struts2MVC框架启动配置在struts1.x中struts框架是通过Servlet启动的,在struts2中,struts框架式通过Filter 启动的,他在web.xm l中的配置如下:(D:\Program Files\struts-2.3.4.1-all\struts-2.3.4.1\apps 解压struts2-blank.var再打开Web-Info\web.xm l即可)<filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.Str utsPrepareAndExecuteFilter</filter-class><!—自从struts2.1.3以后,下面的FilterDispatcher已经标注为过时<filter-class>org.apache.struts2.dispatcher.ng.filter.FilterDispather</filter-class> --></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping>在StrutsPrepareAndEXecuteFilter()方法中将会读取类路径下的默认文件struts.xml完成初始化操作。
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层同样也发⽣了不匹配,所以我们也需要使⽤⼀些⼯具来帮助我们解决问题。
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。
struts2面试题Struts2是一个基于Java开发的Web应用程序框架,被广泛应用于企业级Java应用开发中。
在面试中,面试官可能会提出一些关于Struts2的问题,以评估应聘者的技术水平。
下面是一些常见的Struts2面试题及其详细答案,希望对你在面试中有所帮助。
1. 什么是Struts2?Struts2是一个轻量级的、基于MVC模式的Web应用程序框架。
它采用Java Servlet API和JavaServer Pages (JSP)技术,并提供了一种简单易用的方式来开发可维护和可扩展的Web应用程序。
2. Struts2的主要特性是什么?Struts2的主要特性包括:- MVC架构:将应用程序分为模型、视图和控制器,使开发更容易管理和扩展。
- 拦截器:通过拦截器可以在请求处理的各个阶段添加自定义的逻辑。
- 标签库:提供了丰富的标签库,简化了页面开发。
- 表单验证:提供了灵活且强大的表单验证机制,可以验证用户输入的数据。
- 国际化支持:支持多语言和本地化。
- 配置简单:通过配置文件来管理应用程序的行为。
3. Struts2的工作原理是什么?Struts2的工作原理如下:1) 客户端发送HTTP请求到服务器。
2) 服务器将请求交给Struts2的过滤器(Filter)。
3) 过滤器通过配置文件找到对应的Action,并调用相应的方法。
4) Action处理请求,并返回一个结果页面的名称或一个结果对象。
5) 结果页面的名称通过配置文件进行映射,服务器将其发送给客户端。
4. 什么是Struts2中的Action类?Action类是Struts2框架中的核心组件,用于处理Web请求。
一个Action类对应一个业务功能,其包含了要执行的方法和数据。
它负责接收请求、处理业务逻辑、将结果返回给前端页面。
5. Struts2中的拦截器是什么?有哪些内置的拦截器?拦截器是Struts2中的组件,用于在请求处理的各个阶段添加自定义的逻辑。
s2-052原理S2-052是指一种计算机安全漏洞,原理是利用Apache Struts 2框架的一个漏洞来执行远程代码。
Apache Struts 2是一个用于构建Web应用程序的开源框架,被广泛使用。
S2-052漏洞是Struts 2框架的一个安全漏洞,其原理是对Struts 2的核心组件——OGNL(Object-Graph Navigation Language)表达式进行了恶意注入。
在受到该漏洞攻击的情况下,攻击者可以构造恶意请求并发送给受影响的服务器。
服务器接收到请求后,会解析请求中的OGNL表达式,并在执行过程中未对其进行充分验证和过滤,导致攻击者可以在服务器上执行任意代码。
通过利用S2-052漏洞,攻击者可以实现远程命令执行,包括任意文件读取、文件删除、命令执行等操作。
这可能导致服务器的敏感数据泄露、系统被入侵、服务被停止等安全问题。
为了修复这个漏洞,Apache Struts 2开发团队发布了针对S2-052漏洞的安全补丁。
用户应该尽快更新Struts 2框架,并确保及时应用最新的安全补丁,以防止受到S2-052漏洞的攻击。
S2-052漏洞的具体原理如下:1. Apache Struts 2框架中的DefaultActionMapper类存在安全问题,攻击者可以通过构造恶意的请求来利用该漏洞。
2. 默认情况下,Struts 2框架使用的是通配符“/*”来匹配URL中的动作(action)。
攻击者可以通过构造特殊的URL,例如“/*/xxx.action”,来绕过框架的安全检查。
3. 在解析请求时,DefaultActionMapper会将URL中的动作部分进行解析。
恶意请求中的动作部分包含OGNL表达式,由${}包裹。
4. OGNL是Struts 2框架中用于动态访问和操作Java对象的表达式语言,可以通过OGNL表达式执行代码。
5. 由于默认配置下Struts 2框架对OGNL表达式的处理不够安全,未对其中的特殊字符进行充分的过滤和验证。
Struts2集成指南关于Struts2Struts是Apache软件基金会(ASF)赞助的一个开源项目。
它最初是Jakarta项目中的一个子项目,并在2004年3月成为ASF的顶级项目。
它通过采用Java Servlet/JSP技术,实现了基于Java EE Web应用的Model-View-Controller〔MVC〕设计模式的应用框架〔Web Framework〕,是MVC经典设计模式中的一个经典产品。
Struts,a history在Java EE的Web应用发展的初期,除了使用Servlet技术以外,普遍是在JavaServer Pages(JSP)的源代码中,采用HTML与Java代码混合的方式进行开发。
因为这两种方式不可避免的要把表现与业务逻辑代码混合在一起,都给前期开发与后期维护带来巨大的复杂度。
为了摆脱上述的约束与局限,把业务逻辑代码从表现层中清晰的分离出来,2000年,Craig McClanahan采用了MVC的设计模式开发Struts。
后来该框架产品一度被认为是最广泛、最流行JAVA的WEB应用框架。
Craig McClanahan2006年,WebWork与Struts这两个优秀的Java EE Web框架(Web Framework〕的团体,决定合作共同开发一个新的,整合了WebWork与Struts优点,并且更加优雅、扩展性更强的框架,命名为“Struts 2”,原Struts的1.x版本产品称为“Struts 1”。
至此,Struts项目并行提供与维护两个主要版本的框架产品——Struts 1与Struts 2。
Struts1 vs. Struts2侵入性Struts 1在编程方面是面向抽象类编程,而不是面向接口编程。
Struts 1要求自定义Action 类继承一个特定的抽象基类Action。
另一方面,Struts 1的 Action 依赖于 Servlet API,因为Struts 1 Action 的execute 方法中有HttpServletRequest 和HttpServletResponse 方法。
struts2漏洞原理
Struts2是一种基于Java的开源Web应用框架,它可以帮助开发者快速开发和部署复杂的Web应用程序。
然而,由于Struts2存在一些严重的安全缺陷,攻击者可以利用这些漏洞实施各种攻击,包括远程执行代码、SQL注入和命令注入等。
其中,Struts2远程执行代码漏洞是最为臭名昭著的漏洞之一,该漏洞存在于struts2框架的核心代码里,并且可以通过网络访问执行任意代码,从而导致服务器被完全控制。
攻击者通常通过构造恶意的请求来利用这个漏洞,例如在HTTP请求的头部或参数中插入特殊的代码片段,从而触发struts2的漏洞。
攻击者可以利用这个漏洞执行任意代码,包括删除文件、修改数据、窃取数据等操作。
其原因是,Struts2应用程序在接收到HTTP请求时,会将请求参数转换成Java 对象,并使用一种名为OGNL(Object-Graph Navigation Language)的表达式语言来解析这些对象。
攻击者可以在HTTP请求中注入恶意的OGNL表达式,使其在服务器上执行任意代码。
此外,Struts2还存在一些其他的安全漏洞,包括文件读取漏洞、XSS漏洞和跨站请求伪造(CSRF)漏洞等。
这些漏洞可以通过错误的配置、不安全的代码实现和其他不当的安全实践而导致。
因此,为保障应用程序的安全稳定运行,使用
Struts2开发Web应用程序的开发者需要注意代码的安全性和其他防御性措施的实现。
Sturuts2第一节、Struts2介绍Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。
其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。
Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与Servlet API完全脱离开,所以Struts 2可以理解为WebWork的更新产品。
虽然从Struts 1到Struts 2有着太大的变化,但是相对于WebWork,Struts 2的变化很小。
Struts2对Struts1进行了巨大的改进。
主要表现在如下几个方面: 在Action的实现方面:Struts1要求必须统一扩展自Action类,而Struts2中可以是一个POJO。
线程模型方面:Struts1的Action是单实例的,一个Action的实例处理所有的请求。
Struts2的Action是一个请求对应一个实例(每次请求时都新new出一个对象),没有线程安全方面的问题。
Servlet依赖方面:Struts1的Action依赖于Servlet API,比如Action的execute方法的参数就包括request和response对象。
这使程序难于测试。
Struts2中的Action不再依赖于Servlet API,有利于测试,并且实现TDD。
封装请求参数:Struts1中强制使用ActionForm对象封装请求的参数。
Struts2可以选择使用POJO类来封装请求的参数,或者直接使用Action的属性。
表达式语言方面:Struts1中整合了EL,但是EL对集合和索引的支持不强,Struts2整合了OGNL(Object Graph NavigationLanguage)。
绑定值到视图技术:Struts1使用标准的JSP,Struts2使用"ValueStack"技术。
Struts 2的基本流程Struts 2框架由3个部分组成:核心控制器FilterDispatcher、业务控制器和用户实现的业务逻辑组件。
在这3个部分里,Struts 2框架提供了核心控制器FilterDispatcher,而用户需要实现业务控制器和业务逻辑组件。
2.核心控制器:FilterDispatcherFilterDispatcher是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处理哪个用户请求,而class属性决定了该Action的实现类。
Struts 2用于处理用户请求的Action实例,并不是用户实现的业务控制器,而是Action代理——因为用户实现的业务控制器并没有与Servlet API耦合,显然无法处理用户请求。
而Struts 2框架提供了系列拦截器,该系列拦截器负责将HttpServletRequest请求中的请求参数解析出来,传入到Action中,并回调Action 的execute方法来处理用户请求。
显然,上面的处理过程是典型的AOP(面向切面编程)处理方式。
图3.19显示了这种处理模型。
图3.19 Struts 2的拦截器和Action从图3.19中可以看出,用户实现的Action类仅仅是Struts 2的Action代理的代理目标。
struts2 漏洞原理Struts2 是一种开放源代码的 Java Web 应用框架,被广泛应用于构建 Web 应用程序。
然而,Struts2 框架的一个漏洞却给许多应用程序带来了安全隐患。
本文将解释Struts2 漏洞的原理,并提供对于修复漏洞的一些方法。
Struts2 框架漏洞的原理Struts2 框架漏洞源于框架自身的设计缺陷。
设计缺陷使得攻击者可以利用恶意的输入来欺骗 Struts2 框架,从而在应用程序中执行任意的代码。
这种攻击就被称为“远程代码执行攻击”( Remote Code ExecutionAttack )。
Struts2 框架的漏洞主要是由于以下两点原因所导致的:· Struts2 使用了 OGNL (Object-Graph Navigation Language) 来解析 EL (Expression Language) 表达式,但没有正确地对表达式进行过滤,这使得恶意行为成为可能。
· Struts2 框架中的相当一部分功能是通过拦截器来实现的。
攻击者可以利用 Struts2 框架中的拦截器漏洞,绕过应用程序的权限控制来访问关键数据或者执行任意代码。
这两点都是 Struts2 框架漏洞的主因。
攻击者可以利用这两个漏洞来构建恶意的请求,并欺骗 Struts2 框架来执行恶意代码。
导致 Struts2 漏洞的例子为了更好地理解 Struts2 漏洞,可以通过一些例子来说明。
以下是一些可能导致 Struts2 框架漏洞的例子:· 未正确过滤用户输入。
比如在 Struts2 编译以数据表格为基础的应用程序时,如果没有过滤 script 标记,那么攻击者就可以通过执行JavaScript来远程控制代码,这就是远程代码执行攻击。
· XML SSI 漏洞。
攻击者可以通过将恶意代码嵌入到XML 消息中来利用该漏洞。
此漏洞允许攻击者利用Struts2 使用 XML 包含的注入布局中的初始资源解析器来绕过安全检查并完成任意文件读取/写入操作。
Struts部分: (1)1)为什么要学习Struts框架 (2)2)为什么使用MVC? (2)3)MVC在JavaWeb中的实现 (2)*4) Struts2的主要工作流程 (2)3.Struts2框架的历史 (4)*4.Struts2框架基本使用 (4)1.Struts2使用基本规则 (5)Struts2标签+OGNL表达式 (6)2)OGNL工作原理 (6)4.OGNL在Struts2中的应用 (8)1)xwork对ognl进行扩展和改造 (8)*2)ValueStack对象(参考valuestack.jpg) (9)*3)在JSP中访问ValueStack数据方法 (9)a.使用Struts标签+OGNL表达式 (9)b.使用EL表达式 (9)1.Struts2框架Action组件的核心应用 (10)1)Action组件基本原理 (10)*3)Action属性注入 (11)*4)如何利用一个Action处理多个请求 (11)1.前期课程回顾 (11)1.Result组件原理 (12)1)Result组件的作用 (12)2)Result组件实现规则 (12)*2.常用的几种Result组件 (13)2)Action响应 (13)1.Struts2标签 (14)1)通用标签 (14)2)表单标签 (15)2.拦截器组件 (15)*2)掌握自定义拦截器的使用 (16)Struts部分:======================Day01=========================1)为什么要学习Struts框架Struts框架是MVC设计模式的实现,基于Struts开发可以简化开发难度,提高开发效率。
2)为什么使用MVC?MVC是一个非常优秀的设计思想,基于该思想架构程序,可以提高程序的结构灵活性,便于日后维护、扩展和升级。
3)MVC在JavaWeb中的实现Servlet,JSP,Filter,JDBCa.原ShoppingCart程序就是一个MVC结构实现View实现部分:采用JSP组件实现Model实现部分:采用DAO、Entity等组件实现Controller实现部分:采用ActionServlet组件实现b.ShoppingCart程序虽然基于MVC,但结构还有一些问题:当请求数量比较多时,需要在Servlet中编写大量的if...else分支语句,而且Servlet代码量非常多。
继续框架的学习:Struts2:MVC ←→SpringMVC (不要打架)Oracle:DB ←→MySQL (一些语法还是有差异的,不要打架) Hiberante:DAO ←→MyBatis (都是实现持久化的,不要打架)SSH整合的一个简单的CRUD案例!SSH: spring struts2 hibernate1,Struts2框架是一个MVC框架M(javabean) V(view) C(前端(核心)控制器,业务控制器)2,阐述Struts2的框架原理请求到达前端(核心)控制器从ActionMapper对象中查找ActionMapping对象获得ActionInvoker对象并执行Action返回视图3,在编写Struts2代码之前再介绍一个框架(了解)Struts2是Struts1的一个”延伸”(其实两个框架没有关系)其实Struts2的前身并不是struts1,它其实来自另一框架:webworkStruts1这个框架的控制器是Servlet,这个框架与servlet是严重耦合的!(ActionServlet)Struts1中的控制器是单例的!Struts2跟Servlet无关!Struts2中的控制器是多例的!4,开发Struts2的项目(学框架就是用别人的东西,学别人定义的规则)1)引入JAR包commons-fileupload-*.*.jar : 实现文件上传commons-logging-*.*.jar : apache下提供的一个日志包freemarker-*.*.jar : 提供视图解析的ognl-*.*.jar: struts2中的一个新特性,提供对象图导航语言struts2-core-*.*.jar :struts2的核心包xwork-core-*.*.jar : webwork的核心包2)在开发之前介绍几个文件:在struts2-core-*.*.jar中文件:struts-default.xml满足约束:文件中定义了组件:<bean> : 是struts2中要使用的bean对象<result-type> : 定义了struts2中视图的响应方式<interceptor>: 定义拦截器在struts2-core-*.*.jar中的org.apache.struts2包中文件:default.properties文件中定义开发的语言环境以及url的默认扩展名3)开发31)配置核心控制器(是一个过滤器) 在web.xmlorg.apache.struts2.dispatcher.FilterDispatcher (过时)org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter (使用)32)View –> JSP编写自己的配置文件:在src下struts.xml满足33)编写ActionAction可以是一个普通的javabean,不需要实现任何接口或者继承任何类!(当然也可以去实现Action接口或者继承ActionSupport类)视图传值给Action:规则是视图组件的name必须和action中的属性名保持一致!!(注:方法的执行顺序Setter –> execute)5,如果在Action中要使用request,response,session,application对象,struts2框架提供了如下机制:去实现XxxAware接口6,如果在struts.xml中希望有多个action的name相同,可以使用不同package进行管理。
struts2反序列化原理Struts2 反序列化原理Struts2 是一个流行的 Java Web 应用程序框架,它使用 Java 反射和对象序列化来实现面向对象的开发模式。
在 Struts2 中,用户提交的数据将通过 HTTP 请求发送到服务器,并在服务器端进行处理。
其中一个重要的安全问题就是反序列化漏洞,攻击者可以利用这个漏洞执行恶意代码,从而导致严重的安全问题。
反序列化是将对象从字节流转换为内存对象的过程。
在 Struts2 中,用户提交的数据可以通过 HTTP 请求的参数传递给服务器端的Action 类。
这些参数将被解析并将其值设置到 Action 类的属性中,然后在服务器端进行处理。
由于 Struts2 使用了 Java 的反射机制,可以动态地创建对象并设置其属性值。
这就意味着,一个恶意用户可以通过构造特定的序列化对象来触发反序列化漏洞。
在 Struts2 中,反序列化漏洞主要是由于服务器端未正确验证和过滤用户提交的数据导致的。
攻击者可以构造一个特定的序列化对象,并将其作为参数传递给服务器端的 Action 类。
当服务器端尝试将该参数的值反序列化为对象时,恶意代码将被执行。
为了防止反序列化漏洞,开发者需要注意以下几点:1. 验证和过滤用户提交的数据:开发者应该对用户提交的数据进行验证和过滤,确保只有合法的数据才能被反序列化。
可以使用正则表达式、白名单等方式来验证和过滤数据。
2. 使用安全的序列化方式:在 Struts2 中,默认使用的是 Java 的序列化方式,这是一种不安全的方式。
开发者可以考虑使用其他安全的序列化方式,如 JSON、XML 等。
这些方式可以提供更好的安全性和灵活性。
3. 更新框架和依赖库:Struts2 框架和其依赖库经常会发布安全更新,开发者应及时更新框架和依赖库,以修复已知的安全漏洞。
4. 使用安全的配置:开发者应该确保 Struts2 的配置文件中没有暴露敏感信息,如数据库连接字符串、密码等。
struts2 工作原理
Struts2是一个用于构建Java web应用程序的开源框架。
它的
工作原理可以简单概括为以下几个步骤:
1. 客户端发送请求:当用户在浏览器中访问一个Struts2应用
程序的URL时,客户端会发送一个HTTP请求到服务器。
2. DispatcherServlet接收请求:服务器上运行的Servlet容器
(如Tomcat)接收到HTTP请求后,会通过web.xml配置文
件将请求发送给Struts2的核心组件DispatcherServlet。
3. 动作(Action)处理:DispatcherServlet根据配置文件中的信息,确定请求对应的Action类,并创建该类的实例。
Action是一
个POJO(Plain Old Java Object)类,用于处理具体的业务逻辑。
4. 结果视图(View)解析:Action类中的方法执行完业务逻辑后,会返回一个结果视图。
Struts2的结果视图可以是JSP页面、HTML、JSON等格式。
DispatcherServlet根据配置文件中指定
的结果视图解析器,将结果视图转化为最终的响应内容。
5. 结果响应:DispatcherServlet将最终的响应内容发送给客户端,客户端浏览器会将响应内容渲染并呈现给用户。
在这个过程中,Struts2框架提供了一系列的核心组件来协助
处理请求和响应,包括拦截器(Interceptor)、值栈(ValueStack)、类型转换器(Type Converter)等。
这些组件
能够帮助开发者处理表单提交、数据验证、数据转换等常见的web开发任务,从而简化开发过程。