明明已经创建出一个session但是到别的servlet里面竟然获取不到

爪哇武功盖世 2014-04-03 10:35:55
简单购物车!
写了个小练习 下面这段servlet代码作为首页 首先访问 HttpSession session = request.getSession(); 创建了一个session


package com.mth.shopping;

import java.io.IOException;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class ListBook extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
HttpSession session = request.getSession();
Map<String, Book> map = DB.getMap();
session.setAttribute("map", map);
String url=response.encodeRedirectURL("/Session/BookIndex.jsp");
System.out.println(url);
response.sendRedirect(url);
}

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}

}


但是在另外一个servlet里面 HttpSession session = request.getSession(false); 竟然获取到空的session

package com.mth.shopping;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class BuyBookServlet extends HttpServlet {
// private List<Book> list = null;

@SuppressWarnings("unchecked")
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String bookId = request.getParameter("id");
Book book = DB.getMap().get(bookId);
HttpSession session = request.getSession(false);
List<Book> list = (List<Book>) session.getAttribute("list");
if (list == null) {
list = new ArrayList<Book>();
session.setAttribute("list", list);
}
list.add(book);

String url = response.encodeRedirectURL("/Session/ListCart");
response.sendRedirect(url);
}

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

doGet(request, response);
}

}




请教各位大神 为什么 ?
严重: Servlet.service() for servlet BuyBookServlet threw exception
java.lang.NullPointerException
at com.mth.shopping.BuyBookServlet.doGet(BuyBookServlet.java:23)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.mth.filter.EncodeFilter.doFilter(EncodeFilter.java:25)
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:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:619)
...全文
978 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
酒剑仙 2014-04-11
  • 打赏
  • 举报
回复
难倒你觉得不应该报错吗?你一开始设置的是一个map的session 后面取list的session没进行空指针判定就强行转换类型了,报错是理所当然的吧!你后面的那个设置list session的操作根本执行不了。因为入口就报错了!
m3621552 2014-04-11
  • 打赏
  • 举报
回复
debug你下 ,你自己看看session里你说的map,list
爪哇武功盖世 2014-04-05
  • 打赏
  • 举报
回复
引用 5 楼 longhun012 的回复:
你放一个名字叫 “map” 的东西 ,却希望 取出来 一个叫“list” 的东西
没懂我的意思 那个map是来显示所有数目的 list是点击购买之后用来存买几本书的
爪哇武功盖世 2014-04-05
  • 打赏
  • 举报
回复
引用 6 楼 as944985356 的回复:
[quote=引用 5 楼 longhun012 的回复:] 你放一个名字叫 “map” 的东西 ,却希望 取出来 一个叫“list” 的东西
LZ在逗.[/quote] 没懂我的意思 那个map是来显示所有数目的 list是点击购买之后用来存买几本书的
C灬C 2014-04-04
  • 打赏
  • 举报
回复
引用 5 楼 longhun012 的回复:
你放一个名字叫 “map” 的东西 ,却希望 取出来 一个叫“list” 的东西
LZ在逗.
huoxu 2014-04-04
  • 打赏
  • 举报
回复
你放一个名字叫 “map” 的东西 ,却希望 取出来 一个叫“list” 的东西
ay转身遇 2014-04-04
  • 打赏
  • 举报
回复
引用 3 楼 m75100313 的回复:
[quote=引用 1 楼 zhangxiaojie0321 的回复:] session.setAttribute("map", map);放进去session名字是map, List<Book> list = (List<Book>) session.getAttribute("list"); 取的时候取list? 还有为什么list为空的时候

if (list == null) {
            list = new ArrayList<Book>();
            session.setAttribute("list", list);
        }
又把list设置进去?那你取它还有什么意义?
BookIndex.jsp就是用来显示所有书目的.[/quote] 那你就在建一个session。不用原有的
爪哇武功盖世 2014-04-03
  • 打赏
  • 举报
回复
引用 1 楼 zhangxiaojie0321 的回复:
session.setAttribute("map", map);放进去session名字是map, List<Book> list = (List<Book>) session.getAttribute("list"); 取的时候取list? 还有为什么list为空的时候

if (list == null) {
            list = new ArrayList<Book>();
            session.setAttribute("list", list);
        }
又把list设置进去?那你取它还有什么意义?
BookIndex.jsp就是用来显示所有书目的.
爪哇武功盖世 2014-04-03
  • 打赏
  • 举报
回复
引用 1 楼 zhangxiaojie0321 的回复:
session.setAttribute("map", map);放进去session名字是map, List<Book> list = (List<Book>) session.getAttribute("list"); 取的时候取list? 还有为什么list为空的时候

if (list == null) {
            list = new ArrayList<Book>();
            session.setAttribute("list", list);
        }
又把list设置进去?那你取它还有什么意义?
第一个session.setAttribute("map", map); 是我把书放进一个map集合 让他跳转到一个Jsp显示这个数书目 每本书有一个超链接购买 下面那个list是我点击购买的时候把这个list放到session里面 购买一本 list增加一本 然后 把list里面 的数据放到jsp上面显示出来 第一次点击购买的时候 list因为没有书籍 就是空的 我先判断一下是否购买过书 买过书的话 list就不是空的 可以直接添加书籍 要是没买过书 就初始化一个list然后 再把这本书 放到list里面去
ay转身遇 2014-04-03
  • 打赏
  • 举报
回复
session.setAttribute("map", map);放进去session名字是map, List<Book> list = (List<Book>) session.getAttribute("list"); 取的时候取list? 还有为什么list为空的时候

if (list == null) {
            list = new ArrayList<Book>();
            session.setAttribute("list", list);
        }
又把list设置进去?那你取它还有什么意义?

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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