struts2之数据处理的三种方式

来源:互联网 发布:淘宝千人千面影响 编辑:程序博客网 时间:2024/06/06 07:35

一,概述

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{@Overridepublic String execute() throws Exception {//1,对请求数据进行封装
                //2,调用service,拿到结果数据//3,向域中存数据//struts中对数据操作,1,直接拿到SerlvetApi,执行操作HttpServletRequest request = ServletActionContext.getRequest();//获取sessionHttpSession session = request.getSession();//获取applicationServletContext 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;@Overridepublic String execute() throws Exception {// 存数据request.put("requestData", "requestData111_Aware");session.put("sessionData", "sessionData222_Aware");application.put("applicationData", "applicationData333_Aware");return SUCCESS;}// struts运行的时候会将代表request的map对象注入@Overridepublic void setRequest(Map<String, Object> request) {this.request = request;}// 注入session@Overridepublic void setSession(Map<String, Object> session) {this.session = session;}// 注入application@Overridepublic void setApplication(Map<String, Object> application) {this.application = application;}}
2)实现一个RequestAware接口,就要实现setRequest方法,然后struts2在运行的时候就会将代表request的Map对象注入。其他的也一样。开发 者只需要自己在类中写一个成员变量来接收对应的Map即可。存数据的操作就和方式二一模一样了。配置一下struts.xml,运行,同样可以在jsp页面中看到数据。
3)这种方式适用于一个Action类中有多个业务方法都要往域中存数据的情况,就不用在每一个方法中通过ActionContext获得相应的Map了。

五,总结

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





0 0