java 异常抛出空指针异常_java.lang.NullPointerException 抛出空指针异常
练习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 抛出空指针异常相关推荐
- java异常类型 数组越界_java数组中的异常类型整理
对于程序中出现异常,是很多程序员不想看到的情况,因为这就需要我们去查询异常的原因,然后进行一些处理异常的操作.在Java数组操作时,也会有一些异常情况的发生.这里我们罗列出了两种:ClassCastE ...
- java 异常堆栈日志分析_Java 进阶之路:深入解读 Java 异常堆栈丢失原因
在应用程序的开发和维护中,通常需要借助运行日志来监控和定位问题.其中,在日志中打印异常堆栈信息对于定位问题极为重要,因此,作为一名工程师,对打印异常堆栈应该不陌生.笔者在实践中曾遇到一个奇怪的现象: ...
- Java异常的根类似_Java异常(Exception)类型及处理
Java中的异常全部都是以对象形式存在的,一旦某句代码发生异常,会在该代码处生成一个异常对象,然后以堆栈式抛出,若不对该异常对象进行处理,最终导致程序终止运行. Java语言异常分类 编译时异常(受检 ...
- java 异常 过滤器_在过滤器Filter中抛出一个全局异常可以捕获的异常
1.创建自定义异常 public class TokenException extends RuntimeException { private static final long serialVer ...
- java exec dir的例子_java.lang.Runtime.exec(String[] cmdarray, String[] envp, File dir)方法实例...
全屏 java.lang.Runtime.exec(String[] cmdarray, String[] envp, File dir)方法执行在指定环境和工作目录的独立进程中指定的命令和参数.字符 ...
- java异常分类三大类_JAVA 中异常的分类
JAVA中的异常可以大体上分为三大类: Error,RuntimeException,Exception 基类Throwable派生的. 使用的方法也是基本一致的,都是通过关键字throw+Throw ...
- java异常return笔试题_Java笔试面试总结—try、catch、finally语句中有return 的各类情况...
前言 之前在刷笔试题和面试的时候经常会遇到或者被问到 try-catch-finally 语法块的执行顺序等问题,今天就抽空整理了一下这个知识点,然后记录下来. 正文 本篇文章主要是通过举例的方式来阐 ...
- java点击关闭弹出窗口_java – JPopupMenu在子弹出窗口打开时关闭
不可能直接,它很难覆盖已知的 bug,在其他手中Swing不允许同时有两个lightwieght弹出组件 import javax.swing.*; import java.awt.event.*; ...
- java压栈重复字符串_Java 实例 – 压栈出栈的方法实现字符串反转
Java 实例 - 压栈出栈的方法实现字符串反转 以下实例演示了使用用户自定义的方法 StringReverserThroughStack() 来实现字符串反转: /* author by w3csc ...
最新文章
- 如何查看ubuntu下的分区命令
- 2015年十佳IDC评选结果:50强名单揭晓
- CCNP ONT LAB之PQ WFQ
- Windows Phone开发者注册秘籍
- Android开发--图形图像与动画(三)--Animation效果的XML实现
- neat算法——本质就是遗传算法用于神经网络的自动构建
- zigbee学习之路(二)点亮LED
- 5月22日云栖精选夜读:PHP学习路线图
- apache公司主要是做什么的
- 如何通过 macOS 恢复功能重新安装 macOS
- camera中文版软件 ip_网络摄像机监控(IP Camera Viewer)下载-摄像头监控(IP Camera Viewer)官方版-华军软件园...
- 从Controller注解切入了解spring注解原理
- 故障:删除不存在的设备或完全卸载驱动程序
- 随笔20220506
- 硬盘SMART信息数据结构
- HTML网页设计结课作业 DIV布局校园足球网站制作 梅西足球体育 7页
- 「镁客早报」恒大健康称首款电动汽车拟6月投产;产业链透露苹果正悄悄准备Apple Car... 1
- Java 正则检测大写字母
- Sublist3r使用教程-子域名扫描工具
- 光机电一体化高速分拣实训系统
热门文章
- DevOps“兵器”60样,你都会使哪几样?
- Cloud一分钟 |亚马逊市值被微软反超;GKE全球大宕机长达19小时;苹果市值跌破9000亿美元...
- Cloud一分钟 | 云存储服务商​Egnyte获7500万美元E轮融资,高盛领投
- c++如何禁用指定的键盘布局_Karabiner Elements for Mac 键盘键位自定义改键工具
- vsftpd FTP Server ‘ls.c‘ 远程拒绝服务漏洞(CVE-2011-0762)漏洞修复方案
- 一分钟在Linux 环境 搭建 SFTP服务器
- 定时任务的并发_03
- 将活动工作表生成 PDF,并通过电子邮件发送
- 轻松解决Android gradle太慢问题
- python3 django开发_python3开发进阶-Django框架学习前的小项目(一个简单的学员管理系统)...