【已解決】:java.lang.IllegalArgumentException: An invalid character [32] was present in the Cookie value

報錯如下:

在這裏插入圖片描述

報錯代碼

        //解決亂碼
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        //產生時間
        Date date = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//24小時制
        String s = sdf.format(date);


        //創建cookie
        Cookie cookie = new Cookie("loginTime",s);
        //向瀏覽器發送cookie
        response.addCookie(cookie);

解決辦法

當然看到這個報錯還是比較明顯的,是因爲在產生時間字符串的時候出現了空格(whitespace),在創建cookie對象的時候是不允許的。

在給客戶端發送cookie的時候,將value進行"utf-8"編碼,在獲取客戶端請求中的cookie時進行響應的"utf-8"解碼,即可。

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //解決亂碼
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        //產生時間
        Date date = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//24小時制
        String s = sdf.format(date);
        //使用utf-8編碼
        s = URLEncoder.encode(s, "utf-8");

        //創建cookie
        Cookie cookie = new Cookie("loginTime",s);
        //向瀏覽器發送cookie
        response.addCookie(cookie);

        //將全部cookie轉化爲Cookie對象存入數組中,每個cookie存name:value鍵值對
        Cookie[] cookies = request.getCookies();
        Cookie loginTime = null;
        if(cookies!=null) {
            for (Cookie c : cookies) {
                if ("loginTime".equals(c.getName())) {
                    String value = c.getValue();
                    //使用utf-8解碼
                    value = URLDecoder.decode(value,"utf-8");
                    //設置解碼後的值
                    c.setValue(value);
                    loginTime = c;
                }
            }
        }
        if (loginTime!=null){
            response.getWriter().write("上次訪問的時間:"+loginTime.getValue());
        }else {
            response.getWriter().write("首次登錄");
        }
    }

參考:javax.servlet.http.Cookie

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章