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。
struts2工作原理图
读者如果曾经学习过Struts1.x或者有过Struts1.x的开发经验,那么千万不要想当然地以为这一章可以跳过。
实际上Struts1.x与Struts2并无我们想象的血缘关系。
虽然Struts2的开发小组极力保留Struts1.x的习惯,但因为Struts2的核心设计完全改变,从思想到设计到工作流程,都有了很大的不同。
Struts2是Struts社区和WebWork社区的共同成果,我们甚至可以说,Struts2是WebWork的升级版,他采用的正是WebWork的核心,所以,Struts2并不是一个不成熟的产品,相反,构建在 WebWork基础之上的Struts2是一个运行稳定、性能优异、设计成熟的WEB 框架。
本章主要对Struts的源代码进行分析,因为Struts2与WebWork的关系如此密不可分,因此,读者需要下载xwork的源代码,访问/xwork/download.action 即可自行下载。
下载的Struts2源代码文件是一个名叫struts-2.1.0-src.zip的压缩包,里面的目录和文件非常多,读者可以定位到struts-2.1.0-src"struts-2.0.10"src"core"src"main"java 目录下查看Struts2的源文件,如图14所示。
(图14)主要的包和类Struts2框架的正常运行,除了占核心地位的xwork的支持以外,Struts2本身也提供了许多类,这些类被分门别类组织到不同的包中。
从源代码中发现,基本上每一个Struts2类都访问了WebWork提供的功能,从而也可以看出 Struts2与WebWork千丝万缕的联系。
但无论如何,Struts2的核心功能比如将请求委托给哪个Action处理都是由xwork完成的,Struts2只是在WebWork的基础上做了适当的简化、加强和封装,并少量保留Struts1.x中的习惯。
struts2流程以及源码解析
1.1 Struts2请求处理1. 一个请求在Struts2框架中的处理步骤:a) 客户端初始化一个指向Servlet容器的请求;b) 根据Web.xml配置,请求首先经过ActionContextCleanUp过滤器,其为可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助(SiteMesh Plugin),主要清理当前线程的ActionContext和Dispatcher;c) 请求经过插件过滤器,如:SiteMesh、etc等过滤器;d) 请求经过核心过滤器FilterDispatcher,执行doFilter方法,在该方法中,询问ActionMapper来决定这个请求是否需要调用某个Action;e) 如果ActionMapper决定需要调用某个Action,则ActionMapper会返回一个ActionMapping实例(存储Action的配置信息),并创建ActionProxy (Action代理)对象,将请求交给代理对象继续处理;f) ActionProxy对象根据ActionMapping和Configuration Manager询问框架的配置文件,找到需要调用的Action类;g) ActionProxy对象创建时,会同时创建一个ActionInvocation的实例;h) ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用;i) 一旦Action执行完毕,ActionInvocation实例负责根据struts.xml中的配置创建并返回Result。
Result通常是一个需要被表示的JSP或者FreeMarker 的模版,也可能是另外的一个Action链;j) 如果要在返回Result之前做些什么,可以实现PreResultListener接口,PreResultListener可以在Interceptor中实现,也可以在Action中实现;k) 根据Result对象信息,生成用户响应信息response,在生成响应过程中可以使用Struts2 框架中继承的标签,在此过程中仍会再次涉及到ActionMapper;2. Struts2请求处理示意图:1.2 Struts2请求处理源码分析当用户向Struts2发送请求时,FilterDispatcher的doFilter()方法自动调用,doFilter()方法处理请求过程,如下:1. 创建值栈对象stack;2. 创建Action上下文对象;3. 对请求进行重新封装,此次封装根据请求内容的类型不同,返回不同的对象:如果为multipart/form-data类型,则返回MultiPartRequestWrapper类型的对象,该对象服务于文件上传,否则返回StrutsRequestWrapper类型的对象,MultiPartRequestWrapper是StrutsRequestWrapper的子类,而这两个类都是HttpServletRequest接口的实现。
Struts2的运行流程(Java私塾)
Struts2的运行流程(java私塾)Struts2的运行流程3.2.1 运行流程先回忆一下在HelloWorld中,我们做了什么:∙在web.xml中配置了Struts2的过滤器∙写了一个Action类,名称为HelloWorldAction∙在struts.xml中配置了这个Action类∙写了两个页面,一个是登录页面,一个是欢迎页面只做了这么点事情,就可以在Struts2的帮助下顺利完成功能调用,那么Struts2内部是怎么运行的呢?逐步来根据架构图进行分析。
1:首先是在登录页面,用户填入帐号和密码,然后点击提交按钮,好了,就从这里开始分析背后的处理流程,这是我们进行分析的起点。
2:当用户提交登录请求后,请求的URL为:“/helloworld/helloworldAction.action”,请求会被Tomcat服务器接收到,Tomcat服务器会根据请求URL中的web上下文,也就是“/helloworld”,来选择处理这个请求的Web应用,那就是由helloworld这个web工程来处理这个请求。
3:Web容器会去读取helloworld这个工程的web.xml,在web.xml中进行匹配,发现后缀为“.action”的请求,由struts2这个过滤器来进行处理,根据Filter的配置,找到实际的类为FilterDispatcher。
4:Web容器会获取FilterDispatcher这个类的实例,然后回调doFilter方法,进行真正的处理。
FilterDispatcher作为前端控制器,是整个Struts2的调度中心。
注意:在架构图上,可以看到有三个过滤器层次,分别是ActionContextCleanUp、SiteMesh等其他过滤器和FilterDispatcher。
这三个层次中,ActionContextCleanUp和FilterDispatcher是Struts2的过滤器,而SiteMeshSiteMesh等其他过滤器不是。
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教程1:第一个Struts2程序在本系列教程中我们将学习到Struts2的各种技术。
在本教程中使用的工具和程序库的版本如下:开发工具:MyEclipse6Web服务器:Tomcat6Struts版本:Struts2.0.11.1JDK版本:JDK1.5.0_12J2EE版本:JavaEE5.0在本系列教程中Web工程的上下文路径都是struts2,如果在Web根目录有一个index.jsp文件,则访问路径如下:http://localhost:8080/struts2/index.jsp由于MyEclipse6目前并不支持Struts2,所以我们需要到去下载Struts2安装包。
要想正常使用Struts2,至少需要如下五个包(可能会因为Struts2的版本不同,包名略有差异,但包名的前半部是一样的)。
struts2-core-2.0.11.1.jarxwork-2.0.4.jarcommons-logging-1.0.4.jarfreemarker-2.3.8.jarognl-2.6.11.jarStruts2虽然在大版本号上是第二个版本,但基本上在配置和使用上已经完全颠覆了Struts1.x的方式(当然,Struts2仍然是基于MVC模式的,也是动作驱动的,可能这是唯一没变的东西)。
Struts2实际上是在Webwork基础上构建起来的MVC框架。
我们从Struts2的源代码中可以看到,有很多都是直接使用的xwork(Webwork的核心技术)的包。
既然从技术上来说Struts2是全新的框架,那么就让我们来学习一下这个新的框架的使用方法。
如果大家使用过Struts1.x,应该对建立基于Struts1.x的Web程序的基本步骤非常清楚。
让我们先来回顾一下建立基于Struts1.x的Web程序的基本步骤。
1. 安装Struts。
由于Struts的入口点是ActionServlet,所以得在web.xml中配置一下这个Servlet。
struts2处理请求的过程
struts2处理请求的过程分类:struts JavaWeb2013-08-20 20:21 382人阅读评论(0) 收藏举报官方的流程图:客户端对tomcat服务器发出请求,将请求封装成HttpRequest对象,并进行预处理操作(如设置编码等);通过web.xml文件找到struts2的前端控制器StrutsPrepareAndExcuteFilter,并调用doFilter()方法。
[java]view plaincopy1.public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {2.3. HttpServletRequest request = (HttpServletRequest) req;4. HttpServletResponse response = (HttpServletResponse) res;5.6.try {7. prepare.setEncodingAndLocale(request, response);8. prepare.createActionContext(request, response);9. prepare.assignDispatcherToThread();10.if ( excludedPatterns != null && prepare.isUrlExcluded(request, excludedPatterns)) {11. chain.doFilter(request, response);12.} else {13. request = prepare.wrapRequest(request);14. ActionMapping mapping = prepare.findActionMapping(request, response, true);15.if (mapping == null) {16.boolean handled = execute.executeStaticResourceRequest(request, response);17.if (!handled) {18. chain.doFilter(request, response);19. }20. } else {21. execute.executeAction(request, response, mapping);22. }23.}24. } finally {25. prepare.cleanupRequest(request);26. }27. }doFilter中:1、设置编码;2、创建ActionContext,创建ValueStack对象。
语言程序设计资料:java-struts2基本配置使用手册
为Struts 2.0做好准备Struts作为MVC 2的Web框架,自推出以来不断受到开发者的追捧,得到用广泛的应用。
作为最成功的Web框架,Struts自然拥有众多的优点:•MVC 2模型的使用•功能齐全的标志库(Tag Library)•开放源代码但是,所谓“金无赤金,人无完人”,Struts自身也有不少的缺点:•需要编写的代码过多,容易引起“类爆炸”•单元测试困难这些缺点随着Web的发展越来越明显。
这就促生了Struts 2.0,它的诞生能很好的解决上述问题。
好啦,废话就不多说了,现在就让我们感受一下的Struts 2.0的魅力吧。
1.搭建开发和运行环境1.到Apache下载Struts2.0包2.打开Eclipse3.2新建Web工程点击菜单File\New\Project,出现如图1所示对话框图1 新建工程对话框选择Web\Dynamic Web Project,点击“Next”,出现图2对话框图2 新建动态Web工程对话框在“Project Name”中键入Struts2_HelloWorld,点击“New”,出现以下对话框图3 新建服务器运行时对话框选择“Apache\Apache Tomat v5.5”,点击“Next”,出现以下对话框图4新建服务器运行时对话框点击“Finish”,关闭对话框。
3.将Struts 2.0 lib下的jar文件加到工程的构建路径(build path)图5 Struts 2.0的lib目录按ctr+a全选,复制,再转到Eclipse窗口,在“Project Explorer”子窗口中选中Struts2_HelloWorld\WebContent\WEB-INF\lib,然后粘贴。
经过Eclipse自动刷新“Project Explorer”子窗口,刚才所粘贴的jar文件应该会出现在Struts2_HelloWorld\Java Resources: src\Libraries\Web App Libraries下,如图6所示:图6 Project Explorer子窗口4.打开web.xml文件,将其修改为以下代码:<?xml version="1.0" encoding="ISO-8859-1"?><!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "/dtd/web-app_2_3.dtd"><web-app><display-name>Struts 2.0 Hello World</display-name><filter><filter-name>struts2</filter-name><filter-class>org.a pache.struts2.dispatcher.FilterDispatcher</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping><welcome-file-list><welcome-file>index.html</welcome-file></welcome-file-list></web-app>5.新建struts.xml文件右键点击,Struts2_HelloWorld\Java Resources: src,出现如图7所示菜单图7 新建Other菜单点击“Other”,出现新建对话框,如图8所示图8 新建对话框点击“Next”,出现新建文件对话框,如图9所示图9 新建文件对话框在“File name”中键入sturts.xml,点击“Finish”,然后将struts.xml的内容修改为:<!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN""/dtds/struts-2.0.dtd"><struts><include file="struts-default.xml"/></struts>6.新建index.html文件右键点击Struts2_HelloWorld\WebContent,出现如图10所示的菜单图10 新建Other菜单点击“Other”,出现新建对话框,如图11所示图11 新建对话框选择Web\HTML,点击“Next”出现如图12所示的对话框图12 新建HTML页面对话框在“File Name”中键入index.html,点击“Next”,出现如图13所示的对话框图13 模板选择对话框点击“Finish”,将index.html的内容修改为以下内容:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Hello World</title></head><body><h3>Hello World!</h3></body></html>7.将应用程序打包到tomcat上右键点击Struts_HelloWorld,出现如图14所示的菜单图14 工程菜单点击“Export\WAR file”,出现如图15所示的对话框图15 输出对话框选择“Web\WAR file”,点击“Next”,出现如图16所示的对话框图16 输出路径对话框输入war文件的路径(如%tomcat%\webapps\Struts2_HelloWorld.war),点击“Finish”关闭对话框。
struts2流程和配置步骤
Struts2执行流程2009-12-16 12:19Struts2执行流程1. web.xml 部署描述符2. FilterDispatcher 实现StrutsStatics, Filter接口(1)Filter:一个filter是一个对象用于执行过滤任务为每个请求资源(一个servlet或静态内容),或响应一个资源,或两者.过滤器执行过滤是在doFilter方法中.每个过滤器访问一个FilterC onfig对象从中获取初始化参数,一个引用到ServletContext可以被使用,例如,在过滤器任务需要时装载资源.过滤器的配置在Web应用程序的部署描述符中.init()-初始化过滤器,它的输入参数javax.servlet.FilterConfig的一个实例,可以这里初始化过滤要使用到的FilterConfig。
这个方法由Web容器自动调用。
doFilter()-进行具体的过滤操作,这个方法以javax.servlet.ServletRequest请求信息,jav ax.servlet.ServletResponse响应信息,javax.servlet.FilterChain过滤链。
过滤链,在Web 应用程序中所有的过滤器会构成一个链状,符合过滤条件的程序将会根据定义的顺序执行所有链中的过滤器。
在这个方法中调用FilterChain的doFilter(javax.servlet.ServletReque st, javax.servlet.SerletResponse)方法就可以传递到链中的下一个过滤器。
destory()-销毁过滤器,可以在这里释放使用完的资源,例如设置过滤器中FilterConfig为n ull。
(2)StrutsStatics: 定义Struts中使用的常量,常量用来获取和设置Action上下文以外的对象或其它集合.可以使用如下方式获取这些对象ActionContext context = ActionContext.getContext();HttpServletRequest request = (HttpServletRequest)context.get(HTTP_REQUEST);(3) FilterConfig接口:一个过滤器配置对象,用于Servlet容器传递信息到过滤器在初始化期间.BeanSelectionProvider类:选择框架实现的关键扩展点,用于装载属性常量.选择的实现是从container builder使用的名字定义关联属性,默认名为”struts”例如:获取requestActionContext.getContext().put(HTTP_REQUEST, request)执行流程:※init(FilterConfig filterConfig)初始化过滤器->createDispatcher(filterConfig); 创建调度器,返回带有过滤器参数Dispatcher ->执行Dispatcher的init方法,首先创建configurationManager,如果为null使用Bean SelectionProvider. DEFAULT_BEAN_NAME参数创建.-> 配置的初始化//加载org/apache/struts2/default.properties文件init_DefaultProperties(); // [1]//加载格式相同的struts-default.xml,struts-plugin.xml,struts.xmlinit_TraditionalXmlConfigurations(); // [2]//可读取public static final String STRUTS_LOCALE = "struts.locale";配置init_LegacyStrutsProperties(); // [3]//加载Web.xml中的actionPackages配置init_ZeroConfiguration(); // [4]//读取configProviders参数,配置用户定义的providerinit_CustomConfigurationProviders(); // [5]//Struts2.0.9中为空init_MethodConfigurationProvider();//初始化Filter中的config参数中指定的配置文件, initParams参数的获取是在Dispatch er创建时init_FilterInitParameters() ; // [6]//在BeanSelectionProvider中注册别名init_AliasStandardObjects() ; // [7]//读取public static final String STRUTS_I18N_RELOAD = "struts.i18n.reload";参数, Container container = init_PreloadConfiguration();//读取public static final String STRUTS_CONFIGURATION_XML_RELOAD = "struts.c onfiguration.xml.reload";init_CheckConfigurationReloading(container);//初始化weblogic相关配置init_CheckWebLogicWorkaround(container);-> String param = filterConfig.getInitParameter("packages");String packages = "org.apache.struts2.static template org.apache.struts2.inte rceptor.debugging";设置静态资源Prefixes※->doFilter处理一个Action和它请求的静态资源,过滤器尝试配置请求到一个Action mapping.如果mapping找到了,Action的处理在dispatcher的serviceAction方法.如果Action处理失败,d oFilter将会尝试去创建一个错误页面通过dispatcher.另外请求一个静态资源,资源将直接C opy到响应,使用适当的caching头设置.如果请求没有匹配一个Action mapping或一个静态资源页,那么将通过.(1) getServletContextServlet2.3规范中Servlet Context可以从Session中从新获取。
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技术的出现给我们构建强健的企业应用系统提供了可能。
面试整理
1)该框架大致分为3个部分
2)核心控制器FilterDispatcher,业务控制器Action和用户实现的企业业务逻辑组件
3)核心控制器是Struts2框架的基础,包含了框架内部的控制流程和处理机制
4)业务控制器Action和业务逻辑组件是需要用户来自己实现的。
3)根据struts.xml配置,找到需要调用的Action类和方法,并通过IOC方式,将值注入给Action
4)Action调用业务逻辑组件处理业务逻辑,这里包含表单验证等
5)Action执行完后,根据struts.xml中的配置找到对应的返回结果result,并跳转到相应的页面
6)返回HTTP响应到客户端浏览器
用jdbc查询学生成绩单,把主要的代码写出来
ConneБайду номын сангаасtion con =null;
PreparedStatement psmt =null;
Resultset rs =null;
Try{
Class.forname(driveClassName);
Con=DriverManager.getConnection(url,username,password);
While(rs.next()){
System.out.println(“rs.getInt(“subject”)+” ”+rs.getFloat(“score”)”);
}
}catch(Exception e){
e.printStackTrace();
}finally{
If(rs!=null){
Psmt=cn.prepareStatement(“select score.*from score ,student
struts2
|- session - session对象
|- application - app对象
|- parameters - param对象
1. 路径 ---> Action 类 ---> 界面路径
访问路径
--------------------------------------
http://服务器/项目路径/namespace设置的子路径/Action名.action
例如:http://localhost:8080/struts2_01/helloKitty.action
开发步骤:
--------------------------------------
1. 开发环境:(apps\struts2-blank-2.1.8.1.war 解压缩后,从中提取)
执行步骤:
1) 先调用原始的 request.getAttribute()
2) 如果从原始request获取不到数据
从 Action 对象中获取属性
* mysqldriver.jar
2. 创建类:
tarena.news.entity.News
tarena.news.dao.NewsDao
tarena.news.dao.impl.NewsDaoImpl
OGNL
----------------------------------------
Object Graphics Navagation Language
对象导航图语言S
request ---> 包装为 Map
session ---> 包装为 Map