用IDEA記錄使用者上次訪問時間的程式碼。
阿新 • • 發佈:2021-02-02
package com.CookieDemo;
import com.utils.CookieUtils;
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.text.SimpleDateFormat;
import java.util.Date;
@WebServlet(name = "ServletCookieDemo",urlPatterns="/4")
public class ServletCookieDemo extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// response.setContentType("text/html;charset=UTF-8");
// response.getWriter().println("你好,歡迎來到本網站1");
Cookie[] cookies =request.getCookies();
Cookie cookie= CookieUtils.findCookie(cookies,"a");
if(cookie == null){
response.setContentType("text/html;charset=UTF-8");
response.getWriter().println("你好,歡迎來到本網站");
}else{
String value = cookie.getValue();
response.setContentType("text/html;charset=UTF-8");
response.getWriter().println("你好,歡迎來到本網站,你上次的訪問時間為"+value+"");
}
String currentTime = new SimpleDateFormat("yyyy-M-d:hh:mm:ss").format(new Date());
Cookie c=new Cookie("a",currentTime);
response.addCookie(c);
}
}
package com.utils;
import javax.servlet.http.Cookie;
/**
* 查詢指定名稱Cookie的工具類
*/
public class CookieUtils {
public static Cookie findCookie(Cookie[] cookies,String name){
if(cookies==null){
return null;
}else {
for(Cookie cookie:cookies){
if(name.equals(cookie.getName())){
return cookie;
}
}return null;
}
}
}
實驗了一個上午終於成功了,導致失敗的原因是因為2點:
第一,在Utils工具類中,分以下情況去討論:
1.瀏覽器中沒有cookies;
2.瀏覽器中有cookie;
-2.1與給定的cookie同名
-2.2與給定的cookie不同名
在2.2這種情況下不小心將return寫到{}外面,導致最終結果怎麼樣都是null。
第二,用了過時的toLocalString()方法