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属性进行参数封装的方式 称其为属性驱动
public class Param1Action extends ActionSupport {
//封装单个属性只需要一共set方法即可
private String username;
public void setUsername(String username) {
this.username = username;
}
//封装实体 需要同时提供get/set方法
private Person person;
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
private List<String> strList;
private List<User> userList;
private Map<String,User> userMap;
public Map<String, User> getUserMap() {
return userMap;
}
public void setUserMap(Map<String, User> userMap) {
this.userMap = userMap;
}
public List<User> getUserList() {
return userList;
}
public void setUserList(List<User> userList) {
this.userList = userList;
}
public List<String> getStrList() {
return strList;
}
public void setStrList(List<String> strList) {
this.strList = strList;
}
public String show(){
//方式一
//String username = (String)ServletActionContext.getRequest().getParameter("username");
//方式二 单个属性的封装,不用手动创建对象
//System.out.println(username);
//实体封装
/*System.out.println(user);
System.out.println(person);*/
System.out.println(strList);
System.out.println(userList);
System.out.println(userMap);
return NONE;
}
}
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接口,模型对象必须要手动创建,不能同时封装多个实体
Struts2知识点小结(二)的更多相关文章
- Struts2知识点小结(一)
一.struts2简介 1.Struts2是一个基于MVC设计模式的Web应用框架 只要是web层框架 一般就会遵守MVC设计模式 2.struts2与struts1的关系? ...
- Struts2知识点小结汇总
Struts2部分 1. JavaEE软件三层结构和MVC的区别? JavaEE软件三层机构是由sun公司提供JavaEE开发规范的:Web层(表现层).业务逻辑层.数据持久层.[其中WEB层会使用前 ...
- Struts2知识点小结(四)--拦截器与注解开发
一.Struts2的拦截器(interceptor) 作用:当请求进入struts2框架后(进入之前可以用filter进行拦截),想对请求进行拦截操作(功能增强.权限控制),需要拦截器组件 1.str ...
- Struts2知识点小结(三)--值栈与ognl表达式
1.问题一 : 什么是值栈 ValueStack 回顾web阶段 数据交互问题? 客户端提交数据 到 服务器端 request接受数据+BeanUtils实体封装 ...
- Spring知识点小结(二)
一.配置非自定义的Bean(数据源DataSource模型) DBCP数据源: 导入dbcp的jar包:dbcp+pool+connector 代码实现: ...
- Hibernate知识点小结(二)
一.持久化对象和标识符 1.持久化类 配置完关系后,操作的实体对应的类,成为持久化类 (Customer) 2.持久化类标识符(oid:object id) 3.持久 ...
- C++重要知识点小结---3
C++重要知识点小结---1:http://www.cnblogs.com/heyonggang/p/3246631.html C++重要知识点小结---2:http://www.cnblogs.co ...
- SpringBoot 系列教程之事务隔离级别知识点小结
SpringBoot 系列教程之事务隔离级别知识点小结 上一篇博文介绍了声明式事务@Transactional的简单使用姿势,最文章的最后给出了这个注解的多个属性,本文将着重放在事务隔离级别的知识点上 ...
- disruptor笔记之四:事件消费知识点小结
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
随机推荐
- 使用waitfor 语句
aitfor语句用于延迟后面语句的执行,可以指定延迟时间长度是具体的时间.参考下面的语句: waitfor delay ’00:01:15’ print N’到时间了’ --也可以不加N 字符串 ...
- 弱类型dynamic与var
dynamic与var都可代替任何类型 var关键字是C# 3.0开始新增的特性,称为推断类型. 1.必须在定义时初始化 2.一但初始化完成就不能再给变量赋与初始化值类型不同的值 3.var要求是局部 ...
- IO流之序列化流与反序列化流
序列化流与反序列化流 用于从流中读取对象的 操作流 ObjectInputStream 称为 反序列化流 用于向流中写入对象的操作流 ObjectOutputStream 称为 序列化流 l ...
- javascript的对象创建模式---命名空间模式
javascript中对象的概念是很普遍的,对象是是对象,数组是对象,函数也是对象,字符串其实也是对象.常见的对象创建方法有对象字面量.构造函数创建.我们先来看看对象的创建还有哪些更高级的模式. 一. ...
- 14_synchronized深入
[脏读] 对于对象同步和异步的方法,我们在设计程序的时候,一定要考虑问题的整体,不然会出现不一致的错误,最经典的错误的就是脏读(dirty read). [实例代码] package com.higg ...
- Android照片库选择图片裁剪闪退(兼容小米以及7.0以上机型)
未经允许,禁止
- 《ArcGIS Runtime SDK for Android开发笔记》——离在线一体化技术:离线矢量数据同步
1.前言 上一篇文章中我们实现了离线要素的编辑操作,这一篇中主要介绍离在线一体化技术中最后一个环节离线数据的同步功能,通过对数据的上传,服务器端的版本化管理,实现数据生产管理的整个流程. 转载请注明出 ...
- sql server中将自增长列归零
一个项目完成后数据库中会有很多无用的测试数据,可以使用delete * 将数据全部删除,但自增长列(一般是主键)基数不会归零,使用TRUNCATE函数可以将表中数据全部删除,并且将自增长列基数归零.一 ...
- wxGridCellEditor
wxGridCellEditor Class Referenceabstract Class List by Category » Grid Related Classes #include < ...
- 三大框架之list
前言: 在我们平常开发中难免会用到List集合来存储数据,一般都会选择ArrayList和LinkedList,以前只是大致知道ArrayList查询效率高LinkedList插入删除效率高,今天来实 ...