Struts.xml的配置详情
分割文件
Struts.xml
<include file="struts_user.xml"/>
<include file="struts_shangpin.xml"/>
1.配置常量
整个struts的通用设置
<!-- 开发模式,更改struts.xml文件,不需要重启服务器 -->
<constant name="struts.devMode" value="true"/>
<!-- 设置编码方式 -->
<constant name="struts.i18n.encoding"value="utf-8"/>
2.Package
和java中的包,概念一样.区分action
a) Name属性,唯一
<a href="qian/login">登录1</a>
<a href="hou/login">登录2</a>
<package name="qian" namespace="/qian" extends="struts-default">
<package name="hou" namespace="/hou" extends="struts-default">
3.Action
a) 创建方式
i. 普通类
ii. 实现Action接口
iii. 继承ActionSupport类(实现数据校验必须的途径)
b) 作用 : 相当于servlet,作为核心控制器
i. 封装工作单元(请求封装需要的实际工作,例如,登录,注册,模糊查询等)
ii. 数据转移(登录成功,封装session里用户名)
iii. 返回结果(帮助框架决定由哪个结果呈现请求的资源)
c) Method属性
作用:减少action的数量
<action name="login" class="controller.UserAction"method="login">
d) 动态方法
<a href="login!method1 ">test1</a></br/>
<a href="login!method2 ">test2</a></br/>
调用login中的method1 ()方法,login中的method2 ()方法
<action name="login"class="controller.Test">
<result>ok.jsp</result>
</action>
缺点:方法名暴露于url上,不安全!
e) 通配符
<a href="loginUser">login</a></br/>
<a href="registerUser">register</a></br/>
<action name="*User" class="controller.UserAction"method="{1}">
<result>{1}_ok.jsp</result>
</action>
f) 默认action
当请求找不到相应的action,则分配给默认的action进行处理
定义:
<action name="xxx">
<result>404.jsp</result>
</action>
引用:
<!—引用默认action的位置,必须是所有action首位置 -->
<default-action-ref name="xxx"/>
4.Result
a) 常用的结果类型
i. 默认的类型转发( dispatcher )
<result name="login" type="dispatcher">login.jsp</result>
ii. 重定向 redirect
<result name="all"type="redirect">ok.jsp</result>
iii. 重定向action redirectAction
<result type="redirectAction">allproduct</result>
b) 动态结果
public class UserAction {
private String username;
private String role;
get和set省略
public String execute() {
if (username.equals("sa")) {
role = "ceo";
} else if (username.equals("admin")) {
role = "cto";
} else {
role = "se";
}
return "success";
}
}
<action name="login"class="controller.UserAction">
<result>${role}_manager.jsp</result>
</action>
c) 全局结果
作用:许多action需要方法同一个结果
<a href="b">testb</a>
public String execute(){
System.out.println("做了一些事情!");
当返回的结果,在struts.xml中找不到的时候,就会访问全局结果
return "somethings";
}
<package name="s" extends="struts-default">
<global-results>
<result name="somethings">some.jsp</result>
<action name="b" class="controller.Test">
<result>ok.jsp</result>
</action>
</package>