昨天晚上已经学习了如何配置struts配置文件以及写一个简单的struts案例,可以参考下:Struts2及Hibernate学习(一)
今天就学习一下昨晚写的小案例执行时struts配置文件内部的执行顺序。
一、首先我们用一张图来看看struts2应用的执行过程:
启动tomcat,启动的同时加载web.xml文件,然后实例化并初始化web.xml文件中配置的struts2过滤器,即StrutsPrepareAndExecuteFilter类,然后加载struts.xml配置文件。对应着图中的前3步,都是在启动tomcat的过程中完成的。
tomcat启动成功后,在浏览器发送请求: hello.action,请求首先到达过滤器,过滤器截取请求的动作名称hello,并从struts.xml中找对应的action,找到后实例化action对应的动作类,即HelloAction,调用动作类的对应的动作方法,方法有返回值,即对应的jsp文件名称,根据返回值,找到对应action中的结果视图,即jsp页面,然后返回给浏览器,展示结果。
二、再研究一下struts2配置文件的执行顺序。
我们创建一个和昨天一样的案例,代码可以参考昨天的。好了之后启动服务并访问一下。
下面来探讨下struts2配置文件的执行顺序
1、struts2配置文件的加载顺序
注意:
1.1、Struts2提供了两种配置的方式。一种是key=value的方式,即使用.properties文件。另一种是xml文件配置。我们推荐使用xml文件(它能描述层级关系)。
1.2、当多个配置文件中,有相同的参数,后面的会把前面的值给覆盖了。
2、struts2的常用的常量,都在default.properties配置文件中。(下面的几步都用到了这些常量)
3、看看struts2的配置文件执行的顺序。(此部分要参考上面第二部分的常用常量)
3.1、先设置一下struts应用为开发模式,这样修改了配置文件后就不需要重启服务。
3.2、struts.xml文件中修改访问后缀名为do。
此时不用重启服务,因为3.1已经设置了开发模式,直接访问即可。
先看一下index.jsp文件
现在浏览器进行访问(此时已经修改了默认的访问后缀名,是.do, 不是.action了),结果为:
可以看到,我们在struts.xml文件里面修改了访问后缀名之后,再次访问原来设置的.action结尾的链接地址就无效了,可以看出来struts2的配置文件是struts.xml后于default.properties,在struts.xml文件中设置的访问后缀名.do覆盖了前面执行的default.properties文件中的默认的访问后缀名.action。
接着我们在index.jsp文件中增加以.do结尾的链接地址。
访问一下看看:
可以看出,只有.do结尾的链接路径访问成功。
3.3、新增一个文件,struts.properties,内容也是修改访问后缀。
启动服务,访问一下看,:
可以看出来,在struts.properties文件中增加的修改访问路径后缀也生效了,将struts.xml中设置的访问路径给替换掉了。即struts.properties配置文件的执行后于strtus.xml配置文件以及default.properties配置文件的执行。
现在我们在index.jsp中新增一个以.abc结尾的访问链接。
访问一下看看:
3.4、接下来修改web.xml配置文件,同样是修改访问路径后缀名
修改完之后可以像上面几步那样执行访问一下看,肯定是访问不了的。
然后我们在jsp中增加一个.abcd结尾的访问链接地址。
然后再访问看看,.abcd结尾的链接是可以访问的。
以上所有就是证明了struts2配置文件的执行顺序:
default.properties-->strtus-default.xml-->struts-plugin.xml-->struts.xml-->strtus.properties-->web.xml
红色的三个文件是struts2相关jar包中的,后三个是我们自己写的。
好了 今天就到这里,得收拾收拾去同学家吃饭了。明天继续!
本文为原创,如有转载,请注明出处。