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

来源:互联网 发布:行楷字帖 知乎 编辑:程序博客网 时间:2024/04/28 19:11

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

public String execute() {// 如果仅仅往这三个范围放入属性,建议使用这种方法ActionContext actionContext = ActionContext.getContext();// 往ServletContext里放applicationactionContext.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里放applicationactionContext.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
原创粉丝点击