需求

.访问一个Servlet ,如果是第一次访问,则提示 你好欢迎首次访问。 2.如果不是第一次访问,则提示:欢迎回来,你上次的访问时间为:显示时间字符串。 需求分析: 1.可以采用Cookie 来完成。 2.在服务器中Servlet 判断是否有一个lasttime 的Cookie. 2.1如果有则 表示不是第一次访问返回上次访问时间。 2.2.没有: 是首次访问。 1.响应:你好,你上次的访问时间为。。。。。。 2.写回Cookie lastime 3.日期 的编码 URLEncoder.encode(value,"utf-8") 日期解码 URLDecoder.decode(value,"utf-8")

 

  
  
```
//第一次访问操作
// 1 获取用户当前访问的时间
Date date = new Date();
// 2 格式化时间数据(时间转换成含有非法字符形式)
SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日 ;,= hh时mm分ss秒");
String format1 = format.format(date);
System.out.println(format1);
// 3 将数据进行编码
String encode = URLEncoder.encode(format1, "utf-8");
// 4 将数据存入cookie
Cookie cookie = new Cookie("time",encode );
cookie.setMaxAge(60*60*24);
// 5 将数据发送给浏览器
response.addCookie(cookie);
```

```
package com.zengjx.demo;

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.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

@WebServlet("/getTimeServlet")
public class GetTimeServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html ;charset=utf-8");
        Cookie[] cookies = request.getCookies();
        boolean   isNotFirst=false;

        if(cookies!=null&& cookies.length!=0){
            for (Cookie cookie : cookies) {
                System.out.println(" "+cookie.getName()+" "+cookie.getValue());

                //获取cookie  是否有  lastime
                String  name= cookie.getName();
                if(name.equals("lasttime")){//上次访问过了



                    String  str_time = URLDecoder.decode(cookie.getValue(),"utf-8");
                    System.out.println("last ="+str_time);

                    SimpleDateFormat  simpleDateFormat =new SimpleDateFormat("yyyy年MM月dd日 hh:MM:ss");
                    Date  date =new Date();
                    String   newTime=   simpleDateFormat.format(date);
                    System.out.println("newTime "+newTime);
                  //  Cookie  cookie1 =new Cookie("lasttime",str_time1);
                    // 不编码 会报错:java.lang.IllegalArgumentException: An invalid character [32] was present in the Cookie value
                   newTime=URLEncoder.encode(newTime,"utf-8");
                    cookie.setValue(newTime);
                    response.addCookie(cookie);
                    System.out.println("re.......");
                    isNotFirst=true;
                    response.getWriter().write("更新时间");
                    response.getWriter().write("你上次的访问时间"+str_time);


                    //响应数据
                    //获取Cookie的value,时间
//                    String value = cookie.getValue();
//                    System.out.println("解码前:"+value);
//                    //URL解码:
//                    value = URLDecoder.decode(value,"utf-8");
//                    System.out.println("解码后:"+value);
//                    response.getWriter().write("<h1>欢迎回来,您上次访问时间为:"+value+"</h1>");
//
//
//                    Date date  = new Date();
//                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
//                    String str_date = sdf.format(date);
//                    System.out.println("编码前:"+str_date);
//                    //URL编码
//                    str_date = URLEncoder.encode(str_date,"utf-8");
//                    System.out.println("编码后:"+str_date);
//                    cookie.setValue(str_date);
//                    //设置cookie的存活时间
//                    cookie.setMaxAge(60 * 60 * 24 * 30);//一个月
//                    response.addCookie(cookie);
                }
            }
        }
        System.out.println(" flag "+isNotFirst);
       if(!isNotFirst){

            System.out.println("fist  call");
            Date  date =new Date();
            //   DateFormat dateFormat =  new   SimpleDateFormat("yyyy:MM:ddHH:mm:ss");
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
            String stime=  dateFormat.format(date);
            String  str_time=  URLEncoder.encode(stime,"utf-8");
            Cookie  cookie =new Cookie("lasttime",str_time);
            response.addCookie(cookie);
            //设置有效期
            cookie.setMaxAge(3600*20);
            response.getWriter().write("首次访问");
            System.out.println(" first  end ");
       }


        System.out.println("do  post ");
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}
```

 

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐