Servlet中HashMap问题

天台的故事 2016-02-09 04:21:28

package yuan.yu;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Iterator;

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

import yuan.util.Encoded;

public class session extends HttpServlet {

/**
* Constructor of the object.
*/
public session() {
super();
}

/**
* Destruction of the servlet. <br>
*/
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}

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

response.setCharacterEncoding("UTF-8"); // 先指定输出流的编码
PrintWriter out = response.getWriter(); // 再拿到输出对象
response.setContentType("text/html;charset=UTF-8");


HttpSession session = request.getSession();



//获取书名的ID
String id = request.getParameter("val");
//获取get提交的书名
String bookname = Encoded.changeSring(request.getParameter("name"));

//获取session数据
HashMap<String,Book> hm=(HashMap<String,Book>)session.getAttribute("mybooks");

//判读当前是否有session
if(hm == null)
{
hm = new HashMap<String,Book>();
//构建一个Book对象
Book book = new Book();
book.setId(id);
book.setName(bookname);
book.setNum(1);
hm.put(id, book);
//把hm放入到session
session.setAttribute("mybooks", book);

}
else
{
//判读hm是否有该书
if(hm.containsKey(id))
{
//表示书购买过一次
//取出
Book book = hm.get(id);
int bookNum = book.getNum();
book.setNum(bookNum+1);
}
else
{
Book book = new Book();
book.setId(id);
book.setName(bookname);
book.setNum(1);
hm.put(id, book);
}


//更新
session.setAttribute("mybooks", hm);

}

//获取session名称为mybooks所有数据
HashMap<String,Book> myBooks = (HashMap<String,Book>)session.getAttribute("mybooks");


out.println("<h3>你的购物车有以下书籍:</h3>");

Iterator<String> iter = myBooks.keySet().iterator();
while(iter.hasNext())
{
String key = iter.next();
Book book = myBooks.get(key);
out.println(book.getName()+" "+book.getNum()+"</br>");
}
out.println("<a href='/Session/session.html'>返回购物厅</a>");



}

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

response.setContentType("text/html");
PrintWriter out = response.getWriter();
this.doGet(request, response);
}

/**
* Initialization of the servlet. <br>
*
* @throws ServletException if an error occurs
*/
public void init() throws ServletException {
// Put your code here
}

}
[/code
下面是HTML静态文件
[code=html]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>session.html</title>

<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="this is my page">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">

<!--<link rel="stylesheet" type="text/css" href="./styles.css">-->

</head>

<body>
C语言入门 <a href="/Session/session?val=1&name=C语言入门">购买</a></br>
JAVA语言入门<a href="/Session/session?val=2&name=JAVA语言入门">购买</a></br>
计算机编译原理<a href="/Session/session?val=3&name=计算机编译原理">购买</a></br>
操作系统的概述<a href="/Session/session?val=4&name=操作系统的概述">购买</a></br>
数据结构 <a href="/Session/session?val=5&name=数据结构">购买</a></br>
大话设计模式 <a href="/Session/session?val=6&name=大话设计模式">购买</a></br>
</body>
</html>

访问的时候报错,报了如下这个错:

HTTP Status 500 - yuan.yu.Book cannot be cast to java.util.HashMap

type Exception report

message yuan.yu.Book cannot be cast to java.util.HashMap

description The server encountered an internal error that prevented it from fulfilling this request.

exception

java.lang.ClassCastException: yuan.yu.Book cannot be cast to java.util.HashMap
yuan.yu.session.doGet(session.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
note The full stack trace of the root cause is available in the Apache Tomcat/6.0.44 logs.

Apache Tomcat/6.0.44
...全文
375 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
心碎了无痕 2016-02-14
  • 打赏
  • 举报
回复
看你存进去的是否是map类型。 或者可以debug看看session里面获取到的到底是什么类型的,然后根据具体类型去转换。
cnzhaoshe 2016-02-14
  • 打赏
  • 举报
回复
5楼正解!!!!
qazwsxhai 2016-02-14
  • 打赏
  • 举报
回复
seantdj 2016-02-14
  • 打赏
  • 举报
回复
session.setAttribute("mybooks", book); 低级错误!!!
seantdj 2016-02-14
  • 打赏
  • 举报
回复
session.setAttribute("mybooks", book);
tony4geek 2016-02-14
  • 打赏
  • 举报
回复
你的 .Book cannot be cast to java.util.HashMap Book 转化成map 有问题报错 了。
天台的故事 2016-02-10
  • 打赏
  • 举报
回复
https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/1.gif
天台的故事 2016-02-09
  • 打赏
  • 举报
回复

81,091

社区成员

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

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