struts2中如何得到request、response或session

“如果我要取得Servlet API中的一些对象,如request、response或session等,应该怎么做?这里的execute不像Struts 1.x的那样在参数中引入。”开发Web应用程序当然免不了跟这些对象打交道。在Strutx 2.0你可以有两种方式获得这些对象:非IoC(控制反转Inversion of Control)方式和IoC方式。

非IoC方式

要获得上述对象,关键Struts 2.0中com.opensymphony.xwork2.ActionContext类。我们可以通过它的静态方法getContext()获取当前Action的上下文对象。 另外,org.apache.struts2.ServletActionContext作为辅助类(Helper Class),可以帮助您快捷地获得这几个对象。

  • HttpServletRequest request = ServletActionContext.getRequest();
  • HttpServletResponse response = ServletActionContext.getResponse();
  • HttpSession session = request.getSession();

 

如果你只是想访问session的属性(Attribute),你也可以通过ActionContext.getContext().getSession()获取或添加session范围(Scoped)的对象。

 

IoC方式要使用IoC方式,我们首先要告诉IoC容器(Container)想取得某个对象的意愿,通过实现相应的接口做到这点。具体实现,请参考例6 IocServlet.java。

package tutorial;

 

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

 

import org.apache.struts2.ServletActionContext;

 

import com.opensymphony.xwork2.ActionContext;

import com.opensymphony.xwork2.ActionSupport;

 

publicclass NonIoCServlet extends ActionSupport{

   private String message;

   

  public String getMessage() {

  return message;        

   }

  

   @Override

  public String execute() {    

 ActionContext.getContext().getSession().put("msg", "Hello World from Session!");

       

    HttpServletRequest request = ServletActionContext.getRequest();

  HttpServletResponse response = ServletActionContext.getResponse();        

 HttpSession session = request.getSession();

      

StringBuffer sb =new StringBuffer("Message from request: ");

 sb.append(request.getParameter("msg"));

sb.append("Response Buffer Size: ");

sb.append(response.getBufferSize());

 sb.append("Session ID: ");

 sb.append(session.getId());

    message = sb.toString();

   return SUCCESS;

 }

}

例6 classes/tutorial/NonIoCServlet.java

package tutorial;

 

import java.util.Map;

 

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

 

import org.apache.struts2.interceptor.ServletRequestAware;

import org.apache.struts2.interceptor.ServletResponseAware;

import org.apache.struts2.interceptor.SessionAware;

 

import com.opensymphony.xwork2.ActionContext;

import com.opensymphony.xwork2.ActionSupport;

publicclass IoCServlet extends ActionSupport implements SessionAware, ServletRequestAware, ServletResponseAware {

 private String message;

 private Map att;

private HttpServletRequest request;

private HttpServletResponse response;      

 public String getMessage() {

 return message;        

 }

   

 publicvoid setSession(Map att){

   this.att = att;

  } 

  publicvoid setServletRequest(HttpServletRequest request) {

 this.request = request;

  }

 

 publicvoid setServletResponse(HttpServletResponse response){

  this.response = response;

 }  

   @Override

 public String execute() {        

   att.put("msg", "Hello World from Session!");     

 HttpSession session = request.getSession();

      

   StringBuffer sb =new StringBuffer("Message from request: ");

   sb.append(request.getParameter("msg"));

   sb.append("Response Buffer Size: ");

    sb.append(response.getBufferSize());

  sb.append("Session ID: ");

    sb.append(session.getId());

     message = sb.toString();

 return SUCCESS;

 }

}

例6 classes/tutorial/IoCServlet.java      
Message from session:  

 

 

 

例6 Servlet.jsp

 

    /Servlet.jsp

 

 

    /Servlet.jsp

 

例6 classes/struts.xml中NonIocServlet和IoCServlet Action的配置

运行Tomcat,在浏览器地址栏中键入http://localhost:8080/Struts2_Action/NonIoCServlet.action?msg=Hello%20World!http://localhost:8080/Struts2_Action/IoCServlet.action?msg=Hello%20World!,出现如图7所示页面。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值