<struts> 为根标签 没什么含义
<package>代表一个模块,模块里可以放多个action
属性name为模块的名称(唯一);
属性extends="struts-default"实际上是把 package为struts-default中的所有东西 继承过来。 这里面的东西是struts2运行的最基本的东西
属性namespace 决定其url 如:
<struts>
<package name="helloworld" namespace="/" extends="struts-default">
<action name="helloworldaction" class="cn.hpy.structs.action.HelloWorldAction">
<result name="index">index.jsp</result>
</action>
</package>
</struts>
中 url为http://localhost:8080/day1_struts/helloworldactioin.actoin 红色斜杠为namespace(根目录:WebRoot);
如果改namespace=“/base”;
其url为http://localhost:8080/day1_struts/base/helloworldactioin.actoin .但是也会报错,它会以为index.jsp在/base文件夹下面。
小结:如果namespace为 "/",那么紧接着就该跟action中的name值(名称)。
但是/base后面加任何/abcdefgh...都能请求到action
原因:
查找规则确定的是 先查找/base/a下的helloworldaction.
再去查找/base下的hellloworldaction;
要解决这个 就需要在webroot下创建一个base文件夹
额外:
要解决继承功能也需要靠namespace 如下
<struts>
<package name="helloworld" namespace="/" extends="struts-default">
<action name="helloworldaction" class="cn.hpy.structs.action.HelloWorldAction">
<result name="index">index.jsp</result>
</action>
</package>
<package name="abc" namespace="/abc" extends="helloworld">
</package>
</struts>
访问url为http://localhost:8080/day1_struts/abc/helloworldactioin.actoin 就是通过 abc包去访问的