Struts2对Servlet的API的访问
1.完全解耦合的方式
通过ActionContext对象,直接获得所有参数的map<String,String[]>,返回参数到页面只能对request,session,application的map进行操作,不能对这些对象本身进行操作。
2.使用ServletAPI的原生方式
通过ServletActionContext直接获得Request对象和ServletContext对象(对application操作),可以获得真实的request,session,application对象以及他们相应的方法。
3. 接口注入方式
通过实现ServletRequestAware,ServletContextAware等接口,实现接口中的方法获得API操作对象,使用这种方法是线程安全的,因为Action是多例的,每个访问都会实例化一个Action对象。(Servlet是单例的)
Struts2结果页面的配置
1.局部结果页面的配置
在某个action中配置result,只对该action有效
2.全局结果页面的配置
在某个包中配置global-results,该包中的所有action只要返回这个值,就会跳转到相应页面
3.result标签的一些属性
name属性:逻辑视图的名称,默认为success
type属性:页面跳转的类型,取值有下列几种
dispatcher: action转发到jsp(默认值)
redirect: action重定向到jsp
chain: action转发到action
redirectAction:action重定向到action(当action不在同一个包下时需要配置一些变量)
Struts2数据的封装
1.属性驱动:提供属性的set方法(不常用)
这种方法就是给action提供与domain类相应的属性和他们的set方法,前端代码和平常一样
2.属性驱动:页面中提供表达式的方式
这种方式需要再action中提供一个domain对象,不需要实例化,但要有get和set方法,缺一不可。还需在前端页面提供表达式,也就是input的name的写法。这种方式适用于当一个表单提交的数据中包含多个对象时。
3.模型驱动:采用模型驱动方式
这种方式需要实现ModelDriven<User>接口,以及他的getModel()方法,User就是你要封装的类对象。这种方式最常用,但只能封装一个对象,多个对象需要用第二种方式
4.封装数据到List集合中
封装到List和封装到map和属性驱动---页面提供表达式很类似,都需要在action中提供一个List<User>(Map<String,User>)只是页面表达式不同
5.封装数据到map中(hashmap)
页面表达式中map的key可以随便取