ServletActionContext.getRequest()为什么会报空指针?

wxpshi 2011-10-13 02:51:21
做一个项目的时候,用到了HttpSessionBindingListener监听session失效
当运行valueBound的时候可以正常获取request,而当session失效运行valueUnbound的时候,获取request就会报空指针错误
代码如下:
public class SessionListener implements HttpSessionBindingListener{
private User userObject;
public SessionListener(User userObject) {
// TODO Auto-generated constructor stub
this.userObject = userObject;
}
//用户存session
public void valueBound(HttpSessionBindingEvent event) {
// TODO Auto-generated method stub
HttpSession session = event.getSession();
session.setAttribute("userInfo", userObject);
DateFormat df = DateFormat.getDateTimeInstance();
System.out.println(df.format(new Date())+"绑定数据源:"+userObject.getUserName()+":"+session.getId()+":"+session.getCreationTime());
try {
//这里就不会报错..奇怪
System.out.println("测试一下获取request");
HttpServletRequest request = ServletActionContext.getRequest();
HttpSession session1 = request.getSession();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}

// 用户SESSION失效,重新封装用户信息
public void valueUnbound(HttpSessionBindingEvent event) {
//这里就会报错..
HttpServletRequest request = ServletActionContext.getRequest();
HttpSession session = request.getSession();
}

public static String getCookieValue(Cookie[] cookies,String cookieName,String defaultValue) {
for(int i=0; i<cookies.length; i++) {
Cookie cookie = cookies[i];
if (cookieName.equals(cookie.getName())){
return(cookie.getValue());
}
}
return(defaultValue);
}
}

错误信息如下:
2011-10-13 14:49:29绑定数据源:qq:3750629397BCC701EA0BB36CB90F1C8D:1318488566733
测试一下获取request
2011-10-13 14:51:30 org.apache.jasper.runtime.JspFactoryImpl internalGetPageContext
严重: Exception initializing page context
java.lang.NullPointerException
at org.apache.struts2.ServletActionContext.getRequest(ServletActionContext.java:112)
at com.runda.filter.SessionListener.valueUnbound(SessionListener.java:44)
at org.apache.catalina.session.StandardSession.removeAttributeInternal(StandardSession.java:1654)
at org.apache.catalina.session.StandardSession.expire(StandardSession.java:756)
at org.apache.catalina.session.StandardSession.isValid(StandardSession.java:592)
at org.apache.catalina.connector.Request.doGetSession(Request.java:2287)
at org.apache.catalina.connector.Request.getSession(Request.java:2075)
at org.apache.catalina.connector.RequestFacade.getSession(RequestFacade.java:833)
at org.apache.catalina.connector.RequestFacade.getSession(RequestFacade.java:844)
at org.apache.jasper.runtime.PageContextImpl._initialize(PageContextImpl.java:146)
at org.apache.jasper.runtime.PageContextImpl.initialize(PageContextImpl.java:124)
at org.apache.jasper.runtime.JspFactoryImpl.internalGetPageContext(JspFactoryImpl.java:107)
at org.apache.jasper.runtime.JspFactoryImpl.getPageContext(JspFactoryImpl.java:63)
at org.apache.jsp.admin_005ftop_jsp._jspService(admin_005ftop_jsp.java:44)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.runda.filter.EncodingFilter.doFilter(EncodingFilter.java:65)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:619)


救命..弄了一下午了...还是找不出原因来..各位帮帮忙看看是什么原因造成的..
...全文
1588 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
草上飞 2012-01-12
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 trocp 的回复:]

引用 6 楼 trocp 的回复:

引用楼主 wxpshi 的回复:
做一个项目的时候,用到了HttpSessionBindingListener监听session失效
当运行valueBound的时候可以正常获取request,而当session失效运行valueUnbound的时候,获取request就会报空指针错误
代码如下:
Java code
public class ……
[/Quote]

都在研究这个问题!!!
关注
suoHelloWorld 2012-01-12
  • 打赏
  • 举报
回复
把代码贴一下啊,让自己去下,网速坑爹的,而且还弄个war包上传的,你更坑爹
oO临时工Oo 2012-01-12
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 trocp 的回复:]

引用楼主 wxpshi 的回复:
做一个项目的时候,用到了HttpSessionBindingListener监听session失效
当运行valueBound的时候可以正常获取request,而当session失效运行valueUnbound的时候,获取request就会报空指针错误
代码如下:
Java code
public class SessionListener imple……
[/Quote]

http://topic.csdn.net/u/20120111/13/ea7692a4-40a6-4587-96d0-b18381d78b9b.html
oO临时工Oo 2012-01-12
  • 打赏
  • 举报
回复
[Quote=引用楼主 wxpshi 的回复:]
做一个项目的时候,用到了HttpSessionBindingListener监听session失效
当运行valueBound的时候可以正常获取request,而当session失效运行valueUnbound的时候,获取request就会报空指针错误
代码如下:
Java code
public class SessionListener implements HttpSessionBi……
[/Quote]

我这个帖子里的问题更奇怪。。。。。。
伍文 2012-01-11
  • 打赏
  • 举报
回复
你的session为什么要通过request来获取呢。session建立的时候有page context,失效就没有,个人意见,仅供参考。
kouyiSC 2012-01-11
  • 打赏
  • 举报
回复
要看你session失效是怎么做的。。不要将整个session失效。。只需要移除session中的当前属性就行了。。
weizhen900514 2012-01-11
  • 打赏
  • 举报
回复
我也遇到这个问题了,关注
wxpshi 2011-10-13
  • 打赏
  • 举报
回复
郁闷。。为什么还是没有人回答我。。
wxpshi 2011-10-13
  • 打赏
  • 举报
回复
没有人么?小弟在线等。。

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧