Struts2知识点小结(二)
一、结果视图的配置
<result name="success">/success.jsp</result>
1、局部结果视图
在action标签内部配置 局部结果视图只能当前Action使用
<action name="quick_*" class="com.itheima.action.QuickAction" method="{1}">
<!-- 结果视图的属性:
name: 逻辑试图名 与Action的方法分返回值进行匹配
type: 视图的跳转类型
dispatcher(默认值):Action转发视图(jsp)
redirect:Action重定向视图(jsp)
redirectAction:Action重定向Action
-->
<result name="success" type="dispatcher">/success.jsp</result>
<result name="error">/error.jsp</result>
</action>
2、全局结果视图
<!-- 全局结果视图:
当前包下的所有的action都可以共享的视图资源 称之为全局结果视图
-->
<global-results>
<result name="success" type="dispatcher">/success.jsp</result>
<result name="login">/login.jsp</result>
<result name="error">/error.jsp</result>
<result name="index">/index.jsp</result>
</global-results>
二、在struts2中获得Servlet相关API的方式
获得在javaweb阶段常用的对象 request、response、session、servletContext...
1、通过ServletActionContext获取
ServletActionContext:与Servlet相关的Action的上下文对象,该对象相当于一个工具类,维护Servlet相关对象的引用
//获得Servlet相关API对象
HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();
HttpSession session = request.getSession();
ServletContext servletContext = ServletActionContext.getServletContext();
2、使用接口注入方式
public class ServletAPIAction2 extends ActionSupport
implements ServletRequestAware,ServletResponseAware,ServletContextAware{
public String show(){
//获得request
System.out.println(request);
return NONE;
}
private HttpServletRequest request;
@Override
public void setServletRequest(HttpServletRequest request) {
this.request = request;
}
}
三、参数封装
1、属性驱动
通过Action属性进行参数封装的方式 称其为属性驱动
1 public class Param1Action extends ActionSupport { 2 //封装单个属性只需要一共set方法即可 3 private String username; 4 public void setUsername(String username) { 5 this.username = username; 6 } 7 8 //封装实体 需要同时提供get/set方法 9 private Person person; 10 public Person getPerson() { 11 return person; 12 } 13 public void setPerson(Person person) { 14 this.person = person; 15 } 16 17 private User user; 18 public User getUser() { 19 return user; 20 } 21 public void setUser(User user) { 22 this.user = user; 23 } 24 25 26 private List<String> strList; 27 private List<User> userList; 28 private Map<String,User> userMap; 29 30 public Map<String, User> getUserMap() { 31 return userMap; 32 } 33 public void setUserMap(Map<String, User> userMap) { 34 this.userMap = userMap; 35 } 36 public List<User> getUserList() { 37 return userList; 38 } 39 public void setUserList(List<User> userList) { 40 this.userList = userList; 41 } 42 public List<String> getStrList() { 43 return strList; 44 } 45 public void setStrList(List<String> strList) { 46 this.strList = strList; 47 } 48 public String show(){ 49 //方式一 50 //String username = (String)ServletActionContext.getRequest().getParameter("username"); 51 //方式二 单个属性的封装,不用手动创建对象 52 //System.out.println(username); 53 //实体封装 54 /*System.out.println(user); 55 System.out.println(person);*/ 56 57 System.out.println(strList); 58 System.out.println(userList); 59 60 System.out.println(userMap); 61 return NONE; 62 } 63 }
2、模型驱动
在Action中显示的指定模型对象是谁,那么在封装数据时直接写模型对象的属性名就可以
步骤:
1、Action实现ModelDriven<指定实体类型>
2、实现接口的getModel方法(model对象需要手动实例化)
public class Param2Action extends ActionSupport implements ModelDriven<User> { //模型驱动 //封装实体 public String show() { System.out.println(user); return NONE; } User user = new User(); public User getModel() { // TODO Auto-generated method stub return user; } }
比较模型驱动与属性驱动区别?
属性驱动:提供set/get方法,实体对象不需要手动创建,同时封装多个实体
模型驱动:实现ModelDriven接口,模型对象必须要手动创建,不能同时封装多个实体
上一篇: 快速探索,音视频技术不再神秘
下一篇: noi.ac309 Mas的童年