您的位置:首页 > 编程语言 > Java开发

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中的验证方法的使用以及传值过程中类型转换,模型驱动等等。都还需要我们不断的学习和实践!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: