報錯如下:
報錯代碼
//解決亂碼
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("首次登錄");
}
}