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);

}

}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/529191.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/529191.shtml
英文地址,請注明出處:http://en.pswp.cn/news/529191.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

iphone儲存空間系統怎么清理_教你快速清理 iPhone 系統緩存垃圾,拒絕卡頓!

「 改變能改變的一切,接受不能改變的一切!」▼“iPhone存儲空間”里的系統為何占用了幾十G的甚至上百G的內存,如何清理?當我們使用 iPhone 一段時間之后,系統或應用中會出現一些多余的緩存數據,如果長時間不…

倒N字形排列java_Java排序8大算法實現

概述排序有內部排序和外部排序,內部排序是數據記錄在內存中進行排序,而外部排序是因排序的數據很大,一次不能容納全部的排序記錄,在排序過程中需要訪問外存。我們這里說說八大排序就是內部排序。當n較大,則應采用時間復…

cross_val_score 如何對孤立森林_【收藏】森林防火手抄報素材匯總!

森林防火手抄報模板參考【文字素材參考】01森林防火根據森林火災燃燒中央地點,蔓延速度,受害部位和程度,大致可把森林火災分為三大類:一.地表火 二.樹冠火 三.地下火。以受害森林面積大小為標準,森林火災分為以下四類:1.森林火警:…

java io 轉換流_Java編程IO流中的轉換流

對于IO流中的轉換流,顧名思義,就是將字符流轉換成字節流或者是將字節流轉換成字符流的對象。那么有時候我們得到的是一個字符流,但是我們又需要進行一些計算之類的,或者我們得到的是一個字節流,但是我們又需要進行一些…

pb9 調用系統語音_成都電銷系統一個月多少錢_選擇靈狐傳媒_收費透明

靈狐傳媒表示:成都電銷系統一個月多少錢_選擇靈狐傳媒_收費透明,在成都想要找一家專業的電銷系統,今天小編帶您看看該怎么選擇吧,和研發實踐,融合互聯網、云計算及人工智能、通信、大數據等技術,研發推出了以人工智能為…

java thread 線程銷毀_手把手帶你了解Java線程的實現方式及生命周期原理

前言我們在工作中線程技術很多情況下都能用的到,而且我們在面試的時候,線程技術基本上也是必問的。今天我來從線程的實現方式以及線程的生命周期做一個全面的講解與分析,幫助大家能更好的去了解線程技術。概念我們先來了解下線程和進程的概念…

python自動化_python自動化測試-Behave框架的用法介紹 - python測試學習

測碼學院 Behave框架的用法介紹眾所周知:行為驅動開發((behavior-drivendevelopment,BDD)是一種基于敏捷軟件開發的方法。它可以鼓勵開發人員,業務參與者和QA人員之間的協作。作為另一個Python自動化測試框架,“Behave”允許團隊…

虛擬按鍵自己觸發的java代碼_在SystemUI添加虛擬按鍵

我們想要在volume、back、menu同一排添加一個虛擬按鍵,并且觸發一個應用;1、首先我們要找到這些虛擬按鍵的位置:\frameworks\base\packages\SystemUI\res\layout-sw600dp\navigation_bar.xml2、橫屏時,最左邊的RelativeLayout 中添…

diskgeniusv4.4.0_入門TensorFlow2.0

今天老師帶領我們入門TensorFlow2.0。至于tensorflow2.0是啥嘛,詳細的可以度娘一下。我簡述一下,就是一個end-to-end machine-Learning open source plantform(端對端的開源機器學習的平臺)。學習tensorflow需要引入tensor這個概念,tensor的漢語意思就是…

java.close用法_void close()

void close()描述 (Description)java.io.FilterInputStream.close()方法關閉此輸入流并釋放與該流關聯的所有系統資源。聲明 (Declaration)以下是public void close()方法的聲明 -public void close()參數 (Parameters)NA返回值 (Return Value)該方法不返回任何值。異常 (Excep…

php 其他頁面獲取session_PHP五十個提升執行效率的小技巧,和常見問題

在項目開發過程中,經常遇到了一些PHP處理程序性能底下的情況,程序運行在centosnginx環境,雖然這個有很多的原因如:服務器本身配置,運行環境nginx服務,php-fpm配置等等,更多有一點仍然是PHPer沒有…

java怎么設置404界面_如何使用Spring MVC顯示自定義的404 Not Found頁面

本篇文章給大家帶來的內容是關于如何使用Spring MVC顯示自定義的404 Not Found頁面,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。不知道大家對千篇一律的404 Not Found的錯誤頁面是否感到膩歪了?其實通過很簡單…

藍牙解碼格式哪個最好_拆解報告:山靈UP2 藍牙音頻接收器

主流手機逐步取消3.5mm接口,不再內置解碼芯片,習慣使用有線耳機、對音質有一定要求的朋友只能選擇音頻轉換線或者藍牙耳機功率放大器這類產品替代。與轉換線相比,藍牙耳機功率放大器采用藍牙無線連接更加自由,體積一般也比較小巧。…

java spring mvc json ajax 優勢_SpringMVC后臺json數據前臺ajax獲取不到!!!急求解答!!!...

//后端RestControllerRequestMapping(value "/loan")public class LoanApplyController extends BaseController {Resourceprivate LoanApplyService loanApplyService;//購車申請審核模塊RequestMapping(value "apply/all", method RequestMethod.GET)…

項目助理這個工作怎么樣_分析微信清理僵尸粉這個項目怎么樣?

做微信清理僵尸粉做微信清理僵尸粉做微信清理僵尸粉本人利用這個方式一年副業賺了10萬01 項目介紹(為什么這個項目受歡迎)現在每個人幾乎都會用到微信,但是時間長了,微信好友都是幾百上千好友(5000是上限)了。但是你有沒有發現,每次跟你微信溝…

php后臺閃退,詳解Cscms V4程序網站后臺登陸出現閃退

最近無憂主機php空間有些站長在使用Cscms V4程序建站,登陸網站后臺的時候出現了閃退的問題,這個問題困惑了很多使用這程序的站長們,因為出現這樣的問題不只是單純的Cscms程序才會出現,比如說Dedemcs、Wordpress等等蠻多的程序同樣…

java 線程安全list_JAVA并發編程實戰-線程安全性

線程安全性:對象的狀態是指存儲在狀態變量(例如實例和靜態域)中的數據。對象的狀態可能包括其他依賴對象的域。例如:某個HashMap的狀態不僅存儲在HashMap對象本身,還存儲在許多Map.Entry對象中。“共享”意味變量可以由…

日文轉換為羅馬音_手把手教你掌握韓語40音!入門必備哦

其實學習韓語還是蠻簡單的,平時看韓劇也能學會幾句比較常用的話~那么接下來我們進入正題,首先你可以根據自己的韓語學習經驗和全網搜集,整理出以下能夠快速學習韓語40音的方法,希望能幫助到更多面對韓語40音迷茫無措的…

php asp 發起post請求,PHP用curl函數POST請求到ASP頁面提示無效請求

如題,一提交即返回以下信息:錯誤您所請求的網址(URL)無法獲取——————————————————————————–當嘗試進行以下請求時:POST /card/pay_card.aspx HTTP/1.0Host: pay.m3guo.comX-Real-IP: 120.31.66.99X-Forwarded-For:…

win7一直顯示正在啟動_win7系統中提高啟動速度并且禁用某些軟件啟動的操作小技巧...

我們在啟動系統時,會出現啟動速度過慢,甚至達到假死機狀態,就是鼠標一直在轉圈圈的等待狀態。出現這個問題,一般是我們電腦中自啟動的軟件過多造成的,解決這個問題我們只要進入系統配置工具中,對系統進行相…