Struts2核心工作原理
2015-10-21 16:04
633 查看
Struts2作为一种前端的应用框架,使用到的无非三种文件:1、web.xml 2、struts.xml 3、Action类。当然这只是需要我们自己要编写的 三个文件真正用到的不仅仅是这三个啦。
原理图
关于Struts2的工作原理,在网上查资料的过程中,找到了一张很经典的图,相信大部分人也都看见过这张图。它很清晰的反映出Struts2中各 个部件的职责和请求流程。
配置文件
接下来我们得明白web.xml中所配置的内容。
web.xml:
主要是声明当发送一个请求时,由Struts2中的哪个过滤器进行拦截并进行解析。
<filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
Struts.xml:
stuts.xml文件中主要是对拦截器的定义,以及action的名称和class的对应关系,还有返回得页面的name和路径文件的匹配关系。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <package name="struts2" extends="struts-default"> <!-- 拦截器定义 --> <interceptors> <interceptor name="theInterceptor1" class="com.shengsiyuan.intercepter.TheInterceptor1"> <param name="test">shengsiyuan</param> </interceptor> </interceptors> <action name="login" class="com.shengsiyuan.struts2.LoginAction"> <result name="success">/result.jsp</result> <result name="input">/index.jsp</result> <interceptor-ref name="theInterceptor1"></interceptor-ref> <interceptor-ref name="defaultStack"></interceptor-ref> </action> </package> </struts>
了解了有关两个配置文件中的具体内容后,接下来就开始顺一下Struts2请求的流程。 在此之前,应该首先明白在Struts2中最核心的原理就是利用了拦截器(inceptor)。每一个功能的实现都是建立在拦截器的原理之上的。
—————————————————–拦截请求————————————-
1、首先,在浏览器中输入访问的请求地址例如:http://localhost:8080/struts2/index.action 2、Struts2中的container容器会拦截请求,将请求按顺序转发给图中的三个过滤器。ActionContextCleanUp,OtherFilters,FilterDisPatcher(最核心的)
————————————————-FilterDispatcher——————————–
3、filterDispatcher会根据ActionMapper来查找请求的是哪个action 4、当决定要调某一个action时,filteDispatcher会将请求交给ActionProxy
————————————————ActionProxy————————————–
5、ActionProxy根据Configuration(stuts.xml文件)和ActionMapper找到要调用的action类 6、AcionProxy创建一个ActionInvocation的实例。(这里是不是很眼熟,这就是前几篇博客中介绍到的动态代理的实例啊。。。) 7、这时,ActionProxy就会去调用真正的action中要执行的方法,当然在此之前,会先执行拦截器中的代码。
————————————————–完成——————————————
8、执行完action中的方法后,会将结果返回,并产生一个HttpResponse来进行响应页面。
小结
至此,整个Struts2的请求流程执行完毕。当然这里还有很多我们需要注意的细节问题。比如Action中我们通常会继承ActionSupport这个类。 1、但还是要注意,这并不是Struts2实现所必须的。它只是为了继承更多的实现方法的一个简便方式。比如验证功能等。这里大家还是不能走进误区。 2、另外就是关于Struts.xml配置文件中书写的内容还包括很多其他的属性字段的使用,比如method来自定义执行的方法,action中name的通配符 使用方法如:login_*等的含义,这样自然少不了method="{1}"这个参数的含义了!还有INPUT返回值的使用等等! 3、关于Struts中的验证方法的使用以及传值过程中类型转换,模型驱动等等。都还需要我们不断的学习和实践!
相关文章推荐
- 如何将Birt源码添加到Eclipse中
- java中创建对象的方法
- SpringMVC表单标签简介
- eclipse安装pydev插件
- springmvc视图解析机制1
- Spring注解详解
- (非原创)java学习(四) 日志操作 --同样是给自己挖坑
- jdk1.7下载路径
- (非原创)java学习(三) 同步问题--我要给自己挖坑,不然都不会去学习
- java基础学习笔记——集合解析
- java基础学习笔记——Map
- java加密技术(十二) keytool命令
- java SSH + extj 项目过程中遇到的问题及注意点(二)
- springMVC中普通类调用注解service方法
- Java enum枚举类使用小技巧
- Java enum枚举类使用小技巧
- java基础学习笔记——泛型代码详解
- Spring集成Quartz定时任务框架介绍和Cron表达式详解
- eclipse中安装SVN
- eclipse中安装SVN