struts2之数据处理的三种方式

一,概述

Javaweb开发少不了往域对象中存数据,使用sruts2框架该如何往域对象中存数据呢?使用sruts2有三种方式往域对象中存数据,各有各的优点。

二,方式一:调用Servlet API

1)新建一个Action
package com.bighuan.c_data;

import java.util.Map;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
/**
 * 数据处理
 * @author bighuan
 *
 */
public class DataAction extends ActionSupport{

	@Override
	public String execute() throws Exception {
		//1,对请求数据进行封装
                //2,调用service,拿到结果数据
		
		//3,向域中存数据
		
		
		//struts中对数据操作,1,直接拿到SerlvetApi,执行操作
		HttpServletRequest request = ServletActionContext.getRequest();
		
		//获取session
		HttpSession session = request.getSession();
		
		//获取application
		ServletContext application = ServletActionContext.getServletContext();
		
		//保存数据
		request.setAttribute("requestData", "requestData111");
		session.setAttribute("sessionData", "sessionData222");
		application.setAttribute("applicationData", "applicationData333");
		
		//拿某个目录的路径
		ServletContext application1 = ServletActionContext.getServletContext();
		String uploadPath = application1.getRealPath("/upload");
		System.out.println(uploadPath);
		

		return SUCCESS;
	}
}
2)通过ServletActionContext拿到request对象、application对象,通过request又可以拿到session对象,然后通过相应的域对象往域中存数据,在struts.xml中配置一下跳转到Data.jsp页面,查看自己保存的数据。
配置struts.xml:
<package name="data" extends="struts-default">
		<global-results>
			<result name="success">/data.jsp</result>
		</global-results>

		<action name="execute" class="com.bighuan.c_data.DataAction"
			method="execute">
		</action>

	</package>
data.jsp中从域对象中取数据:
 ${requestScope.requestData }<br>
   ${sessionScope.sessionData }<br>
   ${applicationScope.applicationData }<br>
3)在struts2中一般不推荐使用Servlet API,但是有些情况必须使用Serlvet API,比如要拿WebRoot下的upload目录的路径,使用servlet API很方便。

三,方式二:使用ActionContext

1)struts2对request、session、application进行了封装,封装成一个Map对象,只要通过ActionContext就可拿到相应的Map,以一种解耦的方式实现对数据的操作。
2)将上面那个Action类的execute()方法中的存数据的逻辑改为下面的代码,其他配置不变。同样可以在jsp页面上取出数据显示出来。
ActionContext ac = ActionContext.getContext();
		
Map<String, Object> request = ac.getContextMap();
Map<String, Object> session = ac.getSession();
Map<String, Object> application = ac.getApplication();
//存数据
request.put("requestData", "requestData111_ActionContext");
session.put("sessionData", "sessionData222_ActionContext");
application.put("applicationData", "applicationData333_ActionContext");

四,方式三,通过实现相应的接口来RequestAware、SessionAware、ApplicationAware来获得域对象。

1)先贴代码,再解释。
package com.bighuan.c_data;

import java.util.Map;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;
import org.apache.struts2.interceptor.ApplicationAware;
import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.SessionAware;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

/**
 * 数据处理 struts对数据的操作方式3,实现接口的方式
 * 
 * @author bighuan
 * 
 */
public class DataAction3 extends ActionSupport implements RequestAware,
		SessionAware, ApplicationAware {

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

	@Override
	public String execute() throws Exception {

		// 存数据
		request.put("requestData", "requestData111_Aware");
		session.put("sessionData", "sessionData222_Aware");
		application.put("applicationData", "applicationData333_Aware");
		return SUCCESS;
	}

	// 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;

	}

}
2)实现一个RequestAware接口,就要实现setRequest方法,然后struts2在运行的时候就会将代表request的Map对象注入。其他的也一样。开发 者只需要自己在类中写一个成员变量来接收对应的Map即可。存数据的操作就和方式二一模一样了。配置一下struts.xml,运行,同样可以在jsp页面中看到数据。
3)这种方式适用于一个Action类中有多个业务方法都要往域中存数据的情况,就不用在每一个方法中通过ActionContext获得相应的Map了。

五,总结

南昌的天气变得越来越热了,博客也写的比较少了,希望自己坚持,每天学一点,总会有丰收的!!!





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值