【JavaWeb錯誤集錦】有關Cookie不支援逗號、空格等特殊符號並報出伺服器500錯誤的解決方案
專案場景:
筆者最近在練習Cookie的使用,在新建的CookieDemo1的Servlet中的doPost方法裡,嘗試例項化一個cookie物件並給它賦值。然後在另一個新建的CookieDemo2的Servlet的doPost方法裡使用這個cookie,並在控制檯中輸出該cookie的鍵與值。問題描述:
在Tomcat伺服器啟動後,在瀏覽器中訪問cookieDemo1這個Servlet,結果直接報出伺服器內程式錯誤原因分析:
通過查資料瞭解到現在的cookie不支援逗號、空格等特殊符號,如果非要用,可以使用URL編碼的方式來解決這個問題解決方案:
以想要往cookie中傳入空格為例: 在傳入的時候,使用URLEcoder.encode()方法將想要傳入的字串編碼:String str_date1 = URLEncoder.encode(str_date, "utf-8");
然後將編碼後的值傳入cookie中:
cookie.setValue(str_date1);
在讀取cookie值之後,也要進行解碼:
String value = cookie.getValue();
value = URLDecoder.decode(value,"utf-8");
最後得到我們想要的value。 **全部測試程式碼:**
package cookie;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Date;
@WebServlet("/cookieTest")
public class CookieTest extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
Cookie[] cookies = request.getCookies();
boolean flag = false;
if(cookies != null && cookies.length > 0){
for(Cookie cookie : cookies){
String name = cookie.getName();
if("lastTime".equals(name)){
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
String str_date = sdf.format(date);
String str_date1 = URLEncoder.encode(str_date, "utf-8");
cookie.setValue(str_date1);
cookie.setMaxAge(60*60);
response.addCookie(cookie);
flag = true;
String value = cookie.getValue();
value = URLDecoder.decode(value,"utf-8");
response.getWriter().write("<h1>歡迎回來,您上次訪問時間為"+value+"</h1>");
break;
}
}
}
if(cookies == null || cookies.length == 0 || flag == false){
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
String str_date = sdf.format(date);
String str_date1 = URLEncoder.encode(str_date, "utf-8");
Cookie cookie = new Cookie("lastTime",str_date1);
cookie.setMaxAge(60*60);
response.addCookie(cookie);
response.getWriter().write("<h1>您好,歡迎您首次登陸</h1>");
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
相關文章
- pycharm 取消空格,逗號 等符號的自動補全PyCharm符號
- 解析C++連結錯誤:未定義引用和未解析符號的完整解決方案C++符號
- dedecms提示500錯誤解決方法
- 伺服器出現500錯誤的原因和解決辦法伺服器
- Android開發錯誤集錦Android
- IDEA發生“Error:java: 錯誤: 不支援發行版本 5”錯誤的解決方案IdeaErrorJava
- 配置微信公眾號,token錯誤解決
- 解決eslint空格報錯等問題EsLint
- Linux下錯誤解決方案Linux
- latex 錯誤以及解決方案
- 【論文寫作】錯誤集錦
- Python錯誤集錦:IndentationError: unexpected indentPythonError
- GitLab 500 錯誤如何解決?Gitlab
- java:錯誤:不支援發行版本1.4解決方案Java
- C++ VS單例模式報 錯誤 LNK2001 無法解析的外部符號 private: static class SingletonPattern錯誤C++單例模式符號
- dbfread報錯ValueError錯誤解決方法Error
- photoshop匯出png發生未知錯誤的解決方案,ps匯出發生未知錯誤怎麼解決
- 真機除錯出現 application installation failed 錯誤 解決方案除錯APPAI
- IIS瀏覽器422、500等錯誤提示:自定義錯誤模組不能識別此錯誤瀏覽器
- 2024.6.17鮮花/錯誤的號碼
- TCP網路除錯助手提示錯誤:“1035:未知錯誤” 解決方案TCP除錯
- ORA-28000錯誤解決方案
- Go常見錯誤集錦 | 字串底層原理及常見錯誤Go字串
- Go 常見錯誤集錦 | 字串底層原理及常見錯誤Go字串
- 伺服器內部錯誤500的原因伺服器
- Java解析xml檔案遇到特殊符號&會出現異常的解決方案JavaXML符號
- tasklist 遠端獲取程式報錯賬號密碼錯誤密碼
- Qt報Multiple definition錯誤的解決QT
- Go-Micro客戶端請求報500錯誤的解決方法Go客戶端
- 雲伺服器出現502錯誤的原因分析和解決方案伺服器
- 關於錯誤程式碼107(err_ssl_protocol_error)SSL 協議出錯的解決方案ProtocolError協議
- Ubuntu Cannot allocate memory 錯誤解決方案Ubuntu
- Hadoop常見錯誤及解決方案Hadoop
- angular——線上競拍錯誤集錦(一)Angular
- Ocelot錯誤解決
- PHP HTTP 500 - 內部伺服器錯誤PHPHTTP伺服器
- 雲伺服器composer相關錯誤問題解決伺服器
- navicat連線MySQL8.0.11報2059錯誤的解決方案MySql