Include:
配置的action比较多的时候可以根据action的逻辑进行分包操作,就是命名多个struts.xml,在主要的struts.xml中添加include标签,将其他逻辑的xml包含进来,配置如下:
<include file="struts1.xml"></include>
Intercerptor拦截器配置(跟过滤器差不多)、后面会详细讲解,先了解下配置
可以配置intercerptor栈,支持继承,如下:
<interceptors>
<interceptor-stack name="myIcp">
<interceptor-ref name=""></interceptor-ref>
</interceptor-stack>
</interceptors>
补充Action的配置:
配置action的method属性(项目中常用配置)
Name对应前台页面传递的action名字,method对应action类中的方法名字
其中在Action类中方法的名字可以这样写:doLogin,这样的目的是防止与关键字重名,但是最好还是采用前一种方法,起名字时避免起关键字,在查找方法时也比较方便。
DMI动态方法调用:
前台:
<a href="<%=path %>/test1/test1.action!add">test1</a>
Struts.xml配置:
<action name="test1" class="com.ant.action.LoginAction">
<result name="success">/msg/loginSuc.jsp</result>
<result name="fail">/msg/loginFail.jsp</result>
</action>
在Action类中要有add方法
缺陷:多个action对应的方法返回值和返回页面要一致
有点:省写action的配置
建议使用method方式
Forward action(一般不用)是指有些程序员习惯是jsp与jsp页面之间不可以直接跳转,个人认为这没太大的意义
<action name="index">
<result>/index.jsp</result>
</action>
前台: <a herf="index.action">主页</a>
默认action
<default-action-ref name="error"></default-action-ref>
<action name="error">
<result>/error.jsp</result>
</action>
在请求不存在的时候专项error.jsp
Web.xml配置不存在页面或请求的转发Error-page的配置
<error-page>
<error-code>404</error-code>
<location>/error.jsp</location>
</error-page>
根据ie版本和配置的不同有不同的情况
在action的method配置中会遇到配置量很大的情况,这时用到通配符:
*表示所有字符(不包含”/“)
**表示所有字符(包含”/“)
\表示转义符
前台
<h1>CRUD操作</h1>
<a href="addUser.action">添加用户</a><br>
<a href="delUser.action">删除用户</a><br>
<a href="modifyUser.action">修改用户</a><br>
<a href="queryUser.action">查询用户</a><br>
配置
<!--
<action name="addUser" class="com.ant.action.UserAction"
method="add">
<result name="success">/addUserSuc.jsp</result>
</action>
<action name="delUser" class="com.ant.action.UserAction"
method="del">
<result name="success">/delUserSuc.jsp</result>
</action>
<action name="modifyUser" class="com.ant.action.UserAction"
method="modify">
<result name="success">/modifyUserSuc.jsp</result>
</action>
<action name="queryUser" class="com.ant.action.UserAction"
method="query">
<result name="success">/queryUserSuc.jsp</result>
</action>
-->
<action name="*User" class="com.ant.action.UserAction"
method="{1}">
<result name="success">userControl/{1}UserSuc.jsp</result>
</action>
由原来的四个action变成了一个action
这种优势在针对多个表进行CURD操作时更为突出
如对Role表也进行CURD操作,只需要在struts.xml中增加一个action
<action name="*Role" class="com.ant.action.RoleAction"
method="{1}">
<result name="success">userControl/{1}RoleSuc.jsp</result>
</action>
在效率上可以优化,关键在于action名字的取法:如前台:userAdd.action
后台可以action name="user*"
甚至可以起名字的时候采用_ 如User_add.action(表名_方法名,表名一定要大写,因为在配置的时候第一个参数要作为类名)
在后台可以采用<action name="*_*" class="com.ant.action.{1}Action"
method="{2}">
<result name="success">baseControl/{1}/{0}Suc.jsp</result>
</action>
由此可见,在jsp命名的时候也要注意大小写的问题{0}表示*_*
采用这种方式一定要做好注释,在系统维护的时候可以方便的查看
在通配符的使用中要注意优先级
不包含通配符的路径,优先级最高
包含通配符的路径,优先级按照顺序来定,前面的大于后面的
Zreo configration 零配置 注解配置 配置放在action类中,struts.xml是空的
在Action类中需要配置以下内容,是类级别的
@ParentPackage(value="struts-default")
@Namespace(value="/")
//@Result(name="success",value="/login.jsp")
@Results({
@Result(name="success",value="/login.jsp"),
@Result(name="error",value="/loginError.jsp")
})
前台action=user.action注意user是小写,要与类名一致,如类名UserAction
个人认为,这种方式将是struts2配置的发展方向
<!--EndFragment-->