1,structs.xml文件解析
<package name="front" namespace="/front" extends="struts-default">
<global-results>
<result name="error">/WEB-INF/jsp/error.jsp</result>
</global-results> <global-exception-mappings>
<exception-mapping exception="java.lang.Exception" result="error"/>
</global-exception-mappings> <action name="helloworld">
<result >/hello.jsp</result>
</action>
</package>
name,对应的是前台,后台或者模块的名称,一般设置的为namespace相同
namespace:决定了action的访问路径,默认为"",可以接受所有的action,namespace可以写为/,或者/xxx,/xxx/yyy,那么对应的访问路径分别为/index.action,/xxx/index.action,或者/xxx/yyy/index.action,这里的 .action默认是可以省去的
2,执行过程
<package name="front" namespace="/front" extends="struts-default">
<action name="hello" class="test.indexaction1">
<result name="success"> /hello.jsp</result>
</action>
</package>
进入structs.xml文件后,根据url进行匹配namespace,如果没有匹配成功,则返回到web.xml文件中,执行index.jsp文件,如果匹配成功,则进行下一步操作:匹配action,根据action的name,做进一步匹配,如果匹配不成功,仍然返回web.xml文件中进行下一步操作,如果匹配成功,开始根据class名来查找对应的class,如果没有class这个值,则默认执行的是ActionSupport这个类中的execute方法,默认返回的是"success",然后根据success来匹配action后面的result节点的name值,如果匹配到,则返回对应的jsp文件,这就是整个过程,如果没有找到,则返回404
3,路径问题
sturcts2的路径是根据action的路径而不是jsp的路径来确定的,所以尽量不要使用相对路径虽然可以使用redirect方式解决,但redirect方式并非必要解决方法很简单,统一使用绝对路径。在jsp中用request.getContextRoot方式来拿到webapp的路径,或者使用myeclipse经常使用的,指定basePath<base href=<%=basepath%>后,相当于指定整个页面的连接的基本url
4,resulttype
这个常用的有下面的
- dispatcher 服务器内部跳转到另外一个页面
- redirect 浏览器页面跳转到另外一个页面
- chain 服务器内部跳转到另外一个action
- redirectAction 浏览器跳转到另外一个action
- framwork
- stream
5,structs tags
通用标签
- property
- set 集合,主要用于键值对,
- bean 实例化对象
- include 少用
- param
- debug(这个是<s:debug></s:debug>)
控制标签
- if elseif else
- iterate 循环控制器
UI标签 结合其他框架,用的比较少
Ajax标签 用的比较少
$#%的区别 用的比较少