struts2核心工作流程与原理

合集下载

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的工作原理
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的工作流程及配置文件

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基本流程及原理

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详细工作流程 (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工作流程摘要: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 的工作原理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工作原理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将结果渲染到用户界面上。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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。

相关文档
最新文档