• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Java > Struts2之Action接收请求参数和拦截器详解

Struts2之Action接收请求参数和拦截器详解

作者:晓梦蝶 字体:[增加 减小] 来源:互联网 时间:2017-05-28

晓梦蝶 通过本文主要向大家介绍了struts2拦截action,struts2 action,struts2 action配置,struts2 action跳转,struts2 action传值等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

技术分析之在Struts2框架中使用Servlet的API

1. 在Action类中也可以获取到Servlet一些常用的API

需求:提供JSP的表单页面的数据,在Action中使用Servlet的API接收到,然后保存到三个域对象中,最后再显示到JSP的页面上。

提供JSP注册的页面,演示下面这三种方式     

 <h3>注册页面</h3>
        <form action="${ pageContext.request.contextPath }/xxx.action" method="post">
          姓名:<input type="text" name="username" /><br/>
          密码:<input type="password" name="password" /><br/>
          <input type="submit" value="注册" />
        </form>
</div>

2. 完全解耦合的方式

如果使用该种方式,Struts2框架中提供了一个类,ActionContext类,该类中提供一些方法,通过方法获取Servlet的API

一些常用的方法如下

  1. static ActionContext getContext()                                                      -- 获取ActionContext对象实例
  2. java.util.Map<java.lang.String,java.lang.Object> getParameters()          -- 获取请求参数,相当于request.getParameterMap();
  3. java.util.Map<java.lang.String,java.lang.Object> getSession()               -- 获取的代表session域的Map集合,就相当于操作session域。
  4. java.util.Map<java.lang.String,java.lang.Object> getApplication()           -- 获取代表application域的Map集合
  5. void put(java.lang.String key, java.lang.Object value)                           -- 注意:向request域中存入值。

3. 使用原生Servlet的API的方式(常用到)

Struts2框架提供了一个类,ServletActionContext,该类中提供了一些静态的方法

具体的方法如下

  1. getPageContext()
  2. getRequest()
  3. getResponse()
  4.  getServletContext()

技术分析之结果页面的跳转

1. 结果页面存在两种方式

全局结果页面

> 条件:如果<package>包中的一些action都返回success,并且返回的页面都是同一个JSP页面,这样就可以配置全局的结果页面。

> 全局结果页面针对的当前的包中的所有的Action,但是如果局部还有结果页面,会优先局部的。使用的标签是           

 <global-results>
  <result>/demo3/suc.jsp</result>
 </global-results>
</div>

局部结果页面   

<result>/demo3/suc.jsp</result>  
</div>

2. 结果页面的类型

结果页面使用<result>标签进行配置,包含两个属性

> name    -- 逻辑视图的名称

> type    -- 跳转的类型,值一些,需要掌握一些常用的类型。常见的结果类型去struts-default.xml中查找。

  1. dispatcher        -- 转发.type的默认值.Action--->JSP
  2. redirect            -- 重定向.    Action--->JSP
  3. chain                -- 多个action之间跳转.从一个Action转发到另一个Action.    Action---Action
  4. redirectAction    -- 多个action之间跳转.从一个Action重定向到另一个Action.    Action---Action
  5. stream            -- 文件下载时候使用的

技术分析之Struts2框架的数据封装

1. 为什么要使用数据的封装呢?

  1. 作为MVC框架,必须要负责解析HTTP请求参数,并将其封装到Model对象中
  2. 封装数据为开发提供了很多方便
  3. Struts2框架提供了很强大的数据封装的功能,不再需要使用Servlet的API完成手动封装了!!    

2. Struts2中提供了两类数据封装的方式?

第一种方式:属性驱动

> 提供对应属性的set方法进行数据的封装。

表单的哪些属性需要封装数据,那么在对应的Action类中提供该属性的set方法即可。

表单中的数据提交,最终找到Action类中的setXxx的方法,最后赋值给全局变量。

注意0:Struts2的框架采用的拦截器完成数据的封装。

注意1:这种方式不是特别好:因为属性特别多,提供特别多的set方法,而且还需要手动将数据存入到对象中.

注意2:这种情况下,Action类就相当于一个JavaBean,就没有体现出MVC的思想,Action类又封装数据,又接收请求处理,耦合性较高。

> 在页面上,使用OGNL表达式进行数据封装。

在页面中使用OGNL表达式进行数据的封装,就可以直接把属性封装到某一个JavaBean的对象中。

在页面中定义一个JavaBean,并且提供set方法:例如:private User user;

页面中的编写发生了变化,需要使用OGNL的方式,表单中的写法:<input type="text" name="user.username">

注意:只提供一个set方法还不够,必须还需要提供user属性的get和set方法!!!

> 先调用get方法,判断一下是否有user对象的实例对象,如果没有,调用set方法把拦截器创建的对象注入进来,

/**
属性驱动方式,把数据封装到JavaBean的对象中
@author Administrator
 */
public class Regist2Action extends ActionSupport{
  
  private static final long serialVersionUID = 6556880331550390473L;
  
  // 注意二:属性驱动的方式,现在,要提供是get和set方法
  private User user;
  public User getUser() {
    System.out.println("getUser...");
    return user;
  }
  public void setUser(User user) {
    System.out.println("setUser...");
    this.user = user;
  }
  
  public String execute() throws Exception {
    System.out.println(user);
    return NONE;
  }

}

</div>

第二种方式:模型驱动

> 使用模型驱动的方式,也可以把表单中的数据直接封装到一个JavaBean的对象中,并且表单的写法和之前的写法没有区别!

> 编写的页面不需要任何变化,正常编写name属性的值

> 模型驱动的编写步骤:

手动实例化JavaBean,即:private User user = new User();

必须实现ModelDriven<T>接口,实现getModel()的方法,在getModel()方法中返回user即可!!

/**
模型驱动的方式
  实现ModelDriven接口
 必须要手动实例化对象(需要自己new好)
@author Administrator
 */
public class Regist3Action extends ActionSupport implements ModelDriven<User>{
  
  private static final long serialVersionUID = 6556880331550390473L;
  
  // 必须要手动实例化
  private User user = new User();
  // 获取模型对象
  public User getModel() {
    return user;
  }
  
  public String execute() throws Exception {
    System.out.println(user);
    return NONE;
  }

}
</div>

技术分析之Struts2把数据封装到集合中

1. 封装复杂类型的参数(集合类型 Collection 、Map接口等)

2. 需求:页面中有可能想批量添加一些数据,那么现在就可以使用上述的技术了。把数据封装到集合中

3. 把数据封装到Collection中

因为Collection接口都会有下标值,

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Struts2之Action接收请求参数和拦截器详解
  • Struts2之Action接收请求参数和拦截器详解

相关文章

  • 2017-05-28Spring Boot启动过程全面解析(三)
  • 2017-05-28老生常谈JVM的内存溢出说明及参数调整
  • 2017-05-28spring boot 使用@Async实现异步调用方法
  • 2017-05-28RandomAccessFile简介_动力节点Java学院整理
  • 2017-05-28Java正则匹配中文的方法实例分析
  • 2017-05-28JAVA实现JSON后端向前端传递数据
  • 2017-05-28Java从网络读取图片并保存至本地实例
  • 2017-05-28Spring Boot 启动加载数据 CommandLineRunner的使用
  • 2017-05-28java实现把对象数组通过excel方式导出的功能
  • 2017-05-28Java中HashSet和HashMap的区别_动力节点Java学院整理

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Java JVM虚拟机运行机制
    • 详解Spring Boot加载properties和yml配置文件
    • Spring Boot 整合 Mybatis Annotation 注解的完整 Web 案例
    • SWT(JFace)体验之ApplicationWindow
    • 详解 问题:HttpServlet cannot be resolved to a type
    • 详解redis与spring的整合(使用缓存)
    • Java方法重写_动力节点Java学院整理
    • Java验证码图片生成代码
    • Struts2实现文件上传时显示进度条功能
    • java 算法之归并排序详解及实现代码

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有