一、Struts2的4种结果处理方式
1、dispatcher:转发
2、redirect:重定向
3.、chain:转发至Action,格式如下:
<result name="success" type="chain">
<param name="actionName">Demo1Action</param>
<param name="namespace">/<param>
</result>
4、redirectAction:重定向至Action,格式如下
<result name="success" type="redirectAction">
<param name="actionName">Demo1Action</param>
<param name="namespace">/<param>
</result>
注:在源码内,是在ServletRedirectResult类中实现转发和重定向功能的,具体代码与在servlet中的一致,即
转发:request.getRequestDispatcher("userCreate.jsp").forward(request, response);
重定向:response.sendRedirect("indext.jsp");
二、获得ServletAPI
1、先获得当前线程的ActionContext对象
ActionContext ac = ActionContext.getContext();
2、通过ActionContext数据中心来获取ServletAPI。
常用的方法如下:
void put(String key , Object value):将key-value键值放入ActionContext中
Object get(String key):通过key获得值value;
Map<String, Object> getApplication():返回一个Application级的Map对象
Map<String , Object> getSession():返回一个Map类型的HttpSession对象
void setSession(Map<String, Object> session):设置一个Map类型的Session值
void setApplication(Map<String , Object> application):设置Application上下文
或者通过ServletActionContext这个工具类来获取,不过不推荐。
三、参数获取的方式
1、属性驱动
直接在action中定义与前端同名的一个属性。属性意味着需要有set和get方法。
这样做的理论基础:每次请求时,就会创建一个Action。故Action线程安全,可以在Action中直接定义属性。
2、对象驱动
在action中定义一个对象的属性,同时配置set/get方法,如user对象
在前端界面部分,只需要在命名时,在名字前加对象名作为前缀如,user.name
3、模型驱动
实现ModelDriven接口,实现getModel()方法,即 return user;
同时需要将user实例化,即 private User user = new User();
此时的user是一个成员变量,不需要set/get方法。
前台页面部分,与属性驱动一致,name即可,不需要user.name。
四、集合类型封装
1、List类型
list与属性驱动的方式一致,首先创建一个list属性及其get/set方法,其次在前端页面命名为list,即可获得相应的值。
区别:前端页面可以设置将对应的值存在list的第几个元素,如<input type="text" name="list[3]" />,可将该文本框内的内容填入list[3]中,之前元素均为null。
2、Map类型
后端部分一致,也是属性驱动。
前端:需要设置key。如
<input type="text" name="map["haha"]" />