Struts中的数据处理的三种方式:

public class DataAction extends ActionSupport{
    @Override
    public String execute() throws Exception {
        // 1. 请求数据封装; 2. 调用Service处理业务逻辑,拿到结果数据 3. 数据保存到域中
        /*
         *
        // Struts中对数据操作,方式1: 直接拿到ServletApi, 执行操作
        HttpServletRequest request = ServletActionContext.getRequest();
        HttpSession session = request.getSession();
        ServletContext application = ServletActionContext.getServletContext();
        // 操作
        request.setAttribute("request_data", "request_data1");
        session.setAttribute("session_data", "session_data1");
        application.setAttribute("application_data", "application_data1");
        */

        // 【推荐:解耦的方式实现对数据的操作】
        // Struts中对数据操作,方式2: 通过ActionContext类
        ActionContext ac = ActionContext.getContext();
        // 得到Struts对HttpServletRequest对象进行了封装,封装为一个map
        // 拿到表示request对象的map
         Map<String,Object> request =  ac.getContextMap();
         // 拿到表示session对象的map
         Map<String, Object> session = ac.getSession();
         // 拿到表示servletContext对象的map
         Map<String, Object> application = ac.getApplication();

         // 数据
         request.put("request_data", "request_data1_actionContext");
        session.put("session_data", "session_data1_actionContext");
        application.put("application_data", "application_data1_actionContext");

        return SUCCESS;
    }
}

尽量的用方式二,如果有些功能,第二种方式实现不了,需要采用原始的方式来做,也可以使用第一种,比如获取路径,方式二就实现不了。

struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
    <package name="data" namespace="/" extends="struts-default">
        <!-- 全局配置 -->
        <global-results>
            <result name="success">/data.jsp</result>
        </global-results>
        <action name="data" class="c_data.DataAction">
        </action>
    </package>
</struts>

data.jsp:

  <body>
      ${request_data } <br/>
      ${session_data } <br/>
      ${application_data } <br/>
  </body>

数据处理的实现方式三:实现接口的方式

public class DataAction extends ActionSupport implements RequestAware, SessionAware, ApplicationAware{

    private Map<String, Object> request;
    private Map<String, Object> session;
    private Map<String, Object> application;

    // struts运行时候,会把代表request的map对象传进来
    @Override
    public void setRequest(Map<String, Object> request) {
        this.request = request;
    }

    // 同理  传入session
    @Override
    public void setSession(Map<String, Object> session) {
        this.session = session;
    }

    // 同理   传入application
    @Override
    public void setApplication(Map<String, Object> application) {
        this.application = application;
    }
@Override public String execute() throws Exception { // 数据 request.put("request_data", "request_data1_actionAware"); session.put("session_data", "session_data1_actionAware"); application.put("application_data", "application_data1_actionAware"); return SUCCESS; } }

对数据操作的所有方法(把数据保存到域中)

方式一:直接获取servletapi

       核心类:ServletActionContext提供的静态方法

方式二:通过ActionContext获取不同(代表request/session/application)的map

方式三:实现接口的方法:(RequestAware/SessionAware/ApplicationAware)

方式一是与servlet耦合的方式,会导入servlet相关的jar包

方式二,三是与servlet解耦的方式,不会导入与servlet相关的jar包

不推荐使用第一种方式。

一般用第二种方式,

如果在程序中反复多次的用request,session,application对象,推荐使用第三种

比如开发一个BaseAction的时候(其他action继承此类),可以用第三种方式。

Struts中的数据处理的三种方式的更多相关文章

  1. Struts2中的数据处理的三种方式对比(Action中三种作用域request,session,application对象)

    1:在Action中如何获得作用域(request,session,application)对象: 取得Map(键值对映射集)类型的requet,session,application; 对数据操作的 ...

  2. android中解析文件的三种方式

    android中解析文件的三种方式     好久没有动手写点东西了,最近在研究android的相关技术,现在就android中解析文件的三种方式做以下总结.其主要有:SAX(Simple API fo ...

  3. JS中事件绑定的三种方式

    以下是搜集的在JS中事件绑定的三种方式.   1. HTML onclick attribute     <button type="button" id="upl ...

  4. JavaScript 中事件绑定的三种方式

    以下是在 JS 中事件绑定的三种方式.   1. HTML onclick attribute     <button type="button" id="uplo ...

  5. PHP中数据类型转换的三种方式

    PHP中数据类型转换的三种方式 PHP的数据类型转换属于强制转换,允许转换的PHP数据类型有: 1.(int).(integer):转换成整形2.(float).(double).(real):转换成 ...

  6. HTML中使用js的三种方式及优缺点介绍

    1.内部js: 在直接在页面的<script></script>标签内写js代码 优点:相对于使用行内js,内部js代码较为集中,与页面结构的实现代码耦合度较低,比较便于维护 ...

  7. java中遍历集合的三种方式

    第一种遍历集合的方式:将集合变为数组 package com.lw.List; import java.util.ArrayList; import java.util.List; import ja ...

  8. Python中字符串拼接的三种方式

    在Python中,我们经常会遇到字符串的拼接问题,在这里我总结了三种字符串的拼接方式:     1.使用加号(+)号进行拼接 加号(+)号拼接是我第一次学习Python常用的方法,我们只需要把我们要加 ...

  9. Spring中bean实例化的三种方式

    之前我已经有好几篇博客介绍Spring框架了,不过当时我们都是使用注解来完成注入的,具体小伙伴可以参考这几篇博客(Spring&SpringMVC框架案例).那么今天我想来说说如何通过xml配 ...

随机推荐

  1. Linux随笔(安装ftp,安装jdk,安装 tomcat,安装redis,安装MySQL)

    su: authentication failure 解决办法:sudo passwd root  更改密码即可 确认虚拟机用到的联网方式是桥接模式,不然Windows是ping不通Linux的,确保 ...

  2. yum安装memcache,mongo扩展以及python的mysql模块安装

    //启动memcached/usr/local/memcached/bin/memcached -d -c 10240 -m 1024 -p 11211 -u root/usr/local/memca ...

  3. Java I/O 操作的一些基本知识

    1.文件类:File ,也是唯一的单独的文件类.可以对文件进行操作.其方法有:exists(),delete(),isDirectory(),createNewFile(),getName(),get ...

  4. 创建透明CEdit控件

    1.在资源编辑器中将Edit控件的Border设为none(当然也可以在代码中修改窗口样式) 2.在重载CEdit的类中响应MSG_OCM_CTLCOLOREDIT消息,在处理函数中将背景模式设为透明 ...

  5. WimTool(Wim映像处理工具) V1.30.2011.501 免费绿色版

    软件名称: WimTool(Wim映像处理工具) V1.30.2011.501 免费绿色版软件语言: 简体中文授权方式: 免费软件运行环境: Win7 / Vista / Win2003 / WinX ...

  6. BJFU 1397 致我们终将逝去的爱情

      LIS 由于要记录轨迹,所以不能用O(nlogn)优化,直接dp加father记录每个节点的转移. #include<cstdio> #include<algorithm> ...

  7. C# 调用C++ DLL 的类型转换

    //C#调用C++的DLL搜集整理的所有数据类型转换方式,可能会有重复或者多种方案,自己多测试 //c++:HANDLE(void *) ---- c#:System.IntPtr //c++:Byt ...

  8. Windows命令查看文件MD5码

    D:\>certutil -hashfile md5test.txt MD5 MD5 哈希(文件 md5test.txt): d6 f6 bb 38 b5 6b 67 8f 34 9b e4 d ...

  9. 《LYFvs2013转vs2010》

    <LYFvs2013转vs2010>1.修改解决方案文件(**.sln) 将-------------------------------------------------------- ...

  10. VBS实现批量重命名文件并且操作前备份原有文件

    '=========================================================================='' VBScript Source File - ...