【问题标题】:Struts2 getting request object as nullStruts2 获取请求对象为空
【发布时间】:2010-08-26 09:23:37
【问题描述】:

我在 Struts2 中遇到一个奇怪的错误,尝试将属性设置到请求范围时出现空指针异常,

Struts Problem Report

Struts 检测到一个未处理的 例外:消息:文件: org/apache/catalina/connector/Request.java 行号:1,424

Stacktraces
java.lang.NullPointerException
    org.apache.catalina.connector.Request.setAttribute(Request.java:1424)
    org.apache.catalina.connector.RequestFacade.setAttribute(RequestFacade.java:503)
    javax.servlet.ServletRequestWrapper.setAttribute(ServletRequestWrapper.java:284)
    com.inrev.bm.action.IRBrandMgmtAction.wrdTwts(IRBrandMgmtAction.java:81)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    java.lang.reflect.Method.invoke(Unknown Source)

我的代码如下,

public class IRBrandMgmtAction extends ActionSupport implements SessionAware,ServletRequestAware {


private static final long serialVersionUID = 1L;

private Map session;

private HttpServletRequest request; 

private IRWordToTrack wrdtotrack;

private IRBrandMgmtDAO brandMgmtDAO;

private static org.apache.log4j.Logger log = Logger.getLogger(IRBrandMgmtAction.class);

以及发生这种情况的方法,

public String wrdTwts()
{
    ArrayList<IRBrandTrackBean> messages = null;
    IRDateUtil dtUtil = new IRDateUtil();
    String wordId = request.getParameter("wordId");

    IRUser user = (IRUser) session.get("user");
    IRWordToTrack word = brandMgmtDAO.getWord(Integer.parseInt(wordId));

    if(word!=null)
    {
        messages = brandMgmtDAO.viewMsgForUser(word.getWord().toUpperCase().trim(), null, dtUtil.getTimeZoneOffset(user.getTimeZone()));
    }

    request.setAttribute("messages",messages);

    return "tweets";
}

我正在使用 tomcat 6 服务器。

问候, 罗希特

【问题讨论】:

    标签: tomcat servlets struts2


    【解决方案1】:

    很难知道问题的原因,但我想到了三个建议:

    • 可能是Tomcat的错误,升级到最新版本。
    • 确保您放入请求/会话上下文中的对象是小 bean,没有对其他对象的引用。
    • 您的代码有几种味道。在 Struts2 中,您应该(几乎)从不访问 HttpRequest 对象(并且很少访问会话)。 Struts2 的重点是(几乎)完全将您的操作与 Servlet 层解耦;这简化了测试,总体上让您满意。您的操作方法通常应该读取自己的字段(通常已经由“参数拦截器”从 http 请求中设置),与服务层对话,设置一些其他自己的字段并返回结果。在 Struts2 方法中设置 httprequest 几乎总是一种不好的做法。

    【讨论】:

    • 感谢 Leonbloy,我实际上是 struts2 的新手,在这个项目之前一直在使用 struts1.2,感谢您的所有建议。只是想了几个问题,*你认为在 strust2 中传递值的最佳方法是什么,定义 getter setter? * 当我使用这个 HttpServletRequest request = ServletActionContext.getRequest(); 时,请求对象 null 的错误似乎没有发生可以放点光吗?
    【解决方案2】:

    将您的操作类设为 RequestAware 而不是 ServletRequestAware 可能是一个想法。

    在您当前的代码中,您确定您的 setServletRequest 方法正在被调用吗?您是否定义了任何导致默认拦截器被丢弃的自定义拦截器?在 Session/Request 感知的情况下,我们对 ServletConfigInterceptor 感兴趣。

    【讨论】:

      【解决方案3】:

      使用, ServletActionContext.getResponse(); ServletActionContext.getRequest();

      获取请求和响应。

      先打电话给&lt;interceptor-ref name="defaultStack"/&gt;

      【讨论】:

        猜你喜欢
        • 2017-08-18
        • 2018-07-07
        • 2017-10-31
        • 1970-01-01
        • 2018-12-28
        • 2018-01-06
        • 1970-01-01
        • 2019-03-12
        • 2015-10-06
        相关资源
        最近更新 更多