Struts2如何传值到jsp页面

一、一般是在Action中定义一个成员变量,然后对这个成员变量提供get/set方法,在JSP页面就可以取到这个变量的值了。

1)在Action中定义成员变量

//定义一个成员变量 
private String message; 
      
//提供get/set方法 
public String getMessage() { 
    return message; 
} 
public void setMessage(String message) { 
    this.message = message; 
}

  2)在JSP页面中取值

${message} 

2、但是定义的成员变量多了,感觉整个Action的代码就很长了。这个时候可以使用一些Servlet API进行值的存取操作:HttpServletRequest、HttpSession和ServletContext。Struts2对这个三个对象用Map进行了封装,我们就可以使用Map对象来存取数据了。

  1)在Action中存值

package cn.com.action;
public class testAction extends ActionSupport {

private String message;       
public String getMessage() { 
    return message; 
} 
public void setMessage(String message) { 
    this.message = message; 
}

	 
	public String getDataSourceStat() {
		ActionContext actionContext = ActionContext.getContext();// ValueStack可以使用requestScope
		Map<String, Object> session = ActionContext.getContext().getSession();// 对应sessionScope
		Map<String, Object> application = ActionContext.getContext().getApplication();// 对应applicationScope
		actionContext.put("b", "123");
		session.put("c", "456");
		application.put("d", "789");		
		return SUCCESS;
	}
	
}

    2)在xml配置文件

<struts>
	<package name="test" extends="struts-default">
 
		<action name="getDataSourceStat" class="cn.com.action.testAction" method="getDataSourceStat">
			<!-- <result name="success">/index.jsp</result> -->
			<result name="success">/test/jsp/datasource.jsp</result>
		</action>
	</package>
</struts>

 

           3)在JSP页面上取值

<body>
	<%
		//从小到大的4个容器
		pageContext.setAttribute("aa", "aaa");//${pageScope.aa }
		request.setAttribute("bb", "bbb");//${requestScope.bb }
		session.setAttribute("cc", "ccc");//${sessionScope.cc }
		application.setAttribute("dd", "ddd");//${applicationScope.dd }
	%>
    <%= request.getAttribute("b")%>
	<br> ${a} <!-- 取值顺序pageScope->requestScope->sessionScope->applicationScope -->
	<br> ${b} <!-- 取值顺序pageScope->requestScope->sessionScope->applicationScope -->
	<br> ${c} <!-- 取值顺序pageScope->requestScope->sessionScope->applicationScope -->
	<br> ${d} <!-- 取值顺序pageScope->requestScope->sessionScope->applicationScope -->
	<br> ${pageScope.aa }
	<br> ${requestScope.b }
	<br> ${sessionScope.c }
	<br> ${applicationScope.d }
	<br>
<!-- ${pageContext.request.contextPath}获取项目根路径 -->
<script type="text/javascript" src="${pageContext.request.contextPath}/plugins/jquery-1.12.4.min.js"></script>
</body>	

 

 

 

web标准的存放数据的范围有:

pageContext域,request域,session域,application域(ServletContext)。

struts2自己又定义了一个容器来存放数据,即:ActionContext。

ActionContext是个Map集合,它持有了web标准的4个域,通过它可以直接获取这四个标准容器。

不仅如此,它还引用了其它struts2自己定义的对象:

jsp的4个作用域 pageScope、requestScope、sessionScope、applicationScope的区别

1、区别:

1.page指当前页面有效。在一个jsp页面里有效

2.request 指在一次请求的全过程中有效,即从http请求到服务器处理结束,返回响应的整个过程,存放在HttpServletRequest对象中。在这个过程中可以使用forward方式跳转多个jsp。在这些页面里你都可以使用这个变量。

3.Session是用户全局变量,在整个会话期间都有效。只要页面不关闭就一直有效(或者直到用户一直未活动导致会话过期,默认session过期时间为30分钟,或调用HttpSession的invalidate()方法)。存放在HttpSession对象中 

4.application是程序全局变量,对每个用户每个页面都有效。存放在ServletContext对象中。它的存活时间是最长的,如果不进行手工删除,它们就一直可以使用 

总结:当数据只需要在下一个forward有用时,用request就够了;
         若数据不只是在下一个forward有用时,就用session。
         上下文,环境信息之类的,用application。

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值