`
luotuoass
  • 浏览: 637618 次
文章分类
社区版块
存档分类
最新评论

Struts2 结构

 
阅读更多

p { margin-bottom: 0.08in; }h1 { margin-bottom: 0.08in; }h1.western { font-family: "Times New Roman",serif; }h1.cjk { font-family: "DejaVu Sans"; }h1.ctl { font-family: "DejaVu Sans"; }h3 { margin-bottom: 0.08in; }a:link { }

知识回顾:

Struts webwork 已合并为 Struts2 框架 ,Struts2 框架良好的扩展性与简洁性使其适用于任何规模的企业 web 程序的开发 . 本节我们将向大家展示 Struts2 框架的结构

Struts2 中一个请求的生存周期:

1. 用户发送请求 : 用户为访问资源向服务器发送请求 .

2. FilterDispatcher 决定适当的 action : FilterDispatcher 接受请求然后决定调用适当的 action

3. 调用拦截器 : 配置拦截器来应用常用的功能如工作流 , 验证 , 文件上传等 , 都是自动应用于请求的 .

4. action 的执行 : 然后 action 将被执行来调用诸如存储数据、检索数据之类的数据库相关操作 .

5. 呈递输出 : 结果呈递到输出

6. 返回请求 : 请求通过拦截器按照相反的顺序返回 , 返回的请求可以允许我们执行一些清理或额外的处理

7. 向用户展示结果 : 控制权最终回归到输出结果至用户浏览器的 Servlet 容器

:Struts2 中请求流程的高度概括

Struts2 结构 :

Struts2 框架拥有良好的简洁性与易扩展的前端控制器 , 基于很多像 Java Filters, Java Beans, ResourceBundles, XML 等标准技术 .

对于模型层来说 ,Struts2 可以使用任何数据访问技术 , JDBC, EJB, Hibernate , 对于视图层来说 ,Struts2 可以与 JSP, JTL, JSF, Jakarta Velocity Engine, Templates, PDF, XSLT 等整合 .

异常处理 :

Struts2 允许我们定义异常处理器和拦截器

l 异常处理器

异常处理器允许我们定义基于局部和全局的异常处理程序 .Struts2 捕获到异常后会将恰当的信息和异常的详情显示在我们指定的页面上 .

l 拦截器

拦截器详细说明了一个 action 的请求流程的生存周期 . 配置的拦截器对请求实现了一些常用的功能如工作流 , 验证等 .

Struts2 结构

下图描述了 Struts2 的结构 , 同时展示了初始请求如何转到像 Tomcat 这类的 serlet 容器 , 然后通过过滤链

: Struts2 结构

过滤器链包括 :

l Action ContextCleanUp filter :  

Action ContextCleanUp filter 是可选的 , 当与其他的技术如 SiteMash 插件整合的时候会很有帮助 .

l FilterDispatcher :

接着 FilterDispatcher 被调用 , 然后依次调用 ActionMapper 来决定是不是要引用一个 action. 如果一个 action 需要被引用 , FilterDispatcher 将托付 ActionProxy 来管理

l ActionProxy :

Action 代理能从初始化自 struts.xml 的配置文件管理器那得到帮助 , 接着 ActionProxy 创建一个实现了命令模式的 ActionInvocation,ActionInvocation 在处理的过程中调用拦截器 ( 如果配置了 ) 然后调用 Action ActionInvocation 寻找恰当的结果 , 然后结果呈递到 JSP 或者模板上 .

之后拦截器再按照相反的顺序执行了一遍 , 最终响应通过配置在 web.xml 中的过滤器返回 . 如果配置了 ActionContextCleanUp filter, FilterDispatcher 不会清理线程局部 ActionContext. 如果 ActionContextCleanUp filter 没有被配置 , FilterDispatcher 会清理所有当前的线程局部 .

truts2 interceptor filter

Struts2的工作是基于 filter的,其核心控制器就是一个 filter FilterDispatcher。框架流程大致如下:

1、客户端初始化一个请求;

2、这个请求经过一系列的过滤器 Filter

3 FilterDispatcher被调用, FilterDispatcher根据 ActionMapper来决定这个请求是否调用某个 Action

4 ActionMapper决定需要调用某个 Action FilterDispatcher把请求的处理交给 ActionProxy

5 ActionProxy通过 Configuration Manager询问框架的配置文件,找到需要调用的 Action类;

6 ActionProxy创建一个 ActionInvocation的实例。

7 ActionInvocation实例使用命名模式来调用,在调用 Action的过程前后,会调用拦截器 Intercepter

8、一旦 Action执行完毕, ActionInvocation负责根据 struts.xml中的配置找到对应的返回结果。

显然, filter struts2 interaptor范围要大。 Filter除了过滤请求外通过通配符可以保护页面,图片,文件等等,而 Interceptor只能过滤请求。


对于 filter
使用方法是创建一个类 XXXFilter实现 Filter接口,并在该类中的 doFilter方法中声明过滤规则,然后在配置文件 web.xml中声明他所过滤的路径
对于 Interceptor
使用方法也是创建一个类 XXXInterceptor实现 Interceptor 接口 ,在该类中 intercept方法写过滤规则,不过与 strut.xml结合使用。

另外一些不同:
1. filter基于回调函数, doFilter方法就是回调函数,而 interceptor则基于java本身的反射机制 ,这是两者最本质的区别。
2. filter是依赖于 servlet容器的,即只能在 servlet容器中执行。而 interceptor servlet容器无关。
3. Filter的过滤例外一般是在加载的时候在 init方法声明 , Interceptor可以通过在 xml声明是 guest请求还是 user请求来辨别是否过滤

前段时间参与一个项目,过滤器用的是 Interceptor 觉得比以前用的 Filter 好用很多,现在拿出来比较一下
Filter
该过滤器的方法是创建一个类 XXXFilter 实现此接口,并在该类中的 doFilter 方法中声明过滤规则,然后在配置文件 web.xml 中声明他所过滤的路径
<filter>
<filter-name>XXXFilter</filter-name>
<filter-class>
com.web.util.XXXFilter
</filter-class>
</filter>

<filter-mapping>
<filter-name>XXXFilter</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>

Interceptor
该过滤器的方法也是创建一个类 XXXInterceptor 实现此接口 , 在该类中 intercept 方法写过滤规则,不过它过滤路径的方法和 Filter 不同,它与 strut.xml 结合使用,
创建一个 strus.xml 的子配置文件 struts-l99-default.xml ,它继承与 struts2 struts-default ,此配置文件是其他子配置文件的父类,只要是继承与该文件的配置文件所声明的路径都会被它过滤 如下
<package name="XXX-default" namespace="/" extends="struts-default">
<interceptors>
<interceptor name="authentication" class="com.util.XXXInterceptor" />

<interceptor-stack name="user">
<interceptor-ref name="defaultStack" />
<interceptor-ref name="authentication" />
</interceptor-stack>

<interceptor-stack name="user-submit">
<interceptor-ref name="user" />
<interceptor-ref name="token" />
</interceptor-stack>

<interceptor-stack name="guest">
<interceptor-ref name="defaultStack" />
</interceptor-stack>

<interceptor-stack name="guest-submit">
<interceptor-ref name="defaultStack" />
<interceptor-ref name="token" />
</interceptor-stack>

</interceptors>
<default-interceptor-ref name="user" />
</package>
比较一 ,filter 基于回调函数,我们需要实现的 filter 接口中 doFilter 方法就是回调函数,而 interceptor 则基于java本身的反射机制 , 这是两者最本质的区别。
比较二 ,filter 是依赖于 servlet 容器的,即只能在 servlet 容器中执行,很显然没有 servlet 容器就无法来回调 doFilter 方法。而 interceptor servlet 容器无关。
比较三, Filter 的过滤范围比 Interceptor ,Filter 除了过滤请求外通过通配符可以保护页面,图片,文件等等,而 Interceptor 只能过滤请求。
比较四, Filter 的过滤例外一般是在加载的时候在 init 方法声明 , Interceptor 可以通过在 xml 声明是 guest 请求还是 user 请求来辨别是否过滤

分享到:
评论

相关推荐

    一个超级简单的struts2结构

    一个struts2的初学都的一个超级简单的struts2结构

    基于struts2结构的图书管理系统设计与实现.

    基于struts2结构的图书管理系统设计与实现.

    Struts2入门教程(全新完整版)

    一、准备工作及实例 3 1.解压struts-2.1.6-all.zip 3 2.六个基本包 3 3.初识struts2配置文件 4 ... 下面对struts2的基本执行流程作一简要说明,此流程说明可以结合官方提供的struts2结构图来看: 60

    struts2原理分析 最新版 最全面

    struts2原理分析 最新版 最全面 易懂

    struts的结构图片

    struts的结构图片struts的结构图片

    Struts2体系结构图例详解

    Struts2体系结构图例详解 MVC框架

    使用Maven的struts2项目结构

    使用Maven的struts2项目结构,主页涉及Maven工程的结构,建立好工程的结构,有个好的结构,将起到简化后期开发的作用

    struts2JAR包

    其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为...

    struts2学习文档

    其全新的Struts 2的体系结构与Struts 1的体系结构的差别巨大。Struts2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与Servlet API完全脱离开,所以Struts 2可以理解为...

    struts2必须jar包

    其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为...

    Struts 2中文帮助文档

    其全新的Struts 2的体系结构与Struts 1的体系结构的差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与Servlet API完全脱离开,所以Struts 2可以理解为...

    struts2建立流程

    其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为...

    struts体系结构与工作原理

    struts体系结构与工作原理 想学struts吗?这个文档你可以参考一下。

    完美版(适合自学)struts2

    其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与Servlet API完全脱离开,所以Struts 2可以理解为...

    Struts2V3.0-(中文)参考手册

    其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为...

    Struts2核心包

    Struts2最新版本2.2.1中所设计的核心库文件,包括以下内容: struts2-core-2.2.1.jar:Struts2框架的核心类库。 xwork-core-2.2.1.jar:Xwork核心类库,Struts2在其上构建。 ognl-3.0.jar:对象图导航语言(Object ...

    struts的结构

    struts的结构 struts的结构

    03解决struts2配置文件无提示问题

    其全新的Struts 2的体系结构与Struts 1的体系结构的差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与Servlet API完全脱离开,所以Struts 2可以理解为...

    Struts2.0编程网上书店

    struts2.0构架的网上购书系统。jsp前台展示+java后台服务+struts2结构调度,实现功能完整、界面美观的web开发网上购书系统。

    Struts的结构

    本文主要讲解什么是Struts Framework,它的框架结构,组件结构,以及简单的配置 讲解。 文章的包括了如下七大部分: Framework的概念和体系简介 Struts的概念和体系结构 Struts的工作原理和组件 ...

Global site tag (gtag.js) - Google Analytics