【发布时间】:2012-12-20 11:22:54
【问题描述】:
例如,我有一个将属性设置为 HttpServletRequest 的 servlet 代码:
request.setAttribute("someValue", someValue());
RequestDispatcher rd = getServletContext().getRequestDispatcher("/SomeJsp.jsp");
rd.forward(this.request, this.response);
return;
如何确保上面的代码是线程安全的?
这是我得到的堆栈跟踪:
java.lang.NullPointerException
at org.apache.catalina.connector.Request.notifyAttributeAssigned(Request.java:1552)
at org.apache.catalina.connector.Request.access$000(Request.java:105)
at org.apache.catalina.connector.Request$3.set(Request.java:3342)
at org.apache.catalina.connector.Request.setAttribute(Request.java:1504)
at org.apache.catalina.connector.RequestFacade.setAttribute(RequestFacade.java:541)
at org.apache.catalina.core.ApplicationHttpRequest.setAttribute(ApplicationHttpRequest.java:281)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:286)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:684)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:471)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:402)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:329)
at com.mycompany.myapp.servlet.SomeServlet.doRequest(SomeServlet.java:103)
at com.mycompany.myapp.servlet.SomeServlet.doGet(SomeServlet.java:159)
【问题讨论】:
-
你的请求对象为空
-
什么是
someValue()?是否有可能返回null? -
检查 someValue() 是否为空
-
看起来像一个内部错误(将属性设置为
null不是问题,但forward内部的某些东西会崩溃)。您的 ServletRequest 发生了一些奇怪的事情。 -
你可能也忘记使用 getSession() 了??