Struts运行机制
请求到达容器
客户端发送一个http的request请求,-》http请求根据地址会到达服务器,-》然后服务器根据url会达到容器(如tomcat)-》容器会根据url、配置到达具体项目找到web.xml-》然后会在web.xml发现struts2的配置...从而会进入struts控制阶段。
容器内部处理
1.客户端发起一个http请求,指向tomcat容器。
2.请求经过一系列(主要是上面的三层,按顺序ActionContextCleanUp、其他过滤器(SiteMesh等)、 FilterDispatcher)
3.最终FilterDispatcher询问ActionMapper是否调用某个action来处理这个请求(request)
4.如果ActionMapper确定调用action,此时FilterDispatcher会把请求处理交给ActionProxy。
5.然后ActionProxy通过Configuration Manager、struts.xml询问框架的配置文件,找到调用的action类
然后ActionProxy生成,即创建一个ActionInvocation调用实例。
6.ActionInvocation实例使用命名模式来调用,在调用action的过程前后,涉及到相关的拦截器 (Intercepter)的调用。
7.Action调用完成后,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果result。即Result信息返回给ActionInvocation,然后产生一个reponse响应,发给客户端。
Struts2拦截器
1.strtus中所有的配置文件,即package都必须继承struts-default.xml如<package name="com.kay.struts2" extends="struts-default" namespace="/test">就像java中的所用对象继承Object一样。
2.struts中的拦截器会有一个拦截器栈,可以配置一个默认的拦截器栈,如<default-interceptor-ref name="mystack"></default-interceptor-ref>,其中mystack是默认拦截器栈名称。如果一个Action中引用了其他的拦截器,那么默认的拦截器将会失效,包括拦截器栈。
3.struts配置加载顺序,顺序如下:
Default.properties 该文件存放在strtus2-core-xxx.jar中的org.apache.struts2中,默认全局配置
Struts-default.xml 该文件存放在strtus2-core-xxx.jar的根目录下,加载默认的组件,这些组件包括一系列的拦截器和转换器
Struts-plugin.xml 如果为应用配置了插件,则插件中的jar文件会存在这个文件,它会被自动加载。
Strtus.xml 自己创建的文件,用于存放自定义的组件或拦截器,这个文件可以覆盖default.properties中的默认配置
Struts.properties 自己创建的文件,不能改名字,用于修改全局配置,一般我们会把修改全局配置放在struts.xml中,但是如果有struts.properties这个文件,将会覆盖前面的,也即是前面的配置会被后面的给覆盖掉。