Struts2引用Servlet API中的对象,request、response或session

在Struts1.x中通过 public ActionForward execute(ActionMapping mapping, ActionForm form,
     HttpServletRequest request, HttpServletResponse response) { } ,得到request、response或session的值,而有时得到这些值是非常必要的!!而在Struts2 中“
如 果我要取得Servlet API中的一些对象,如request、response或session等,应该怎么做?这里的execute不像Struts 1.x的那样在参数中引入。”开发Web应用程序当然免不了跟这些对象打交道。在Strutx 2.0你可以有两种方式获得这些对象:非IoC(控制反转Inversion of Control)方式和IoC方式。

  1. 非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)的对象。

  2. 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;

public class 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(
"<br>Response Buffer Size: ");
       sb.append(response.getBufferSize());
       sb.append(
"<br>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;

public class 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(
"<br>Response Buffer Size: ");
       sb.append(response.getBufferSize());
       sb.append(
"<br>Session ID: ");
       sb.append(session.getId());
       
       message
= sb.toString();
       
return SUCCESS;
   }

}
例6 classes/tutorial/IoCServlet.java

<% @ page contentType = " text/html; charset=UTF-8 " %>
<% @ taglib prefix = " s " uri = " /struts-tags " %>
< html >
< head >
   
< title > Hello World! </ title >
</ head >
< body >
   
< h2 >
       
< s:property value ="message" escape ="false" />
       
< br > Message from session: < s:property value ="#session.msg" />
   
</ h2 >
</ body >
</ html >
例6 Servlet.jsp

< action name ="NonIoCServlet" class ="tutorial.NonIoCServlet" >
   
< result > /Servlet.jsp </ result >
</ action >
< action name ="IoCServlet" class ="tutorial.IoCServlet" >
   
< result > /Servlet.jsp </ result >
</ action >
例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所示页面。


图7 Servlet.jsp的输出页面  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值