Struts2(三)访问和添加request、session、application属性

Struts2中访问和添加request、session、application属性

	public String execute() {// 如果仅仅往这三个范围放入属性,建议使用这种方法
		ActionContext actionContext = ActionContext.getContext();
		// 往ServletContext里放application
		actionContext.getApplication().put("application", "application应用范围");
		actionContext.getSession().put("session", "session应用范围");
		actionContext.put("request", "request应用范围");
		actionContext.put("hobbies", Arrays.asList("羽毛球", "篮球", "足球", "兵乓球"));
		return "success";
	}
打印输出

    ${applicationScope.application }<br>
    ${sessionScope.session }<br>
    ${requestScope.request }<br>

如果相应的属性参数是对象呢?

获取HttpServletRequest/HttpSession/ServletContext/HttpServletResponse对象有两种方法:

方法一、通过ServletActionContext类直接获取:

public String rsa() throws Exception{
   HttpServletRequest request=ServletActionContext.getRequest();
   ServletContext servletContext=ServletActionContext.getServletContext();
   request.getSession();
   HttpServletResponse response=ServletActionContext.getResponse();
   return "scope";
}
方法二、实现指定接口,由struts框架运行时注入:

public class HelloWorldAction implements ServletRequestAware,ServletResponseAware,ServletContextAware{
   private HttpServletRequest request;
   private ServletContext servletContext;
   private HttpServletResponse response;
   public void setServletRequest(HttpServletRequest req){
      this.request=req;//在运行期由框架注入,不是由自己设置
   }
   public void setServletResponse(HttpServletResponse res){
      this.response=res;
   }
   public void setServletContext(ServletContext ser){
      this.servletContext=ser;
   }
}
一般建议第一种方法,比较简单
struts2默认执行execute方法,若要动态执行其他方法可以在action名后加"感叹号+对应的方法名"

完整代码

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
         "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
         "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
	<package name="csdn" namespace="/ask" extends="struts-default">
		<action name="msg" class="struts2.example.action.HelloWorldAction" method="execute">
			<!-- 定义处理结果与视图资源之间的关系 -->
			<result name="success">/WEB-INF/page/showInfo.jsp</result>
		</action>
	</package>
</struts>
package struts2.example.action;

import java.util.Arrays;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionContext;

public class HelloWorldAction {

	public String execute() {// 如果仅仅往这三个范围放入属性,建议使用这种方法
		ActionContext actionContext = ActionContext.getContext();
		// 往ServletContext里放application
		actionContext.getApplication().put("application", "application应用范围");
		actionContext.getSession().put("session", "session应用范围");
		actionContext.put("request", "request应用范围");
		actionContext.put("hobbies", Arrays.asList("羽毛球", "篮球", "足球", "兵乓球"));
		return "success";
	}

	public String rsa() throws Exception {
		HttpServletRequest request = ServletActionContext.getRequest();// 得到原始的request对象
		// request.getRealPath(path); 得到站点目录上某个文件的绝对路径
		ServletContext servletContext = ServletActionContext
				.getServletContext();
		request.setAttribute("request", "*********request应用范围******");
		request.getSession().setAttribute("session",
				"*********session应用范围********");
		// HttpServletResponse response = ServletActionContext.getResponse();
		servletContext.setAttribute("application",
				"********application应用范围********");
		return "success";
	}
}
<pre name="code" class="html"><%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
  <head>
    <title>My JSP 'showInfo.jsp' starting page</title>
  </head>
  
  <body> 
    ${applicationScope.application }<br>
    ${sessionScope.session }<br>
    ${requestScope.request }<br>
    =============================<br>
    <c:forEach items="${hobbies }" var="hobby">
      ${hobby}<br>
    </c:forEach>
  </body>
</html>

 
 

My Eclipse在Java EE5以后把jstl集成进来,不用在导入jstl相应的jar包

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值