1. 程式人生 > >struts2在action中獲取request、session、application,並傳遞數據

struts2在action中獲取request、session、application,並傳遞數據

ride b2c 傳遞 sets content context 分享 https fcm

假設僅僅是通過request、session、application傳遞數據,則不須要獲取對應的對象也能夠傳遞數據,代碼例如以下:

ScopeAction.java:

package com.itheima.action;

import com.opensymphony.xwork2.ActionContext;

public class ScopeAction {

	public String execute() {
		/*
		 * 我們這裏不通過字段(加入setXXX、getXXX方法)傳遞數據,我們想著通過域(request、session、application)
		 * 傳遞數據。怎麽樣才幹做到呢?struts2採用低侵入式,action與servlet沒有不論什麽關聯,怎麽才幹獲取域並傳遞數據呢,
		 * 這時就用到了ActionContext類
		 */
		ActionContext context = ActionContext.getContext();
		context.getApplication().put("application", "application域");//通過ServletContext域傳遞數據
		context.getSession().put("session", "session域");//通過Session域傳遞數據
		context.put("request", "request域");//通過Request域傳遞數據
		return "success";
	}
}
struts2.xml:

<action name="scopeAction_*" class="com.itheima.action.ScopeAction" method="{1}">
     <result name="success">/msg.jsp</result>
</action>
msg.jsp:

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
	${applicationScope.application }<br/>
	${sessionScope.session }<br/>
	${requestScope.request }<br/>
</body>
</html>
地址欄:

技術分享

=============================================================================================

上述方式沒有獲取到域對象。這裏我們也能夠通過其它方法獲取域對象:

在上述的ScopeAction中加入例如以下方法:

public String doexe() {
		HttpServletRequest request = ServletActionContext.getRequest();
		request.setAttribute("request", "請求域");
		ServletContext context = ServletActionContext.getServletContext();
		context.setAttribute("application", "應用域");
		HttpSession session = request.getSession();
		session.setAttribute("session", "會話域");
//		HttpServletResponse response = ServletActionContext.getResponse();
		return "success";
	}

其它和上述不變。然後地址欄中輸入:

技術分享

===============================================================================================

另外另一種方式就是通過框架註入:

Scope2Action.java:

package com.itheima.action;

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

import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import org.apache.struts2.util.ServletContextAware;

public class Scope2Action implements ServletRequestAware, ServletResponseAware, ServletContextAware{

	private HttpServletRequest request;
	private HttpServletResponse response;
	private ServletContext servletContext;
	@Override
	public void setServletContext(ServletContext arg0) {
		this.servletContext = arg0;
	}

	@Override
	public void setServletResponse(HttpServletResponse arg0) {
		this.response = arg0;
	}

	@Override
	public void setServletRequest(HttpServletRequest arg0) {
		this.request = arg0;
	}

	public String execute() {
		request.setAttribute("request", "請 求 域");
		request.getSession().setAttribute("session", "會 話 域");
		servletContext.setAttribute("application", "應 用 域");
		return "success";
	}
	
}
struts2.xml:

<action name="scope2Action" class="com.itheima.action.Scope2Action">
	<result name="success">/msg.jsp</result>
</action>



struts2在action中獲取request、session、application,並傳遞數據