练习cookie做一个浏览商品记录显示,第一次会显示浏览过的商品,然后在浏览第二次就出现空指针异常

2016-6-16 16:51:48 org.apache.catalina.core.StandardWrapperValve invoke

严重: Servlet.service() for servlet [CookieDemo2] in context with path [/testHttp] threw exception

java.lang.NullPointerException

at cn.itcast.cookie.CookieDemo2.doGet(CookieDemo2.java:43)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:624)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)

at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)

at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:436)

at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1078)

at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625)

at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)

at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)

at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)

at java.lang.Thread.run(Thread.java:619)

CookieDemo2.java

package cn.itcast.cookie;

import java.io.IOException;

import java.io.PrintWriter;

import java.util.LinkedHashMap;

import java.util.Map;

import javax.servlet.ServletException;

import javax.servlet.http.Cookie;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

public class CookieDemo2 extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

response.setCharacterEncoding("UTF-8");

response.setContentType("text/html;charset=UTF-8");

PrintWriter out = response.getWriter();

//1.输出网站所有商品

out.write("本网站有如下商品:
");

Map map = Db.getAll();

for(Map.Entry entry:map.entrySet()){

Book book = entry.getValue();

out.print(""+book.getName()+"
");

}

//2.显示用户浏览过的商品

out.print("
您曾经浏览过的商品:
");

Cookie cookies[] = request.getCookies();

for(int i=0;cookies!=null && i

if(cookies[i].getName().equals("bookHistory")){

String ids[] = cookies[i].getValue().split("\\,");

for(String id:ids){

Book book = (Book) Db.getAll().get(id);

out.print(book.getName()+"
");

}

}

}

}

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

doGet(request, response);

}

}

class Db{

private static Map map = new LinkedHashMap();

static{

map.put("1",new Book("1","javaweb开发","老张","一本好书!!"));

map.put("2",new Book("2","jdbc开发","老张","一本好书!!"));

map.put("3",new Book("3","spring开发","老黎","一本好书!!"));

map.put("4",new Book("4","struts开发","老毕","一本好书!!"));

map.put("5",new Book("5","android开发","老黎","一本好书!!"));

}

public static Map getAll(){

return map;

}

}

class Book{

private String id;

private String name;

private String author;

private String description;

public Book() {

super();

// TODO Auto-generated constructor stub

}

public Book(String id, String name, String author, String description) {

super();

this.id = id;

this.name = name;

this.author = author;

this.description = description;

}

public String getId() {

return id;

}

public void setId(String id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getAuthor() {

return author;

}

public void setAuthor(String author) {

this.author = author;

}

public String getDescription() {

return description;

}

public void setDescription(String description) {

this.description = description;

}

}

CookieDemo3.java

package cn.itcast.cookie;

import java.io.IOException;

import java.io.PrintWriter;

import java.util.Arrays;

import java.util.LinkedList;

import javax.servlet.ServletException;

import javax.servlet.http.Cookie;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

public class CookieDemo3 extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

response.setCharacterEncoding("UTF-8");

response.setContentType("text/html;charset=UTF-8");

PrintWriter out = response.getWriter();

//1.根据用户带过来的id,显示相应商品的详细信息

String id = request.getParameter("id");

Book book = (Book) Db.getAll().get(id);

out.write(book.getId()+"
");

out.write(book.getName()+"
");

out.write(book.getAuthor()+"
");

out.write(book.getDescription()+"
");

//构建cookie,回写给浏览器

String cookieValue = buildCookie(id,request);

Cookie cookie = new Cookie("bookHistory",cookieValue);

cookie.setMaxAge(1*30*24*60*60);

cookie.setPath("/testHttp");

response.addCookie(cookie);

}

private String buildCookie(String id, HttpServletRequest request) {

String bookHistory = null;

Cookie cookies[] = request.getCookies();

for(int i=0;cookies!=null && i

if(cookies[i].getName().equals("bookHistory")){

bookHistory = cookies[i].getValue();

}

}

if(bookHistory==null){

return id;

}

LinkedList list = new LinkedList(Arrays.asList(bookHistory.split("//,")));

if(list.contains(id)){

list.remove(id);

}else{

if(list.size()>=3){

list.removeLast();

}

}

list.addFirst(id);

StringBuffer sb = new StringBuffer();

for(String bid : list){

sb.append(bid+",");

}

sb.deleteCharAt(sb.length()-1).toString();

return null;

}

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

doGet(request, response);

}

}

java 异常抛出空指针异常_java.lang.NullPointerException 抛出空指针异常相关推荐

  1. java异常类型 数组越界_java数组中的异常类型整理

    对于程序中出现异常,是很多程序员不想看到的情况,因为这就需要我们去查询异常的原因,然后进行一些处理异常的操作.在Java数组操作时,也会有一些异常情况的发生.这里我们罗列出了两种:ClassCastE ...

  2. java 异常堆栈日志分析_Java 进阶之路:深入解读 Java 异常堆栈丢失原因

    在应用程序的开发和维护中,通常需要借助运行日志来监控和定位问题.其中,在日志中打印异常堆栈信息对于定位问题极为重要,因此,作为一名工程师,对打印异常堆栈应该不陌生.笔者在实践中曾遇到一个奇怪的现象: ...

  3. Java异常的根类似_Java异常(Exception)类型及处理

    Java中的异常全部都是以对象形式存在的,一旦某句代码发生异常,会在该代码处生成一个异常对象,然后以堆栈式抛出,若不对该异常对象进行处理,最终导致程序终止运行. Java语言异常分类 编译时异常(受检 ...

  4. java 异常 过滤器_在过滤器Filter中抛出一个全局异常可以捕获的异常

    1.创建自定义异常 public class TokenException extends RuntimeException { private static final long serialVer ...

  5. java exec dir的例子_java.lang.Runtime.exec(String[] cmdarray, String[] envp, File dir)方法实例...

    全屏 java.lang.Runtime.exec(String[] cmdarray, String[] envp, File dir)方法执行在指定环境和工作目录的独立进程中指定的命令和参数.字符 ...

  6. java异常分类三大类_JAVA 中异常的分类

    JAVA中的异常可以大体上分为三大类: Error,RuntimeException,Exception 基类Throwable派生的. 使用的方法也是基本一致的,都是通过关键字throw+Throw ...

  7. java异常return笔试题_Java笔试面试总结—try、catch、finally语句中有return 的各类情况...

    前言 之前在刷笔试题和面试的时候经常会遇到或者被问到 try-catch-finally 语法块的执行顺序等问题,今天就抽空整理了一下这个知识点,然后记录下来. 正文 本篇文章主要是通过举例的方式来阐 ...

  8. java点击关闭弹出窗口_java – JPopupMenu在子弹出窗口打开时关闭

    不可能直接,它很难覆盖已知的 bug,在其他手中Swing不允许同时有两个lightwieght弹出组件 import javax.swing.*; import java.awt.event.*; ...

  9. java压栈重复字符串_Java 实例 – 压栈出栈的方法实现字符串反转

    Java 实例 - 压栈出栈的方法实现字符串反转 以下实例演示了使用用户自定义的方法 StringReverserThroughStack() 来实现字符串反转: /* author by w3csc ...

最新文章

  1. 如何查看ubuntu下的分区命令
  2. 2015年十佳IDC评选结果:50强名单揭晓
  3. CCNP ONT LAB之PQ WFQ
  4. Windows Phone开发者注册秘籍
  5. Android开发--图形图像与动画(三)--Animation效果的XML实现
  6. neat算法——本质就是遗传算法用于神经网络的自动构建
  7. zigbee学习之路(二)点亮LED
  8. 5月22日云栖精选夜读:PHP学习路线图
  9. apache公司主要是做什么的
  10. 如何通过 macOS 恢复功能重新安装 macOS
  11. camera中文版软件 ip_网络摄像机监控(IP Camera Viewer)下载-摄像头监控(IP Camera Viewer)官方版-华军软件园...
  12. 从Controller注解切入了解spring注解原理
  13. 故障:删除不存在的设备或完全卸载驱动程序
  14. 随笔20220506
  15. 硬盘SMART信息数据结构
  16. HTML网页设计结课作业 DIV布局校园足球网站制作 梅西足球体育 7页
  17. 「镁客早报」恒大健康称首款电动汽车拟6月投产;产业链透露苹果正悄悄准备Apple Car... 1
  18. Java 正则检测大写字母
  19. Sublist3r使用教程-子域名扫描工具
  20. 光机电一体化高速分拣实训系统

热门文章

  1. DevOps“兵器”60样,你都会使哪几样?
  2. Cloud一分钟 |亚马逊市值被微软反超;GKE全球大宕机长达19小时;苹果市值跌破9000亿美元...
  3. Cloud一分钟 | 云存储服务商​Egnyte获7500万美元E轮融资,高盛领投
  4. c++如何禁用指定的键盘布局_Karabiner Elements for Mac 键盘键位自定义改键工具
  5. vsftpd FTP Server ‘ls.c‘ 远程拒绝服务漏洞(CVE-2011-0762)漏洞修复方案
  6. 一分钟在Linux 环境 搭建 SFTP服务器
  7. 定时任务的并发_03
  8. 将活动工作表生成 PDF,并通过电子邮件发送
  9. 轻松解决Android gradle太慢问题
  10. python3 django开发_python3开发进阶-Django框架学习前的小项目(一个简单的学员管理系统)...