1.获得请求路径的URI,例如url是:http://server/struts2/path1/path2/path3/test.action
2.首先寻找namespace为/path1/path2/path3的package,如果不存在这个package则执行步骤3;如果存在这个package,则在这个package中寻找名字为test的action,当在该package下寻找不到action 时就会直接跑到默认namaspace的package里面去寻找action(默认的命名空间为空字符串“” ),如果在默认namaspace的package里面还寻找不到该action,页面提示找不到action
3.寻找namespace为/path1/path2的package,如果不存在这个package,则转至步骤4;如果存在这个package,则在这个package中寻找名字为test的action,当在该package中寻找不到action 时就会直接跑到默认namaspace的package里面去找名字为test的action ,在默认namaspace的package里面还寻找不到该action,页面提示找不到action
4.寻找namespace为/path1的package,如果不存在这个package则执行步骤5;如果存在这个package,则在这个package中寻找名字为test的action,当在该package中寻找不到action 时就会直接跑到默认namaspace的package里面去找名字为test的action ,在默认namaspace的package里面还寻找不到该action,页面提示找不到action
5.寻找namespace为/的package,如果存在这个package,则在这个package中寻找名字为test的action,当在package中寻找不到action或者不存在这个package时,都会去默认namaspace的package里面寻找action,如果还是找不到,页面提示找不到action。
示例:
<?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="struts" namespace="/test" extends="struts-default"> <action name="helloworld" class="cn.struts.demo.HelloWorldAction" method="execute"> <result name="success">/WEB-INF/page/hello.jsp</result> </action> </package> </struts>
则访问路径为:http://localhost:8080/strutsdemo/test/helloworld(正常情况下是这样访问)
或者是http://localhost:8080/strutsdemo/test/aaa/helloworld
或者是http://localhost:8080/strutsdemo/test/aaa/bbb/helloworld 都可以
注:当在该package下寻找不到action 时就会直接跑到默认namaspace的package里面去寻找action(默认的命名空间为空字符串“” ),对这句话举个例子说明一下:
<?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="struts" namespace="/test" extends="struts-default"> </package> <package name="default" namespace="" extends="struts-default"> <action name="helloworld" class="cn.struts.demo.HelloWorldAction" method="execute"> <result name="success">/WEB-INF/page/hello.jsp</result> </action> </package> </struts>
访问的路径还是http://localhost:8080/strutsdemo/test/helloworld,不过此时name为struts的包并没有helloworld这个action,所以现在就到默认命名空间下面的包也即name为default的包中寻找name为helloworld的action,如果该包下面也没有helloworld这个action,则页面会报HTTP-404错误