Struts2的运行流程(Java私塾)
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工作原理及配置MyEclips运行第一个Struts2项目

Struts2工作原理及配置MyEclips运行第一个Struts2项目配置struts2在MyEclipse中的环境:启动MyEclips(本文使用的版本为8.0GA),在启动时设定工作目录名为D:\test,启动后新建一个Web Project,假如取名为struts2,并在J2EE Specification Level选项中选择Java EE 5.0,单击finish。
建好后把事先下载的struts2程序包(本文使用的版本为2.2.1.1)解压后打开可看到该struts2开发包中有4个文件夹:apps是一些实例文件;docs是帮助文档;lib是开发包;src是开源的源代码。
进入lib文件夹中,选择开发struts2须最小配置的几个包:commons-fileupload-1.2.1.jar(处理文件上传的)、commons-io-1.3.2.jar(是commons-fileupload-1.2.1.jar所依赖的)、commons-logging-1.0.4.jar(关于日志处理的)、ognl-3.0.jar(对象图的表达语言)、struts2-core-2.2.1.1.jar(struts2的核心包)、xwork-core-2.2.1.1.jar(基于xwork的内核)、freemarker-2.3.16.jar()把这个7个jar直接拷贝粘贴到刚才新建的web工程中的:struts2/WebRoot/WEB-INF/lib 中,此时MyEclipse会自动新建一个引用库夹Referenced Libraries,所拷贝的几个包自动进入其中。
修改WebRoot/WEB-INF/web.xml的内容为:<?xml version="1.0"encoding="UTF-8"?><web-app version="2.5"xmlns="/xml/ns/javaee"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/xml/ns/javaee/xml/ns/javaee/web-app_2_5.xsd"><filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepare AndExecuteFilter</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping></web-app>该文件是在tomcat启动时就会自动解析的,而该配置是把所有请求都交给org.apache.struts2.dispatcher.ng.filter.StrusPrepareAndExecuteFilter类去处理,而此类是strtus2的类,所以也就把web应用纳入了struts2的范围之内了。
Struts2 技术内幕(源码分析)——Struts2执行流程_第2部分

图 10-2 StrutsPrepareFilter 和 StrutsExecuteFilter 所在位置 如果把这两个类与 Http 请求处理的两个执行阶段联系在一起,我们就会发现 StrutsPrepareFilter 和 StrutsExecuteFilter 正是这两个执行阶段的物理划分的具体表现。其中,StrutsPrepareFilter 负责 Struts2 的初始化工作和每个 Http 请求的预处理工作,而 StrutsExecuteFilter 则负责 Http 请求的实际逻辑处理。 Struts2 在这里将两个执行阶段进行明确的物理划分有着更加深远的意义。 因为我们的应用总是存在 一 种 需 求 , 需 要 在 Struts2 的 两 个 执 行 阶 段 之 间 插 入 特 定 的 逻 辑 片 段 ( 比 如 我 们 有 时 需 要 对 HttpServletRequest 或者 HttpServletResponse 对象进行额外的处理等) 。这个时候,Struts2 额外定义的这 两个小兄弟就可以派上用场了。因为只需要在 web.xml 中依次定义 Filter 链,将我们自定义的 Filter 插入 StrutsPrepareFilter 和 StrutsExecuteFilter 的定义之间即可。 由此可见,Struts2 在 Http 请求的处理上下了一番苦工夫,不仅将 Http 请求过程中的每个步骤进行 了必要的逻辑划分,还在步骤和步骤之间提供了足够的空间以供扩展使用。这也使得我们可以非常自由 地使用 Struts2 的所有特性,而不必担心与其他框架整合所产生的兼容性问题。
doFilter 方法是整个 Struts2 的第二条主线的入口方法。在这个方法中,我们可以看到许多在第一条 主线中被初始化的对象开始发挥作用,我们在上一章中已经见过它们,它们主要包括: ❑Dispatcher——核心分发器,执行 Struts2 处理逻辑的实际场所。 ❑PrepareOperations——Http 预处理类,对所有的 Http 请求进行预处理。 ❑ExecuteOperations——Http 处理执行类,执行 Http 请求的场所。
Struts2配置文件加载顺序及运行流程

Struts2配置文件加载顺序一、Struts2配置文件加载顺序通过查看StrutsPrepareAndExecuteFilter源码可以得到答案!此处,我们以及清晰了看到了该类加载配置文件的顺序,我们依次围绕标号查看对应方法产生的文件即可。
对应产生文件依次如下:. init_DefaultProperties(); // [1]---- org/apache/struts2/default.properties.. init_TraditionalXmlConfigurations(); // [2] --- struts-default.xml,struts-plugin.xml,struts.xml.. init_LegacyStrutsProperties(); // [3] --- 自定义struts.properties.. init_CustomConfigurationProviders(); // [5] ----- 自定义配置提供.. init_FilterInitParameters() ; // [6] ----- web.xml.. init_AliasStandardObjects() ; // [7] ---- Bean加载结论:【前三个是默认的,不用关注,后面三个需要注意】①default.properties该文件保存在struts2-core-2.3.7.jar 中org.apache.struts2包里面(常量的默认值)②struts-default.xml 该文件保存在struts2-core-2.3.7.jar (Bean、拦截器、结果类型)③struts-plugin.xml该文件保存在struts-Xxx-2.3.7.jar (在插件包中存在,配置插件信息)struts-config-browser-plugin-2.3.7.jar里面有④struts.xml该文件是web应用默认的struts配置文件(实际开发中,通常写struts.xml )⑤struts.properties该文件是Struts的默认配置文件(配置常量)⑥web.xml该文件是Web应用的配置文件(配置常量)后加载配置文件中修改的常量的值会覆盖前面配置文件修改的常量的值!二、Struts2运行流程详解1.Struts2的架构图请求首先通过Filter chain,Filter主要包括ActionContextCleanUp,它主要清理当前线程的ActionContext和Dispatcher;FilterDispatcher主要通过AcionMapper来决定需要调用哪个Action。
【java开发系列】——struts2简单入门示例

【java开发系列】——struts2简单⼊门⽰例上篇推荐:前⾔ 最近正好有时间总结⼀下,过去的知识历程,虽说东西都是⼊门级的,⾼⼿肯定是不屑⼀顾了,但是对于初次涉猎的⼩⽩们,还是可以提供点参考的。
struts2其实就是为我们封装了servlet,简化了jsp跳转的复杂操作,并且提供了易于编写的标签,可以快速开发view层的代码。
过去,我们⽤jsp和servlet搭配,实现展现时,⼤体的过程是: 1 jsp触发action 2 servlet接受action,交给后台class处理 3 后台class跳转到其他的jsp,实现数据展现 现在有了struts2,实现过程变为 1 jsp出发action 2 struts2拦截请求,调⽤后台action 3 action返回结果,由不同的jsp展现数据 下⾯我们看下,需要的jar包 前⾯两个是apache commons的jar包,暂且忽略 freemarker提供了另⼀种展现⽅式 ognl提供了OGNL表达式 struts2-core提供struts2核⼼包 xwork-core由于struts2很多事基于webwork的,因此也需要这个的核⼼包 我们提供了三个jsp登陆界⾯login.jsp1 <%@ page language="java" contentType="text/html; charset=GBK"2 pageEncoding="GBK"%>3 <%@taglib prefix="s" uri="/struts-tags"%>4<html>5<head>6<meta http-equiv="Content-Type" content="text/html; charset=GBK">7<title><s:text name="loginPage"/></title>8</head>9<body>10<s:form action="login">11<s:textfield name="username" key="user"/>12<s:textfield name="password" key="pass"/>13<s:submit key="login"/>14</s:form>15</body>16</html>登陆成功界⾯welcome.jsp<%@ page language="java" contentType="text/html; charset=GBK"pageEncoding="GBK"%><%@taglib prefix="s" uri="/struts-tags"%><html><head><title><s:text name="succPage"/></title><meta http-equiv="Content-Type" content="text/html; charset=GBK"></head><s:text name="succTip"><s:param>${er}</s:param></s:text><br/></body></html>登陆失败界⾯error.jsp<%@ page language="java" contentType="text/html; charset=GBK"pageEncoding="GBK"%><%@taglib prefix="s" uri="/struts-tags"%><html><head><title><s:text name="errorPage"/></title><meta http-equiv="Content-Type" content="text/html; charset=GBK"></head><body><s:text name="failTip"/></body></html> 当login.jsp触发action时,就会向后抬发送login.action的请求,这个请求被后台拦截,交给struts.xml中配置的action处理1<?xml version="1.0" encoding="GBK"?>2<!DOCTYPE struts PUBLIC3 "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"4 "/dtds/struts-2.1.7.dtd">5<struts>6<!-- 指定全局国际化资源⽂件 -->7<constant name="struts.custom.i18n.resources" value="mess"/>8<!-- 指定国际化编码所使⽤的字符集 -->9<constant name="struts.i18n.encoding" value="GBK"/>10<!-- 所有的Action定义都应该放在package下 -->11<package name="test" extends="struts-default">12<action name="login" class="com.test.action.LoginAction">13<result name="error">/error.jsp</result>14<result name="success">/welcome.jsp</result>15</action>16</package>17</struts>下⾯是LoginAction的代码,可以看到成功登陆后,程序把username写⼊session中。
struts2核心工作流程与原理

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