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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Struts中的数据处理的三种方式相关的知识,希望对你有一定的参考价值。

 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中的数据处理的三种方式的主要内容,如果未能解决你的问题,请参考以下文章

struts请求参数注入的三种方式

struts2简单入门-Action的三种配置方式

struts2简单入门-参数传递的三种方式

Struts2访问servlet的三种方式

基于初学者struts02 数据封装的三种方式详解

5.struts2中Action类中获取ServletAPI的三种方式