struts2核心工作流程与原理
struts2执行流程及工作原理
struts2执⾏流程及⼯作原理1 ⽤户发送请求;2 这个请求经过⼀系列的过滤器(Filter)(这些过滤器中有⼀个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin)3 接着FilterDispatcher被调⽤,FilterDispatcher询问ActionMapper来决定这个请求是否需要调⽤某个Action ;4 如果需要处理,ActionMapper会通知FilterDispatcher,需要处理这个请求,FilterDispatcher会停⽌过滤器链以后的部分,(这也就是为什么,FilterDispatcher应该出现在过滤器链的最后的原因)。
FilterDispatcher把请求的处理交给ActionProxy ;5 ActionProxy通过Configuration Manager询问框架的配置⽂件struts.xml,找到需要调⽤的Action类。
(在服务器启动的时候,ConfigurationManager就会把struts.xml中的所有信息读到内存⾥,并缓存,当ActionProxy带着URL向他询问要运⾏哪个Action的时候,就可以直接匹配、查找并回答了)6 ActionProxy创建⼀个ActionInvocation的实例。
7 ActionInvocation实例使⽤命名模式来调⽤,在调⽤Action的过程前后,涉及到⼀系列相关拦截器(Intercepter)的调⽤。
8 ⼀旦Action执⾏完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。
返回结果通常是(但不总是,也可能是另外的⼀个Action链)⼀个需要被表⽰的JSP或者FreeMarker的模版。
在表⽰的过程中可以使⽤Struts2 框架中继承的标签。
9 最后,ActionInvocation对象倒序执⾏拦截器。
struts2的工作原理
struts2的工作原理
Struts2是一个基于Java的Web应用程序框架,其工作原理是
基于MVC(Model-View-Controller)设计模式。
它主要由以
下几个组件构成:
1. 客户端发起请求:用户在浏览器中输入URL地址或者点击
超链接等操作发起请求。
2. 前端控制器(Front Controller)处理请求:当用户发起请求时,前端控制器(通常是一个Servlet)接收到请求,并负责
处理该请求。
3. 配置文件解析:前端控制器会根据配置文件(通常是struts.xml)对请求进行解析,确定要执行的控制器动作和视图。
4. 控制器动作执行:前端控制器会根据配置文件中指定的控制器动作,调用相应的Action处理业务逻辑。
Action是一个
Java类,负责接收请求参数、调用服务层逻辑处理数据,并将处理结果封装进Action的属性中。
5. 视图生成:当控制器动作执行完成后,前端控制器会根据配置文件中指定的视图,调用相应的视图模板生成最终的
HTML响应。
6. 响应返回客户端:生成的HTML响应会被前端控制器发送
回客户端,显示在用户的浏览器中。
总结来说,Struts2的工作原理就是通过前端控制器来处理用
户请求,根据配置文件解析请求,并调用相应的Action处理
业务逻辑,最后生成HTML响应返回给客户端。
这种设计模
式的好处是将业务逻辑与界面分离,提高了代码的可维护性和可测试性。
02-Struts2的工作流程及配置文件
Struts2的工作流程及配置文件--- ---Struts2.0的流程图从图中看到Struts2的工作流程如下:1.服务器接收到的请求首先经过一组过滤器链(实际中的其他过滤器可能还包括诸如Spring 的字符过滤器CharactorEncodingFilter、V elocity的过滤器等,一般FilterDispatcher位于过滤器的最后一个执行),过滤器链按照你在web.xml中的配置顺序在接收客户请求时顺序执行,在向客户发送响应时反序执行,Struts2的核心FilterDispatcher在web.xml中的配置如下:<filter><filter-name>setCharactor</filter-name><!-- 配置字符过滤--><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param></filter><filter><filter-name>struts2</filter-name><!-- 配置Struts2过滤器--><filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> </filter><filter-mapping><filter-name>setCharactor</filter-name><url-pattern>/*</url-pattern></filter-mapping><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping>注意:如果你使用的是W ebLogic6.1作为应用服务器,需要使用FilterDispatcherCompatW eblogic61替代FilterDispatcher。
struts2基本流程及原理
Struts2基本流程及原理1.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(面向切面编程)处理方式。
用户实现的Action类仅仅是Struts 2的Action代理的代理目标。
用户实现的业务控制器(Action)则包含了对用户请求的处理。
Struts 2详细工作流程 (1)
Struts 2详细工作流程Struts 2框架本身大致可以分为3个部分:核心控制器FilterDispatcher、业务控制器Action和用户实现的企业业务逻辑组件。
3.1.1 核心控制器FilterDispatcher核心控制器FilterDispatcher是Struts 2框架的基础,包含了框架内部的控制流程和处理机制。
业务控制器Action和业务逻辑组件是需要用户来自己实现的。
用户在开发Action和业务逻辑组件的同时,还需要编写相关的配置文件,供核心控制器FilterDispatcher来使用。
Struts 2的工作流程相对于Struts 1要简单,与WebWork框架基本相同,所以说Struts 2是WebWork的升级版本。
Struts 2框架按照模块来划分,可以分为Servlet Filters、Struts核心模块、拦截器和用户实现部分。
Struts 2框架结构图如图3.1所示。
图3.1 Struts 2框架结构图一个请求在Struts 2框架中的处理大概分为以下几个步骤。
客户端提交一个(HttpServletRequest)请求,如上文在浏览器中输入http://localhost: 8080/bookcode/ch2/Reg.action就是提交一个(HttpServletRequest)请求。
请求被提交到一系列(主要是3层)的过滤器(Filter),如(ActionContextCleanUp、其他过滤器(SiteMesh等)、FilterDispatcher)。
注意:这里是有顺序的,先ActionContext CleanUp,再其他过滤器(Othter Filters、SiteMesh等),最后到FilterDispatcher。
FilterDispatcher是控制器的核心,就是MVC的Struts 2实现中控制层(Controller)的核心。
FilterDispatcher询问ActionMapper是否需要调用某个Action来处理这个(HttpServlet Request)请求,如果ActionMapper决定需要调用某个Action,FilterDispatcher则把请求的处理交给ActionProxy。
struts2工作流程
struts2工作流程Struts2工作流程摘要:Struts2是一个基于MVC(Model-View-Controller)设计模式的web应用程序开发框架。
本文将介绍Struts2的工作流程,包括请求的处理过程、核心组件的作用以及如何扩展和定制框架。
引言:在web应用程序开发过程中,使用一个成熟的框架可以大大提高开发效率和代码质量。
Struts2是一个功能强大、易于使用的开源框架,已经被广泛应用于Java EE开发领域。
了解Struts2的工作流程能够帮助开发者更好地理解框架的运作原理,从而更好地设计和开发web应用程序。
一、请求的处理过程当客户端发起一个请求时,Struts2框架会按照特定的流程来处理请求并生成相应的响应。
下面是Struts2请求处理过程的简要说明:1. 客户端发送请求。
2. 服务器接收请求并将其传递给Servlet容器。
3. Servlet容器(如Tomcat)将请求交给Struts2的过滤器(StrutsPrepareAndExecuteFilter)进行处理。
4. 过滤器通过解析请求的URL来确定该由哪一个Action类来处理请求。
5. 过滤器创建一个ActionInvocation对象,将该对象传递给Struts2的核心控制器(ActionProxy)。
6. 核心控制器根据Action类的配置信息和请求参数来调用对应的Action类的方法。
7. Action类的方法执行相应的业务逻辑,并返回一个结果(Result)对象。
8. 核心控制器将结果传递给结果视图(Result View),最终生成响应。
9. 响应返回给Servlet容器,然后传递给客户端。
二、核心组件的作用Struts2框架中有几个核心组件,这些组件共同协作来处理请求并返回响应。
下面我们来看一下它们的作用:1. 过滤器(StrutsPrepareAndExecuteFilter):负责处理所有传入请求并将其交给适当的Action类进行处理。
struts2 的工作原理
struts2 的工作原理Struts2是一个基于Java的Web应用框架,其核心原理是基于MVC(模型-视图-控制器)模式进行开发。
它的工作原理可以简要概括如下:1. 客户端通过浏览器发送请求至Web服务器,请求的URL映射到Struts2框架的前端控制器(Front Controller)。
2. 前端控制器负责接收请求并进行初步处理,它会根据Struts2配置文件中定义的拦截器(Interceptors)和映射表(Mapping)来确定如何处理请求。
3. 拦截器是Struts2框架中的一个重要组件,用于对请求进行预处理和后处理。
它可以用于验证用户身份、记录日志、数据验证等。
拦截器可以按照一定的顺序链式执行,每个拦截器可以对请求进行修改或决定是否继续执行下一个拦截器。
4. 映射表用于将请求映射到对应的Action(控制器)及其相关方法上。
Struts2框架会根据请求的URL、请求参数等信息进行匹配。
5. Action是Struts2框架中的控制器组件,负责接收请求、处理业务逻辑并生成响应。
在执行Action方法之前,Struts2框架会将请求参数绑定到Action对象的对应属性上。
6. Action执行后,会返回一个结果视图(View)路径或逻辑名。
Struts2框架会根据配置文件中的Result定义,将该结果视图转发或重定向给客户端。
7. 结果视图可以是一个JSP页面、一个HTML文件、一个JSON数据等。
客户端浏览器会接收到结果视图并进行展示。
总的来说,Struts2的工作原理是通过前端控制器接收请求,经过拦截器的预处理和后处理,根据映射表将请求转发给对应的Action进行处理,最后将处理结果返回给客户端浏览器展示。
这种基于MVC模式的设计能够有效地将业务逻辑与用户界面分离,提高了代码的可维护性和可重用性。
struts2工作原理
struts2工作原理Struts2是一个基于MVC设计模式的开源Web应用框架,它的工作原理是通过一系列的组件和机制来实现对Web应用程序的控制和管理。
在深入了解Struts2工作原理之前,我们先来了解一下MVC设计模式。
MVC是Model-View-Controller的缩写,它是一种软件架构模式,用于将应用程序的逻辑层、数据层和表现层分离开来。
在MVC 模式中,Model代表应用程序的数据和业务逻辑,View代表用户界面,Controller负责处理用户的输入并作出相应的反应。
在Struts2中,请求首先由前端控制器DispatcherServlet接收,DispatcherServlet将请求分发给相应的Action。
Action是Struts2框架中的核心组件,它负责处理用户的请求,并调用相应的业务逻辑处理数据。
在处理完业务逻辑之后,Action将结果返回给DispatcherServlet,DispatcherServlet再将结果渲染到用户界面上。
在Struts2中,配置文件也扮演着非常重要的角色。
通过配置文件,我们可以将请求映射到相应的Action,配置拦截器来处理用户的请求,以及配置全局结果集来统一处理Action的返回结果。
所有这些配置都是通过XML文件或注解来实现的。
另外,拦截器也是Struts2框架中非常重要的组件之一。
拦截器可以在Action执行之前或之后进行一些预处理或后处理操作,比如日志记录、权限验证、异常处理等。
通过配置拦截器栈,我们可以对请求进行统一的处理,提高代码的复用性和可维护性。
除了以上提到的组件和机制,Struts2还提供了丰富的标签库和插件,用于简化开发工作。
标签库可以帮助开发人员快速构建用户界面,而插件则可以扩展框架的功能,满足不同项目的需求。
总的来说,Struts2框架的工作原理可以概括为,前端控制器接收用户请求,将请求分发给相应的Action,Action处理业务逻辑并返回结果,DispatcherServlet将结果渲染到用户界面上。
struts2框架的原理和应用
Struts2框架的原理和应用1. 什么是Struts2框架Struts2是一个基于Java EE的开源Web应用框架,是Struts框架的升级版。
它通过MVC设计模式实现了Web应用开发的分层,将业务逻辑、数据模型和用户界面分离,使得代码更加清晰、易于维护。
2. Struts2框架的原理Struts2框架的原理主要包括以下几个关键点:MVC设计模式Struts2采用了MVC(Model-View-Controller)设计模式,其中:•模型(Model):负责管理应用程序的数据和业务逻辑。
•视图(View):负责显示数据给用户。
•控制器(Controller):负责处理用户输入、调用模型和视图等。
核心组件Struts2框架包含以下核心组件:•拦截器(Interceptor):负责在请求前后进行统一处理,可以用来进行身份验证、日志记录等操作。
•动作(Action):负责处理用户请求,包括接收请求参数、调用业务逻辑方法等。
•结果(Result):负责生成并返回视图,可以是JSP、Freemarker、JSON等。
•值栈(ValueStack):用于存储Action处理过程中的数据,支持OGNL表达式读取和赋值操作。
•配置文件(struts.xml):用于配置拦截器、动作、结果等,实现URL与处理类之间的映射关系。
工作流程Struts2框架的工作流程如下:1.客户端发送请求到Struts2框架的前端控制器(例如:DispatcherFilter)。
2.前端控制器根据请求的URL找到对应的处理类(Action)。
3.前端控制器将请求参数、上下文信息等传递给Action,同时执行拦截器的前置处理逻辑。
4.Action处理用户请求,并根据业务逻辑生成相应的结果。
5.前端控制器将结果传递给结果组件,选择合适的视图进行渲染。
6.前端控制器将渲染后的视图返回给客户端。
3. Struts2框架的应用Struts2框架在Web应用开发中具有广泛的应用,以下是一些主要的应用场景:1. 构建Web应用程序Struts2框架提供了许多构建Web应用程序的工具和技术,包括表单验证、国际化、文件上传等功能。
struts2流程
struts2流程Struts2是一种基于Java的Web应用程序框架,它是在Servlet、JSP、JavaBean等技术的基础上开发的,目的是为了简化Web应用程序的开发和维护过程。
Struts2框架采用MVC(模型-视图-控制器)的架构模式,通过将用户请求分发给相应的控制器,然后根据控制器的指令进行处理,再将结果返回给用户进行展示。
下面我们将详细介绍Struts2的工作流程。
Struts2的工作流程可以分为以下几个步骤:1. 客户端发送请求:当用户通过浏览器访问某个URL地址时,客户端会生成一个HTTP请求,该请求会发送给服务器。
2. DispatcherServlet拦截请求:服务器接收到请求后,DispatcherServlet作为Struts2的核心控制器将拦截该请求。
3. 根据请求寻找相应的Action:DispatcherServlet会根据请求的URL地址和配置文件中的映射规则,找到匹配的Action类。
4. 创建Action实例:一旦找到了匹配的Action类,Struts2会创建该Action类的一个实例。
5. 封装请求参数:Struts2框架会自动将请求中的参数封装到Action实例中的属性中,以便在后续的处理中使用。
6. 调用Action方法:一旦请求参数被封装好,Struts2框架会调用对应Action类中的相应方法来处理该请求。
在Action方法中,可以进行一些业务逻辑的处理,并返回相应的结果。
7. 响应结果处理:Action方法的执行结果会被封装到一个Result对象中,该对象包含了结果的类型和数据。
Struts2框架会从配置文件中查找对应的结果视图,并将结果数据传递给视图进行展示。
8. 渲染视图:Struts2会将结果视图进行渲染,然后将渲染后的内容发送给客户端的浏览器。
9. 响应结果发送给客户端:服务器会将渲染后的内容作为HTTP响应发送给客户端的浏览器,浏览器接收后进行展示。
struts2工作流程
struts2工作流程Struts2工作流程。
Struts2是一个开源的Web应用框架,它基于MVC(Model-View-Controller)设计模式,用于简化Java Web应用程序的开发。
它提供了一套强大的工具和库,可以帮助开发人员构建灵活、可维护的Web应用程序。
在本文中,我们将详细介绍Struts2的工作流程,包括请求的处理过程、数据的传递方式以及页面的渲染流程。
首先,当用户发送一个HTTP请求时,请求会被DispatcherServlet拦截并交给Struts2的核心控制器ActionProxy进行处理。
ActionProxy会根据请求的URL找到对应的Action类,并执行其对应的方法。
在执行Action方法之前,Struts2会对请求参数进行封装,将其转换成Action类的属性,并注入到Action对象中。
这样,Action类就可以获取到用户提交的数据,并进行相应的处理。
接下来,Action类会根据业务逻辑进行处理,并返回一个结果字符串。
这个结果字符串会被解析成一个逻辑视图,然后由Result对象进行渲染。
在渲染过程中,Struts2会根据配置文件中的结果类型,选择合适的渲染方式,比如将数据填充到JSP页面中,或者返回一个JSON格式的数据。
最终,渲染后的结果会被返回给用户,完成整个请求-响应的过程。
在整个工作流程中,Struts2提供了丰富的拦截器机制,可以在请求的不同阶段进行处理。
拦截器可以用于权限控制、日志记录、异常处理等,可以很好地帮助开发人员进行业务逻辑的分离和复用。
此外,Struts2还支持国际化和主题切换,可以根据用户的偏好提供不同的界面显示效果。
总的来说,Struts2的工作流程非常清晰和灵活,它将请求处理、业务逻辑和页面渲染等功能进行了良好的分离,使得Web应用程序的开发变得更加简单和高效。
通过深入了解Struts2的工作流程,开发人员可以更好地利用其提供的功能和特性,构建出更加稳健和可扩展的Web应用程序。
struts2的工作原理
struts2的工作原理Struts2是一个基于Java的开源Web应用程序框架,用于快速构建企业级Web应用程序。
它采用了模型-视图-控制器(MVC)架构模式,通过统一的控制器来处理用户的请求,并将结果返回给视图进行展示。
本文将介绍Struts2的工作原理,包括请求的处理流程、组件的作用以及如何配置和使用Struts2。
一、Struts2的请求处理流程1. 客户端发送HTTP请求到服务器。
2. 服务器接收到请求后,将请求交给Struts2的过滤器(StrutsPrepareAndExecuteFilter)进行处理。
3. 过滤器根据请求的URL找到对应的Action,并将请求参数封装到Action的属性中。
4. 过滤器调用Action的execute()方法进行业务逻辑处理。
5. Action执行完毕后,返回一个结果视图。
6. 过滤器根据结果视图的配置,将结果返回给客户端。
二、Struts2的组件作用1. Action:Action是Struts2框架的核心组件,用于处理用户的请求。
每个Action类对应一个业务功能,其中的方法对应不同的请求处理逻辑。
2. Interceptor:Interceptor是Struts2框架的拦截器,用于在Action执行前后进行一些额外的处理。
例如,可以在Interceptor中进行身份验证、日志记录等操作。
3. Result:Result是Struts2框架的结果视图,用于将Action的处理结果展示给用户。
可以配置不同的Result类型,如跳转到指定页面、返回JSON数据等。
4. ValueStack:ValueStack是Struts2框架的数据栈,用于存储Action中的属性。
在页面中可以通过表达式语言访问ValueStack 中的数据。
三、Struts2的配置和使用1. 配置文件:Struts2的配置文件是struts.xml,用于配置Action、Interceptor、Result等组件的相关属性。
struts2核心工作流程与原理
struts2核心工作流程与原理收藏这是Struts2官方站点提供的Struts 2 的整体结构。
一个请求在Struts2框架中的处理大概分为以下几个步骤:1.客户端提起一个(HttpServletRequest)请求,如上文在浏览器中输入”http://localhost:8080/TestMvc/add.action”就是提起一个(HttpServlet Request)请求。
2.请求被提交到一系列(主要是三层)的过滤器(Filter),如(ActionContextCleanUp、其他过滤器(SiteMesh等)、FilterDispatcher)。
注意这里是有顺序的,先ActionContextCleanUp,再其他过滤器(SiteMesh 等)、最后到FilterDispatcher。
3.FilterDispatcher是控制器的核心,就是mvc中c控制层的核心。
下面粗略的分析下我理解的FilterDispatcher工作流程和原理:FilterDispatcher 进行初始化并启用核心doFilter其代码如下:1.public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException ...{2. HttpServletRequest request = (HttpServletRequest) req;3. HttpServletResponse response = (HttpServletResponse) res;4. ServletContext servletContext = filterConfig.getServletContext();5. // 在这里处理了HttpServletRequest和HttpServletResponse。
struts2、struts1的执行流程、工作原理
Struts2框架本身大致可以分为3个部分:核心控制器FilterDispatcher、业务控制器Action和用户实现的企业业务逻辑组件。
核心控制器FilterDispatcher是Struts 2框架的基础,包含了框架内部的控制流程和处理机制。
业务控制器Action 和业务逻辑组件是需要用户来自己实现的。
用户在开发Action 和业务逻辑组件的同时,还需要编写相关的配置文件,供核心控制器FilterDispatcher 来使用。
Struts2的工作流程相对于Strutsl要简单,与WebWork框架基本相同,所以说Struts2 是WebWork 的升级版本。
基本扼要流程如下:1、客户端浏览器发出HTTP请求。
2、根据web.xml 配置,该请求被FilterDispatcher 接收。
3、根据struts.xml 配置,找到需要调用的Action 类和方法,并通过IoC 方式,将值注入给Aciton。
4、Action 调用业务逻辑组件处理业务逻辑,这一步包含表单验证。
5、Action 执行完毕,根据struts.xml 中的配置找到对应的返回结果result,并跳转到相应页面。
6、返回HTTP响应到客户端浏览器。
Struts 工作机制?为什么要使用Struts?工作机制:Struts 的工作流程:在web应用启动时就会加载初始化ActionServlet,ActionServlet从struts-config.xml 文件中读取配置信息,把它们存放到各种配置对象当ActionServlet 接收到一个客户请求时, 将执行如下流程.-(1)检索和用户请求匹配的ActionMapping 实例,如果不存在,就返回请求路径失效信息;-(2)如果ActionForm 实例不存在,就创建一个ActionForm 对象,把客户提交的表单数据保存到ActionForm 对象中;-(3)根据配置信息决定是否需要表单验证.如果需要验证,就调用ActionForm 的validate()方法;-(4)如果ActionForm的validate。
struts2执行流程
struts2执行流程Struts2执行流程。
Struts2是一个用于开发Web应用程序的开源框架,它基于MVC(Model-View-Controller)设计模式,提供了一种简单而强大的方式来构建灵活的、可维护的Web应用程序。
在本文中,我们将探讨Struts2的执行流程,以帮助开发人员更好地理解这个框架的工作原理。
1. 请求的接收。
当用户在浏览器中输入URL并发送请求时,该请求首先到达Servlet容器。
在Struts2中,所有的请求都由一个名为“StrutsPrepareAndExecuteFilter”的过滤器来拦截。
这个过滤器是Struts2框架的核心组件之一,它负责拦截所有的HTTP请求,并将它们转发给Struts2的核心控制器。
2. 控制器的处理。
一旦请求被Struts2的过滤器拦截,它会被传递给控制器。
在Struts2中,控制器是一个名为“ActionProxy”的对象,它负责查找并执行与请求对应的Action。
Action是一个用于处理特定请求的Java类,它包含了与请求相关的业务逻辑和数据处理代码。
3. Action的执行。
一旦ActionProxy找到了与请求对应的Action,它就会执行这个Action。
在执行过程中,Struts2框架会自动地将请求参数映射到Action的属性中,并调用Action中的相应方法来处理请求。
在Action的执行过程中,可以进行各种业务逻辑的处理,例如数据库操作、数据计算、页面跳转等。
4. 结果的返回。
当Action执行完成后,它会返回一个结果。
结果通常是一个视图,用于展示处理结果给用户。
在Struts2中,结果是通过一个名为“Result”的对象来表示的,它包含了视图的名称、类型和其他相关信息。
一旦Action返回了结果,Struts2框架会根据结果的信息来选择合适的视图,并将处理结果呈现给用户。
5. 视图的渲染。
最后,Struts2框架会将选择的视图渲染成HTML,并将其返回给浏览器。
struts2、struts1的执行流程、工作原理
Struts2框架本身大致可以分为3个部分:核心控制器FilterDispatcher、业务控制器Action和用户实现的企业业务逻辑组件。
核心控制器FilterDispatcher是Struts 2框架的基础,包含了框架内部的控制流程和处理机制。
业务控制器Action 和业务逻辑组件是需要用户来自己实现的。
用户在开发Action 和业务逻辑组件的同时,还需要编写相关的配置文件,供核心控制器FilterDispatcher来使用。
Struts2的工作流程相对于Struts1要简单,与WebWork框架基本相同,所以说Struts2是WebWork的升级版本。
基本扼要流程如下:1、客户端浏览器发出HTTP请求。
2、根据web.xml配置,该请求被FilterDispatcher接收。
3、根据struts.xml配置,找到需要调用的Action类和方法,并通过IoC方式,将值注入给Aciton。
4、Action调用业务逻辑组件处理业务逻辑,这一步包含表单验证。
5、Action执行完毕,根据struts.xml中的配置找到对应的返回结果result,并跳转到相应页面。
6、返回HTTP响应到客户端浏览器。
Struts工作机制?为什么要使用Struts?工作机制:Struts的工作流程:在web应用启动时就会加载初始化ActionServlet,ActionServlet从struts-config.xml文件中读取配置信息,把它们存放到各种配置对象当ActionServlet接收到一个客户请求时,将执行如下流程.-(1)检索和用户请求匹配的ActionMapping实例,如果不存在,就返回请求路径失效信息;-(2)如果ActionForm实例不存在,就创建一个ActionForm对象,把客户提交的表单数据保存到ActionForm对象中;-(3)根据配置信息决定是否需要表单验证.如果需要验证,就调用ActionForm 的validate()方法;-(4)如果ActionForm的validate()方法返回null或返回一个不包含ActionMessage的ActuibErrors对象,就表示表单验证胜利;-(5)ActionServlet根据ActionMapping所包含的映射信息决定将请求转发给哪个Action,如果相应的Action实例不存在,就先创建这个实例,然后调用Action 的execute()方法;-(6)Action的execute()方法返回一个ActionForward对象,ActionServlet在把客户请求转发给ActionForward对象指向的JSP组件;-(7)ActionForward对象指向JSP组件生成动态网页,返回给客户;为什么要用:JSP、Servlet、JavaBean技术的出现给我们构建强健的企业应用系统提供了可能。
struts2工作流程
struts2工作流程Struts2工作流程。
Struts2是一个基于MVC设计模式的开源Web应用框架,它是Struts1的升级版本。
它的工作流程包括请求的接收、处理和响应,下面我们来详细了解一下Struts2的工作流程。
1. 拦截器的拦截。
在Struts2中,请求首先会经过一系列的拦截器。
拦截器是Struts2框架的核心组件,它负责拦截请求并在请求的处理过程中执行一些特定的任务,比如验证用户身份、处理异常等。
在拦截器的拦截下,请求会被传递给Action类进行处理。
2. Action类的执行。
Action类是Struts2框架中用于处理请求的核心组件,它包含了请求的处理逻辑。
当请求经过拦截器后,会被传递给相应的Action类进行处理。
在Action类中,我们可以编写业务逻辑代码,比如从数据库中获取数据、处理用户提交的表单数据等。
3. 结果的返回。
在Action类处理完请求后,会返回一个结果。
结果可以是一个JSP页面、一个JSON数据,甚至是一个文件流。
Struts2框架会根据Action类返回的结果类型,选择合适的结果视图进行展示。
这样,用户就能够看到请求处理的结果了。
4. 结果的展示。
最后,Struts2框架会将处理完的结果展示给用户。
如果是一个JSP页面,框架会将页面渲染出来;如果是一个JSON数据,框架会将数据返回给前端;如果是一个文件流,框架会将文件发送给用户。
这样,用户就能够看到请求处理的结果了。
总结。
综上所述,Struts2的工作流程包括拦截器的拦截、Action类的执行、结果的返回和结果的展示。
通过这样的流程,Struts2能够很好地处理用户的请求,并将处理结果展示给用户。
希望通过本文的介绍,能够让大家对Struts2的工作流程有一个更加清晰的认识。
Struts2工作原理(实例)和Struts工作原理
Struts2工作原理(实例)和Struts工作原理目录Struts2 官方工作流程 (1)Struts2运行原理(实例—详细说明其处理流程) (2)Struts工作原理 (6)Struts2 官方工作流程上图来源于Struts2官方站点,是Struts 2 的整体结构。
1.初始的请求通过一条标准的过滤器链,到达servlet 容器( 比如tomcat 容器,WebSphere 容器)。
2.过滤器链包括可选的ActionContextCleanUp 过滤器,用于系统整合技术,如SiteMesh 插件。
3.接着调用FilterDispatcher,FilterDispatcher 查找ActionMapper,以确定这个请求是否需要调用某个Action。
4.如果ActionMapper 确定需要调用某个Action,FilterDispatcher 将控制权交给ActionProxy。
5.ActionProxy 依照框架的配置文件(struts.xml),找到需要调用的Action 类。
6.ActionProxy 创建一个ActionInvocation 的实例。
ActionInvocation 先调用相关的拦截器(Action 调用之前的部分),最后调用Action。
7.一旦Action 调用返回结果,ActionInvocation 根据struts.xml 配置文件,查找对应的转发路径。
返回结果通常是(但不总是,也可能是另外的一个Action 链)JSP 技术或者FreeMarker 的模版技术的网页呈现。
Struts2 的标签和其他视图层组件,帮助呈现我们所需要的显示结果。
在此,我想说清楚一些,最终的显示结果一定是HTML 标签。
标签库技术和其他视图层技术只是为了动态生成HTML 标签。
8.接着按照相反次序执行拦截器链( 执行Action 调用之后的部分)。
最后,响应通过滤器链返回(过滤器技术执行流程与拦截器一样,都是先执行前面部分,后执行后面部)。
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开发任务,从而简化开发过程。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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。
DispatcherUtils du = DispatcherUtils.getInstance();du.prepare(request, response);//正如这个方法名字一样进行locale、encoding 以及特殊request parameters设置try {request = du.wrapRequest(request, servletContext);//对request进行包装} catch (IOException e) {String message = "Could not wrap servlet request with MultipartReques tWrapper!";LOG.error(message, e);throw new ServletException(message, e);}ActionMapperIF mapper = ActionMapperFactory.getMapper();//得到action的mapperActionMapping mapping = mapper.getMapping(request);// 得到action 的 mappingif (mapping == null) {// there is no action in this request, should we look for a static re source?String resourcePath = RequestUtils.getServletPath(request);if ("".equals(resourcePath) && null != request.getPathInfo()) {resourcePath = request.getPathInfo();}if ("true".equals(Configuration.get(WebWorkConstants.WEBWORK_SERVE_ST ATIC_CONTENT))&& resourcePath.startsWith("/webwork")) {String name = resourcePath.substring("/webwork".length());findStaticResource(name, response);} else {// this is a normal request, let it pass throughchain.doFilter(request, response);}// WW did its job herereturn;}Object o = null;try {//setupContainer(request);o = beforeActionInvocation(request, servletContext);//整个框架最最核心的方法,下面分析du.serviceAction(request, response, servletContext, mapping);} finally {afterActionInvocation(request, servletContext, o);ActionContext.setContext(null);}}du.serviceAction(request, response, servletContext, mapping);//这个方法询问ActionMapper是否需要调用某个Action来处理这个(request)请求,如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxypublic void serviceAction(HttpServletRequest request, HttpServletResponse respo nse, String namespace, String actionName, Map requestMap, Map parameterMap, Map ses sionMap, Map applicationMap) {HashMap extraContext = createContextMap(requestMap, parameterMap, session Map, applicationMap, request, response, getServletConfig()); //实例化Map请求,询问ActionMapper是否需要调用某个Action来处理这个(request)请求extraContext.put(SERVLET_DISPATCHER, this);OgnlValueStack stack = (OgnlValueStack) request.getAttribute(ServletActio nContext.WEBWORK_VALUESTACK_KEY);if (stack != null) {extraContext.put(ActionContext.VALUE_STACK,new OgnlValueStack(stack)) ;}try {ActionProxy proxy = ActionProxyFactory.getFactory().createActionProxy (namespace, actionName, extraContext);//这里actionName是通过两道getActionName解析出来的, FilterDispatcher把请求的处理交给ActionProxy,下面是ServletDispatcher的 TODO:request.setAttribute(ServletActionContext.WEBWORK_VALUESTACK_KEY, pro xy.getInvocation().getStack());proxy.execute();//通过代理模式执行ActionProxyif (stack != null){request.setAttribute(ServletActionContext.WEBWORK_VALUESTACK_KEY, stack);}} catch (ConfigurationException e) {log.error("Could not find action", e);sendError(request, response, HttpServletResponse.SC_NOT_FOUND, e);} catch (Exception e) {log.error("Could not execute action", e);sendError(request, response, HttpServletResponse.SC_INTERNAL_SERVER_E RROR, e);}}4.FilterDispatcher询问ActionMapper是否需要调用某个Action来处理这个(request)请求,如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy。
5.ActionProxy通过Configuration Manager(struts.xml)询问框架的配置文件,找到需要调用的Action类.如上文的struts.xml配置<?xml version="1.0" encoding="GBK"?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configura tion 2.0//EN" "/dtds/struts-2.0.dtd"><struts><include file="struts-default.xml"/><package name="struts2" extends="struts-default"><action name="add"class="edisundong.AddAction"><result>add.jsp</result></action></package></struts>如果提交请求的是add.action,那么找到的Action类就是edisundong.AddAction。