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 ...
随机推荐
- asp.net FileUpload上传文件夹并检测所有子文件
1.在FileUpload控件添加一个属性 webkitdirectory=""就可以上传文件夹了 <asp:FileUpload ID="FileUpload1& ...
- WPF MVVM 如何在ViewModel中操作View中的控件事件
(在学习Wpf的时候,做一个小例子,想在TextBox改变后,检验合法性,并弹出提示.在找了很多贴后,发现这个小例子,抄袭过来,仅供参考. 最后也找到了适合自己例子的办法:在出发TextChanged ...
- OC与JS交互之WebViewJavascriptBridge
上一篇文章介绍了通过UIWebView实现了OC与JS交互的可能性及实现的原理,并且简单的实现了一个小的示例DEMO,当然也有一部分遗留问题,使用原生实现过程比较繁琐,代码难以维护.这篇文章主要介绍下 ...
- netty笔记(一)--Demo
Netty是一个Java开源框架,用于传输数据.由server和client组成,封装了Java nio,支持TCP, UDP等协议.这里写了一Demo EchoClientHandler.java ...
- linux服务器上创建svn版本库
1. 创建存放各个svn版本库的目录svnrepos(自己定义路径) -bash: cd /usr/local/apache/htdocs/ -bash: mkdir svnrepos 2. 假设我要 ...
- 如何angular过滤器进行排序???
首先定义一个json文件: 然后写HTML文件: <div id="box"> <!--第一个下拉框--> <select ng-model=&quo ...
- C#工具类之数据库连接
一.SQL Server /// <summary> /// 数据库的通用访问代码 /// 此类为抽象类, /// 不允许实例化,在应用时直接调用即可 /// </summary&g ...
- Popularize what is heart of mobile phone?
From: http://tech.sina.com.cn/mobile/n/2014-09-29/08399657494.shtml 只谈核数没意义 带你重新认识手机SoC 2014年09月29日 ...
- Informatica 9.1.0 Domain地址变化修改
由于公司机房的变动,infa所连数据库的IP地址变化,致使INFA不能启动.经过查找资料终于解决,现分享给大家,解决方法如下: 1.查看日志路径: Informatica/9.1.0/tomcat/l ...
- tensorflow读取jpg格式图片报错 ValueError: Only know how to handle extensions: ['png']; with Pillow installed matplotlib can handle more images
当运行mpimg.imread("img.jpg")时,spyder 出现如下错误: ValueError: Only know how to handle extensions: ...