读书人

怎么解决java.lang.NullPointerExcept

发布时间: 2012-08-19 21:09:48 作者: rapoo

如何解决java.lang.NullPointerException问题
错误如下:
java.lang.NullPointerException
at org.lss.servlet.addBookToCart.doPost(addBookToCart.java:84)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
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 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:127)
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:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:619)
这是addBookToCart.java代码:
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

//设置响应代码
response.setContentType("text/html;chartset=gbk");
//创建session对象
//获取与请求对应的session,如果存在返回HttpSession对象,否则返回null
HttpSession session=request.getSession(false);
if(session==null){
RequestDispatcher dispatcher=request.getRequestDispatcher("shouye.jsp");
dispatcher.forward(request, response);
}
//取session中存储的书目
bookBean book=(bookBean)session.getAttribute("CURRENTBOOK");
//创建购物车,用HashMap来充当购物车

Map cart=(Map)session.getAttribute("cart");
if(cart==null){
cart=new HashMap();
//将购物车存放到session中
session.setAttribute("cart",cart);
}
cartItemBean cartItem=(cartItemBean)cart.get(book.getIsbn());
if(cartItem!=null){
cartItem.setNumber(cartItem.getNumber()+1);
}else{
cart.put(book.getIsbn(), new cartItemBean(book,1));

}
RequestDispatcher dispatcher=request.getRequestDispatcher("jsp/viewCart.jsp");
dispatcher.forward(request, response);
}


[解决办法]
HttpSession session=request.getSession(false);
为啥要传一个false呢,去掉!
[解决办法]
从代码来看,很大可能概率是:变量 book 为空。

所以调用 book.getIsbn() 时,抛出空指针异常。

也就是说:
bookBean book=(bookBean)session.getAttribute("CURRENTBOOK");
在session中没有得到东西。
[解决办法]
你第一次session.getAttribute("CURRENTBOOK");得到的book为null,而你cartItemBean cartItem=(cartItemBean)cart.get(book.getIsbn());又在使用他,肯定会有null异常的
[解决办法]
bookBean book=(bookBean)session.getAttribute("CURRENTBOOK");//判断一下book是不是为空,可能就是它为空导致空指针
//创建购物车,用HashMap来充当购物车

Map cart=(Map)session.getAttribute("cart");
if(cart==null){
cart=new HashMap();
//将购物车存放到session中
session.setAttribute("cart",cart)
}
cartItemBean cartItem=(cartItemBean)cart.get(book.getIsbn());

[解决办法]
发现我2楼的回帖神奇的没了。不过跟3、4楼的意见差不多。

至于1楼你说:
HttpSession session=request.getSession(false);
为啥要传一个false呢,去掉!
估计楼主是想借此来判断当前用户是否登录呢,而且跟空指针异常没啥关系。


[解决办法]
赞同5楼的说法,楼主应该检查一下book是否为空。
[解决办法]
if(cartItem!=null){
cartItem.setNumber(cartItem.getNumber()+1);
}else{
cart.put(book.getIsbn(), new cartItemBean(book,1));
这里反过来写,先判断空值看看。
还有自定义的类名首字母要大写,这是java的命名规范。
[解决办法]
at org.lss.servlet.addBookToCart.doPost(addBookToCart.java:84)

[解决办法]
具体你还是打断点一步步调啊,到那一步报错的你看看就知道了,空指针
[解决办法]
貌似有答案了。
[解决办法]
具体你还是打断点一步步调啊,到那一步报错的你看看就知道了,空指针
[解决办法]
你没有解释清楚你页面流之间的关系,所以没法判断。

当然也不排除你的循环根本没进入,或者if条件根本没成立过的可能性。


另外,从这段代码来看:
//从session读取已经存储的图书列表信息,并强制转换成List类型
List titles=(List)session.getAttribute("titles");
感觉你有可能滥用了session。。。难道你把所有图书都保存到session中去了?

读书人网 >Java Web开发

热点推荐