Struts2结果视图
标签: JAVA框架
一、回顾struts2
struts2简介
搭建开发环境
1 拷贝jar包
2 创建struts.xml配置文件(src目录下)
3 在web.xml中配置过滤器
三开发案例
用户发出请求
四、执行过程图
五 struts2的配置
1 配置文件和加载顺序
default.properties
struts-default.xml
struts.xml
struts.properties
web.xml
2 constant配置
3package元素
name
extends:struts-default
abstract
namespace
4 action 元素
name
class
method
六 动作类的书写
1 普通的类和方法(返回值都是String类型)
2 实现Action接口
3 继承ActionSupport(推荐使用这个)
七 动作方法的书写
public String XXX(){}
八 动作请求
1 使用通配符 * {1}
九 在动作类中访问ServletAPI
org.apache.struts2.ServletActionContext
一 结果视图
1、局部和全局结果视图
a、局部结果视图
<action name="user" class="com.cd.action.UserAction" method="addUser">
<result>/success.jsp</result>--局部结果视图
</action>
b、全局结果视图
多个动作对应同一个结果视图
<package name="default" extends="struts-default" abstract="true">
<global-results>
<result name="success">/success.jsp</result>
</global-results>
</package>
全局和局部的查找规则:
先查找局部,局部有满足条件的,返回局部的结果视图
局部不满足查找全局 全局也没有报错,全局有返回全局的结果视图
2 result 元素的配置
name 名字 它对应的是动作方法的返回值 默认不写是success
type 到达目标的形式 默认值是dispatcher(转发)
type 如果是 chain:用户转发到另一个动作
如果是dispatcher 代表的是用户转发到jsp页面
3 自定结果视图
生成验证码为例
步骤
1 定义类,直接或间接的实现com.opensymphony.xwork2.Result接口。
一般我们都继承org.apache.struts2.dispatcher.StrutsResultSupport类,实现doExecute方法
2 声明结果类型 在struts.xml文件中声明
<package name="p2" extends="struts-default">
<result-types>
<result-type name="captacha" class="com.cd.action.CaptachaResult"></result-type>
</result-types>
3 使用结果类型
<action name="captachaResult">
<result name="success" type="captacha">
<param name="width">150</param>
<param name="height">50</param>
</result>
</action>
4、封装请求参数(重要)
方式一 用Action动作类作为模型对象 具体代码见工程Day_struts2Params中的login.jsp和UserAction类
方式二 动作类和模型分开(推荐)
具体代码见 工程Day_struts2Params中login2.jsp和PersonAction、 Person类
方式三 (面试题,推荐)动作和模型分开
借助模型驱动 ModelDriven接口实现
具体代码见 工程Day_struts2Params中login3.jsp和CustomAction、 Custom类
5、静态参数注入
<action name="student" class="com.cd.action.StudentAction" method="login">
<!-- 静态参数注入 -->
<param name="name">游客</param>
<result>/index.jsp</result>
</action>
public class StudentAction extends ActionSupport {
private String name;
public String getName() {
return name;
}