`

Struts2

阅读更多

一,Struts2做什么的?
二,Struts2怎么处理一个用户请求的?
三,Struts2与Struts1有什么区别?
四,Struts2的拦截器?


一,Struts2做什么的?
Struts2是属于MVC框架中的视图层,它是在webwork的基础上发展起来的,也可以说Struts2是webwork的升级版,因此Struts2的稳定性,性能等各方面都有很好的保证。

二,Struts2怎么处理一个用户请求的?
1,
首先用户发出一个请求,通过filterDispatcher拦截器拦截下来。

2, filterDispatcher会询问ActionMapper来决定这个请求是否需要调用某个Action。

3, 这个ActionMapper封装了请求的信息。如果ActionMapper决定需要调用某个Action,FilterDispatcher会按信息(action的名字,调用的方法名)创建一个Action的代理对象。实际上对Action的调用就是通过这个代理对象来实现的。

4,
把请求交给这个代理,如果用户提交的请求没有指定方法,那么Struts2则默认excute方法。这个代理会创建一个调度器的实例。
这个调度器里面定义了一个invoke方法,这个方法就实现了拦截器的交互和执行Action里的excute方法。

5, 拦截器是以value栈的形式调用。
Struts2默认的有18个拦截器。第一个拦截器是一个异常拦截器,这样的话,我第一个拦截器把异常捕获到,那么以后就不用捕获其他拦截器出现的异常了。

6, 当Action执行完以后,调度器就会负责根据struts.xml中的配置找到对应的返回结果。

7, 然后调度器就返回所有的拦截器,通过response把结果集返回给客户。


三,Struts2与Struts1有什么区别?
Struts1是一个老牌的框架,比较稳定,拥有的客户也比较多,减小开发的风险。
Struts2是一个基于webWork开发的一个框架,相对于Struts1来说,还不够成熟,使用Struts2来开发项目风险比较的打。
Struts1的前台控制器是一个servlet,名字叫ActionServlet。
Struts2的前台控制器是一个filter,名字叫FilterDispatcher。
Struts1对所有在同一路径下发出的请求值创建一个Action实例,所以这个Action需要同步。
Struts2对用户的每一个处理请求都会创建一个Action实例,所以Struts2就不用关心同步的问题了。
Struts1是通过formBean来封装数据的。
Struts2是通过action里的属性来封装数据的。
Struts1进行验证的时候,会对action里所有的方法都进行验证。
Struts2进行验证的时候,可以只对单个方法进行验证。比如说当一个Action继承了ActionSupport,在Action类里写validateXxx方法名,这样Struts2验证的时候就只验证Xxx方法。
Struts1的action必须要继承Action类。
Struts2可以不继承任何类,只需要写个execute方法就行了。


四,Struts2的拦截器?
拦截器主要用于在某个方法或字段被访问之前,进行拦截,然后在访问之前或之后加入某些操作。它也算是AOP的一种实现策略。我们一般做的权限管理就是通过拦截器来实现的,比如说一个用户要访问方法时,则
判断这个用户是否登录,然后还要判断这个是否有权限进入这个方法,这些一般都是拦截器来完成的。


strusts2的拦截器底层采用的是动态代理机制实现的。而我们只是需要在struts.xml配置文件中配置拦截器就可以实现了。
谈到拦截器,就要说一下拦截器栈了,拦截器栈就是将拦截器按一定的顺序组成的一条链,在访问被拦截的方法或字段时,拦截器栈中的拦截器会按之前定义好的顺序被调用。像Struts2里就有一个拦截器栈,它里面有18个拦截器,第一个拦截器是处理异常的。

Struts2的拦截器实现原理:当请求到达Struts2的ServletDispatcher时,Struts2会查找配置文件(struts.xml),并根据这个配置文件的配置实例化相对的拦截器对象,然后生成一个列表,最后一个一个的调用列表中的拦截器。

自定一个拦截器:在Struts2里面,自定义一个拦截器是很简单的,写一个普通的java类直接或间接实现
Interceptor接口,然后再重写里面的三个方法:
init():这个方法在该拦截器被初始化之后,该拦截器执行拦截之前,系统调用该方法,这个方法只执行一次。
destroy():这个方法在拦截器实例被销毁之前,系统调用该方法。
intercept(ActionInvocation invocation):这个方法里面写我们要实现的拦截动作。

然后就是在struts.xml里的interceptors节点里通过interceptor元素配置拦截器名字和指定该拦截器的路径。再在action节点里通过interceptor-ref元素来使用拦截器。



分享到:
评论
3 楼 hehaisu 2012-07-06  
新手学习了
2 楼 wujianjun12315 2011-08-15  
 
1 楼 因为java所以java 2010-11-04  
总结得挺好的

相关推荐

    struts1和struts2的区别

    struts1和struts2的区别struts1和struts2的区别struts1和struts2的区别struts1和struts2的区别struts1和struts2的区别struts1和struts2的区别struts1和struts2的区别struts1和struts2的区别struts1和struts2的区别...

    Struts2视频教程

    Struts2是一套非常优秀的Java WEB应用框架,实现优雅、功能强大、使用简洁。目前已有大量的企业项目采用Struts2来作为Web框架进行开发,掌握Struts2是每个进行Web开发的Java程序员的一项必备技能。 本视频对Struts2...

    struts2-core.jar

    struts2-core-2.0.1.jar, struts2-core-2.0.11.1.jar, struts2-core-2.0.11.2.jar, struts2-core-2.0.11.jar, struts2-core-2.0.12.jar, struts2-core-2.0.14.jar, struts2-core-2.0.5.jar, struts2-core-2.0.6.jar,...

    Struts2_s2-016&017&ognl2.6.11_patch漏洞补丁

    -- 为修复struts2 s2-016、s2-017漏洞,重写DefaultActionMapper --> <bean type="org.apache.struts2.dispatcher.mapper.ActionMapper" name="myDefaultActionMapper" class=...

    struts2 chm 帮助文档

    struts2 chm 程序包 org.apache.struts2 接口概要 接口 说明 StrutsStatics Constants used by Struts. 类概要 类 说明 RequestUtils Request handling utility class. ServletActionContext Web-specific ...

    Struts2开发常用jar包

    包含struts2-core-2.5.10.1.jar,struts2-jfreechart-plugin-2.5.10.1.jar,struts2-json-plugin-2.5.10.1.jar,struts2-junit-plugin-2.5.10.1.jar,struts2-bean-validation-plugin-2.5.10.1.jar,struts2-cdi-...

    最新版本的Struts2+Spring4+Hibernate4框架整合

    整合使用最新版本的三大框架(即Struts2、Spring4和Hibernate4),搭建项目架构原型。 项目架构原型:Struts2.3.16 + Spring4.1.1 + Hibernate4.3.6。 此外,还有:log4j、slf4j、junit4、ehcache等知识点。 项目...

    struts2 总结工程大全

    struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全...

    struts2环境搭建+struts2 新闻发布系统+struts2 留言板

    struts2环境搭建+struts2 新闻发布系统+struts2 留言板 struts2环境搭建:基础框架搭建,简单易上手,适合新手,比你看书强多了,实践源于理论而高于理论,贵在实践 朋友。 struts2 新闻发布系统:struts2+jsp 功能不...

    Struts2漏洞检查工具2019版 V2.3.exe

    Struts2漏洞检查工具2019版 警告: 本工具为漏洞自查工具,请勿非法攻击他人网站! ==漏洞编号==============影响版本=========================官方公告==========================================影响范围====...

    struts2技术内幕+struts2权威指南

    《Struts2技术内幕:深入解析Struts2架构设计与实现原理》以Struts2的源代码为依托,通过对Struts2的源代码的全面剖析深入探讨了Struts2的架构设计、实现原理、设计理念与设计哲学,对从宏观上和微观上去了解Struts2...

    Struts2漏洞检查工具Struts2.2019.V2.3

    Struts2漏洞检查工具Struts2.2019.V2.3

    论坛系统项目(Struts 2+Hibernate+Spring实现)

    论坛系统项目(Struts 2+Hibernate+Spring实现)论坛系统项目(Struts 2+Hibernate+Spring实现)论坛系统项目(Struts 2+Hibernate+Spring实现)论坛系统项目(Struts 2+Hibernate+Spring实现)论坛系统项目(Struts...

    struts2 技术内幕——深入解析struts2架构设计

    《Struts2技术内幕:深入解析Struts2架构设计与实现原理》由国内极为资深的Struts2技术专家(网名:downpour)亲自执笔,iteye兼CSDN产品总监范凯(网名:robbin)以及51CTO等技术社区鼎力推荐。  本书以Struts2的...

    struts2实例 学生信息管理系统

    struts2实现的学生信息管理系统 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" ...

    struts2 资料struts2 资料struts2 资料struts2 资料

    struts2 资料struts2 资料struts2 资料struts2 资料

    Struts2实战.pdf

    资深开发人员深入剖析Struts2核心概念和组件 学习Struts不可不读 作者简介 作者:(美国)Donald Brown (美国)Chad Michael Davis (美国)Scott Stanlick 译者:马召 等 Donald Brown,Atlassian软件系统公司托管...

    Struts 2 远程代码执行漏洞(s2-045\s2-046)修复所用到的包

    struts2-convention-plugin-2.3.32.jar struts2-core-2.3.32.jar struts2-spring-plugin-2.3.32.jar xwork-core-2.3.32.jar --来源 ...

    struts2(1-7)源码 struts2学习入门 源码学习

    struts 初步认识Struts2并部署验证 struts2 将要进行自定义类型转换的点数据从1个增加到3个 struts3 进行全局的类型转换 struts4 使用Struts2中内部类中的方法进行自定义类型转换,用到的类StrutsTypeConverter ...

    Struts2工作流程图

    虽然Struts2号称是一个全新的框架,但这仅仅是相对Struts 1而言。Struts 2 与Struts 1相比,确实有很多革命性的改进,但它并不是新发布的新框架,而是在另一个赫赫有名的框架:WebWork基础上发展起来的。从某种程度...

Global site tag (gtag.js) - Google Analytics