[英]Deleting Java cookie in .JSP file
我正在使用以下函數來創建在Java Servlet中設置的cookie。 我試圖在.JSP文件的scriptlet中刪除它。 但是它不是刪除cookie,關於為什么的任何想法?
這是我用來在Servlet中創建cookie的函數:
for(String classId :request.getParameterValues("classId")){
optionCookie = new Cookie("componentSearchOptionSelect",classId);
response.addCookie(optionCookie);
}
這是我用來刪除scriptlet中的cookie的代碼:
Cookie[] cookies = null;
cookies = request.getCookies();
if(cookies != null){
for(int i = 0; i < cookies.length; i++){
Cookie cookie = cookies[i];
if(cookie.getName().equals("componentSearchOptionSelect")){
selectedClass = cookie.getValue();
cookie.setMaxAge(0);
response.addCookie(cookie);
}
}
}
JSP作為一種視圖技術,負責生成HTTP響應正文。 Cookie必須放在HTTP響應標頭中。 因此,如果您將cookie代碼放入JSP的中間位置,並且JSP那時已經生成了很多HTML,導致響應已經提交,那么設置HTTP響應標頭為時已晚。 HTTP響應標頭已經發送到客戶端,這是無法返回的點。 如果您已經注意了服務器日志,那么您應該已經注意到了一個IllegalStateException
帶有一個非常容易解釋的消息和跟蹤。
因此,要解決您的問題,只需確保在尚未提交響應時刪除cookie。 在JSP向HTTP響應主體寫入任何內容之前,將包含所有業務邏輯的scriptlet放在JSP頁面的頂部。
<%
// Business logic here.
%>
<!DOCTYPE html>
<html>
... (presentation logic here)
</html>
實際上,JSP是執行業務邏輯的錯誤位置(閱讀: 您根本不應該使用scriptlet )。 您應該為此使用servlet或servlet過濾器 。 在您的特定情況下,我認為您只需要一個帶有doGet()
的servlet。
請嘗試這個。
/*
Cookie[] cookies = null;
cookies = request.getCookies();
if(cookies != null){
for(int i = 0; i < cookies.length; i++){
Cookie cookie = cookies[i];
if(cookie.getName().equals("componentSearchOptionSelect")){
selectedClass = cookie.getValue();
cookie.setMaxAge(0);
response.addCookie(cookie);
}
}
}
*/
Cookie cookie = new Cookie("componentSearchOptionSelect", "");
cookie.setMaxAge(0);
response.addCookie(cookie);
順便說一句,為什么您多次設置相同的Cookie
值? cookie componentSearchOptionSelect
的值是request.getParameterValues("classId"))
最后一個的值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.