dispatcher:用于页面转发,页面跳转过程一直是同一个线程,Action中的数据一直保存在。
redirect:可用于返回一个页面、一个action、链接到一个网址。
缺点:redirect把一个http返回码(SUCCESS)以及返回的页面位置一起重新发给web服务器,容纳后由web服务器产生一个新的HTTP请求,就会产生一个新的线程,保存在原来Action执行的线程中的数据就无法访问。
所以,result需要包含Action的数据,那么redirect不是一个可行的办法。因为新的HTTP请求时在Servlet容器的新的线程中处理的,ActionContext中的所有状态都不会存在。
chain:功能与redirect的action转发类似,不过与redirectaction转发功能不同的是它可以将Action中的数据一直保存在同一个HTTP请求中。
关于struts2的其他事儿
===============
<package>
===============
struts.xml 中的package的name可以随意定义,只做继承时使用。
===============
<constent>
===============
struts.xml 中
用<constent name="" value=""/>
来改变default.proerties 中key对应的值
==============================================
覆盖默认的资源文件 -- default.properties
==============================================
也可以在clasess(/src)下建立struts.properties的方式,覆盖默认的配置文件default.proerties
内容如:
struts.i18n.encoding=gbk 设置字符集
struts.action.extension=do 设置请求后缀名
struts.configuration.files=struts-default.xml,struts-plugin.xml,struts.xml Struts2自动加载的配置文件
==============
抽象包
==============
<package name="..." abstract="true">
表示该包中不能有action定义,只能通过包来继承来定义
=============
命名空间
=============
<package name="..." namespace="">
将不同的应用分割开
如果不配置,表示当前包在一个默认的命名空间里
namespace="/hello"
请求路径就改变为 /hello/register
需要更改表单路径 并且一定要手工加.action
<s:form action="/hello/register.action">
寻找方式,如果namespace为默认,而表单路径为/hello/register.action
当struts没有找到该命名空间是,自动到默认的命名空间找
=============================
<include> 模块化的配置
=============================
<include file="struts_1.xml"></include>
<include file="struts_2.xml"></include>
struts_1.xml和struts_2.xml都是标准的strust的xml配置文件
include后,struts会在启动后将struts_1.xml和struts_2.xml的配置信息一同加载到内存中。
===============
Struts2 MVC
===============
FilterDispatcher ----- 核心控制器
每个action ------- 业务控制器
--------- 调用业务逻辑组件 ---- 调用DAO ---- 数据库交互
=================
分模块开发
=================
src下建立
struts1.xml
struts2.xml
不同的开发人员,只需要写自己的xml配置文件
只需要加入到struts.xml中
<include file="struts1.xml"/>
<include file="struts2.xml"/>
----------------
struts1.xml
xml声明,DTD信息... 结构与struts.xml相同
<struts>
<package name="" ...>
...
...
...
----------------
struts2.xml
xml声明,DTD信息... 结构与struts.xml相同
<struts>
<package name="" ...>
...
...
...
================
模型驱动
================
**属性驱动**:表单的字段都作为Action的属性存在
**模型驱动**:用一个JavaBean来装载对象 类似于ActionForm
模型Bean
public class User {
private String username;
private String password;
private String repassword;
private int age;
private Date date;
// setter... getter...
}
### ValueStack ### --值栈
ModelDriven<T> 该接口使用的泛型,
模型是什么类型那个的泛型就是什么类型
------ T getModel()
Action 需要实现 ModelDriven接口
public class RigesterAction extends ActionSupport
implements ModelDriven<User> {
private User user = new User();
public User getModel() {
return user;
}
@Override
public String execute() throws Exception {
return SUCCESS;
}
}
====================
Preparable 接口
====================
Preparable接口中有一个void prepare() throws Exception方法,实现该接口的Action类,将在执行这个action所以方法之前执行prepare(),称为action准备方法。
=========================
显示特定的出错信息
=========================
<s:fielderror cssStyle="color:red">
<s:param>username</s:param>
</s:fielderror>
去掉前面的“原点”
需要自己修改 fielderror.ftl模板
去掉前面的点代码