struts2框架中的IoC详解

本文详细介绍了在Struts2的Action中如何通过实现特定接口来获取request,session和application中的Map类型数据,以及如何通过实现其他接口来获取真实的HttpServletRequest,HttpSession和ServletContext对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在struts2的Action中如何取得request ,session,application呢!


(一)取得Map类型的request,session,application


实现RequestAware,SessionAware,Application接口,通过IoC取得Map类型。示例如下:



package
com.bjsxt.action;
 
import java.util.Map;
 
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
 
import org.apache.struts2.interceptor.ApplicationAware;
import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.SessionAware;
 
import com.opensymphony.xwork2.ActionSupport;
 
public class LoginAction1 extends ActionSupport implements RequestAware,
        SessionAware, ApplicationAware {
    // 声明username属性
    private String username;
    // 声明request属性
    private Map<String, Object> request;
    // 声明session属性
    private Map<String, Object> session;
    // 声明 application属性
    private Map<String, Object> application;
 
    // 重写execute方法,这里并没有使用ServletActionContext.getRequest()来获得request对象,这是因为实现了ServletRequestAware
    public String execute() throws Exception {
        request.put("req", "i am request arrt!!");
        session.put("session", "i am session attr");
        application.put("application", "i am application");
        return SUCCESS;
    }
 
    // Username的get方法
    public String getUsername() {
        return username;
    }
 
    // Username的set方法
    public void setUsername(String username) {
        this.username = username;
    }
 
    // 重写 RequestAware中的方法
    @Override
    public void setRequest(Map<String, Object> request) {
        // TODO Auto-generated method stub
        this.request = request;
 
    }
 
    // 重写 SessionAware中的方法
    @Override
    public void setSession(Map<String, Object> session) {
        // TODO Auto-generated method stub
        this.session = session;
 
    }
 
    // 重写 ApplicationAware中的方法
    @Override
    public void setApplication(Map<String, Object> application) {
        // TODO Auto-generated method stub
        this.application = application;
    }
 




(二)取得真实类型的HttpServletRequest,HttpSession,ServletContext


    实现ServletRequestAware,ServletContextAware接口,通过IoC取得真实类型。示例如下:


package com.bjsxt.action;
 
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.util.ServletContextAware;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction1 extends ActionSupport implements ServletRequestAware,ServletContextAware {
    //声明username属性
    private String username;
    //声明request属性
    HttpServletRequest request;
    //声明session属性
    HttpSession session;
    //声明 application属性
    ServletContext application;
 
    // 重写execute方法,这里并没有使用ServletActionContext.getRequest()来获得request对象,这是因为实现了ServletRequestAware
    public String execute() throws Exception {
        request.setAttribute("req", "i am request arrt!!");
        request.getSession().setAttribute("session", "i am session attr");
        application.setAttribute("application", "i am application");
        return SUCCESS;
    }
    //Username的get方法
    public String getUsername() {
        return username;
    }
    //Username的set方法
    public void setUsername(String username) {
        this.username = username;
    }
    //重写ServletContext中的方法
    @Override
    public void setServletContext(ServletContext application) {
        // TODO Auto-generated method stub
        this.application = application;
    }
    //重写ServletRequest中的方法
    @Override
    public void setServletRequest(HttpServletRequest request) {
        // TODO Auto-generated method stub
        this.request = request;
    }

此文章转载于:http://my.oschina.net/dph/blog/80546


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值