Struts2之ActionContext的初始化时机错误 导致空指针

@SuppressWarnings("serial")
public abstract class AbstractParamAction extends ActionSupport{
	public ActionContext actionContext = ActionContext.getContext();
	public HttpServletRequest request = (HttpServletRequest) actionContext.get(ServletActionContext.HTTP_REQUEST);
	public HttpServletResponse response = (HttpServletResponse) actionContext.get(ServletActionContext.HTTP_RESPONSE);
	
	//public ServletContext  application = (ServletContext)actionContext.getApplication();
	public HttpSession session = request.getSession();
}

/**
 * 
 */
package com.wonders.stpt.marquee.action;

import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import com.wonders.stpt.innerWork.action.AbstractParamAction;
import com.wonders.stpt.marquee.service.MarqueeService;
import com.wonders.stpt.util.ActionWriter;

/** 
 * @ClassName: MarqueeAction 
 * @Description: TODO(这里用一句话描述这个类的作用) 
 * @author zhoushun 
 * @date 2014年2月28日 下午1:58:40 
 *  
 */

@ParentPackage("struts-default")
@Namespace(value="/marquee")
@Controller("marqueeAction")
@Scope("prototype")
public class MarqueeAction extends AbstractParamAction{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 4787537184825647031L;

	private ActionWriter aw = new ActionWriter(response);
	private MarqueeService service;

	public MarqueeService getService() {
		return service;
	}
	@Autowired(required=false)
	public void setService(@Qualifier("marqueeService")MarqueeService service) {
		this.service = service;
	}
	
	
	@Action(value="getMarquee")
	public String getMarquee(){
		aw.writeJson(this.service.getMsg());
		return null;
	}
}

原来 action 中 使用的都是 多例模式,每次初始化action都是在 一个请求发起后,故actionContext 中均有 request,response等值。

但改为单例模式后,自动在spring加载时初始化,此时actionContext中,由于未发生用户请求,request,response 均为空。


若要使用单例模式,就只能在具体方法中获得request等其他对象。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值