Servlet.service() for servlet [jsp] in context ....錯誤


 

Servlet.service() for servlet [jsp] in context with path [/mvcTest] threw exception [java.lang.NullPointerException] with root cause
java.lang.NullPointerException這是在用tomcat寫一個小應用時遇到的錯誤,在網上看了很多沒看明白,最終試錯n次后發現了問題,

其實這個問題(我遇到的那種情況,可能這個報錯不止我遇到的這種情況導致)的根本原因是:.jsp頁面代碼導致的,因為為了實現

前端和后台的交互,在有些jsp代碼中需要后台傳入相應的數據到該jsp中,所以jsp代碼中就有了接收的代碼段,而當我們想跳轉到該

jsp頁面時卻沒有傳入相應的數據就會報上面所示的錯誤:空指針(因為后端沒有參數傳入時那么jsp中的參數就是一個空值,而

空值是不能進行很多操作的)。我們有時直接跳到jsp頁面成功是因為該jsp頁面是不需要傳入數據的。

如何處理這個問題:當然是傳入相應的數據了,注意用request對象傳數據時,requset對象  域空間中的數據只能存活於一個請求中,

那么就可能需要多次setAttribute()和多次getAttribute()

 

當然如果在jsp頁面中對 用到傳入參數的相關代碼塊做判斷也是可以的,即滿足相應的條件時再執行該代碼塊

即在jsp頁面端時判斷時要加上判斷接收到的數據是否為null,不為空的話再執行含有參數的代碼塊;

 

你也可以自己測試,如果你想跳到相應的頁面,則直接在瀏覽器中訪問看是否可以訪問到,訪問出錯,那肯定就說明該jsp頁面是不能直接

訪問的,可能需要傳入參數,當然前提是你的代碼要是正確的;

說到這里你明白的話就不必往下看了,下面是我遇到的場景

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

當然導致這個問題的原因可能不止我下面所說的這一種。下面我先說一下我出錯時的應用場景:

我用一個servlet來管理所有的操作(簡單的增刪改查),其中需要查詢 和 注冊(增)的內容是通過表單提交的,而刪除和修改

(應用中是通過id)是通過與記錄綁定來實現是刪除那條記錄的,下面是具體的一個效果

當然進行編輯操作時需要跳轉到另外一個頁面(modify.jsp)因為編輯是和對象綁定的在前端是這樣來寫的:

這句話的作用是:點擊編輯時跳到 servlet中去執行modify方法,在servlet配置時我將<url-pattern>這一項配置為 *udo,而在dopost方法中我做了一些出來,

截取方法名,利用反射通過方法名來調用具體的方法(這個地方可以不用糾結,當然后面我會在其他文章中另外說這個問題),modify()方法中,我跳轉到了modify.jsp頁面,並且攜帶上了記錄的id信息,所以在寫modify.jsp代碼的時候,肯定就會出現接收id的相關信息,直接看運行吧

首先看我通過正確的方法訪問到該頁面:主要看瀏覽器的地址欄,傳入了id,當然這里id是先傳給servlet,servlet中的方法再轉發到相應的modify.jsp頁面去的,

轉發的話地址欄是不會改變的,所以地址欄沒有變為localhost:8080/mvcTest/modify.jsp?id=5;對這個地方不理解得話可以看一下轉發與重定向的區別。

再看一下我直接訪問modify.jsp頁面,看到這里你可能會想我直接在url上傳值過去可以訪問嗎?

答案當然可以:例如可以這樣:localhost:8080/mvcTest/modify.jsp?id=10;但是可能會造成其他的問題,我這里是修改,如果我傳入

的id數據庫中沒有怎么辦,我還是去測試一下:

直接傳id的截圖:id=100在我的數據庫中是沒有的,結果瀏覽器頁面就這樣一直空白

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM