Struts 2配置详解
Struts 2基本架构
-
核心控制器
-
需要在web.xml中进行配置
-
对框架进行初始化,以及处理所有的请求
<filter> <filter-name>struts2 </filter-name> <filter-class> org.apache.struts2.dispatcher.ng.filter. StrutsPrepareAndExecuteFilter </filter-class> </filter> <filter-mapping> <filter-name>struts2 </filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
Struts 2.0版本的核心控制器为org.apache.struts2.dispatcher.FilterDispatcher
-
-
Action
-
创建Action
- 实现Action接口
- 继承ActionSupport类
-
Result
- 实现对结果的调用
- result元素的值指定对应的实际资源位置
- name属性表示result逻辑名
配置Action和Result
... <struts> <package name="default" namespace="/" extends="struts-default"> <action name="login" class="cn.houserent.action.LoginAction"> <result name="success">/page/manage.jsp</result> <result name="input">/page/login.jsp</result> <result name="error">/page/error.jsp</result> </action> </package> </struts>
-
Struts 2配置文件
-
struts.xml
-
核心配置文件,主要负责管理Action
-
通常放在WEB-INF/classes目录下,在该目录下的struts.xml文件可以被自动加载
... <struts> <constant name="" value=""/> <package name="" namespace="" extends=""> <action name="" class=""> <result name=""></result> </action> </package> </struts>
-
constant元素
-
配置常量,可以改变Struts 2框架的一些行为
-
name属性表示常量名称,value属性表示常量值
... <struts> <constant name="struts.i18n.encoding" value="UTF-8"/> <package name="" namespace="" extends=""> <action name="" class=""> <result name=""></result> </action> </package> </struts>
-
-
package元素
-
包的作用:简化维护工作,提高重用性
-
包可以“继承”已定义的包,并可以添加自己包的配置
-
name属性为必需的且唯一,用于指定包的名称
-
extends属性指定要扩展的包
-
namespace属性定义该包中action的命名空间,可选
... <struts> <constant name="" value=""/> <package name="default" namespace="/" extends="struts-default"> <action name="" class=""> <result name=""></result> </action> </package> </struts>
-
-
struts-default.xml
- Struts 2默认配置文件,会自动加载
- struts-default包在struts-default.xml文件中定义
-
struts-plugin.xml
- Struts 2插件使用的配置文件
-
加载顺序
- struts-default.xml
- struts-plugin.xml
- struts.xml
-
Struts 2 Actino
-
Action的作用
-
封装工作单元
-
数据转移的场所
-
返回结果字符串
public class HelloWordAction implements Action{ private String name=""; private String message=""; public String execute(){ this.setMessage("Hello,"+this.getName()+"!"); return SUCCESS; } //...省略getter、setter方法 }
-
method属性
-
实现Action中不同方法的调用
-
特点
- 避免动态方法调用的安全隐患
- 导致大量的Action配置
<action name="login" class="cn.hoserent.action.UserAction" method="login"> ...... </action> <action name="register" class="cn.hoserent.action.UserAction" method="register"> ...... </action>
-
动态方法调用
-
作用:减少Action数量
-
使用:actionName!methodName.action
-
禁用:将常量 struts.enable.DynamicMethodInvocation设置为false
/user!login.action --> 调用UserAction的login()方法
public class UserAction implements Action{ ... public String login(){...} public String register(){...} }
<action name="user" class="cn.hoserent.action.UserAction"> <result name="login">/page/manage.jsp</result> ...... </action>
-
-
-
通配符(*)
-
作用:另一种形式的动态方法调用
<action name="*User" class="cn.hoserent.action.UserAction" method="{1}"> <result>/page/{1}_success.jsp</result> <result name="input">/page/{1}.jsp</result> </action> <!--示例--> 页面表单-->/loginUser.action struts.xml--> method-->method="login" /page/login_success.jsp /page/login.jsp
-
-
配置默认Action
-
没有Action匹配请求时,默认Action将被执行
-
通过< default-action-ref …/>元素配置默认Action
<struts> <default-action-ref name="defaultAction"/> <package name="default" extends="struts-default"> <!--省略class属性,将使用ActionSupport类--> <action name="defaultActon"> <!--如果请求的Action不存在,页面跳转到error--> <result>error.jsp</result> </action> </package> </struts>
-
-
Result常用结果类型
-
常用结果类型
-
dispatcher类型
- 默认结果类型,后台使用RequestDispatcher转发请求
-
redirect类型
- 后台使用的sendRedirect()将请求重定向至指定的URL
-
redirectAction类型
- 主要用于重定向到Action
<action name="*User" class="cn.houserent.action.UserAction" method="{1}"> <result name="success" type="dispatcher">/page/{1}_success.jsp</result> <result name="input">/page/{1}.jsp</result> <result name="error">/page/error.jsp</result> </action>
-
Result配置动态结果
-
动态结果
-
配置时不知道执行后的结果是哪一个,运行时才知道哪个结果作为视图显示给用户
public class UserAction extends ActionSupport{ private String nextDispose; public String login(){ ... if(user.isManager()){ nextDispose = "manager"; }else{ nextDispose = "common"; } return SUCCESS; } public Stirng getNextDispose(){ return nextDispose; } ... }
<struts> <package name="default" extends="struts-default"> <action name="login" class="cn.hoserent.action.UserAction" method="login"> <!--${nextDispose}表示调用Action中的getNextDispose方法,获取导航信息--> <result type="redirectActino">${nextDispose}</result> <result name="error">/page/error.jsp</result> </action> <action name="common" class="cn.hoserent.action.CommonUserAction"> ... </action> <action name="manage" class="cn.hoserent.action.ManagerAction"> ... </action> </package> </struts>
-
全局结果
-
全局结果
-
实现同一个包中多个action共享一个结果
<struts> <default-action-ref name="defaultAction"/> <package name="default" extends="struts-default"> <global-results> <result name="error">/page/error.jsp</result> <result name="login" type="redirect">/page/login.jsp</result> </global-results> </package> </struts>
-