java web-8.3Cookie案例+jsp改造

案例:记住上一次访问时间

1.cookie案例需求分析
(1).访问一个Servlet,如果是第一次访问,则提示:您好欢迎您首次访问
(2).如果不是第一次访问,则提示:欢迎回来,您上次访问时间为:显示时间字符串
2.分析:
(1)可以采用cookie完成
(2)在服务器中的servlet判断是否有一个名为lastTime的cookie
①有:不是第一次访问
a.响应数据:欢迎回来,您上次访问时间为:年月日时分秒
b.写回cookie:lastTime = 年月日时分秒
②没有:是第一次访问
a.响应数据:您好,欢迎您首次访问
b.写回cookie:lastTime = 年月日时分
3.代码实现

/*
(1)可以采用cookie完成
(2)在服务器中的servlet判断是否有一个名为lastTime的cookie
    ①有:不是第一次访问
         a.响应数据:欢迎回来,您上次访问时间为:年月日时分秒
         b.写回cookie:lastTime = 年月日时分秒
    ②没有:是第一次访问
         a.响应数据:您好,欢迎您首次访问
         b.写回cookie:lastTime = 年月日时分
 */
@WebServlet("/cookieTest")
public class CookieTest extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req, resp);
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置响应消息体的数据格式以及编码
        resp.setContentType("text/html;charset=utf-8");
        //1.在服务器中的servlet判断是否有一个名为lastTime的cookie
        //1.1获取所有cookies
        Cookie[] cookies = req.getCookies();
        boolean flag = false;//没有cookie为lastTime
        //1.2遍历cookie数组
        if(cookies != null && cookies.length>0){
            for (Cookie cookie : cookies) {
                //1.3获取cookie名称
                String name = cookie.getName();
                //2在服务器中的servlet判断是否有一个名为lastTime的cookie
                if("lastTime".equals(name)){
                    // ①有:不是第一次访问
                    flag = true;
                    //设置cookie的value
                    //获取当前时间的字符串重新设置cookie的值,重新发送cookie
                    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);//一个月
                    resp.addCookie(cookie);
                    //a.响应数据:欢迎回来,您上次访问时间为:年月日时分秒
                    //获取cookie的value
                    String value = cookie.getValue();
                    System.out.println("解码前"+value);
                    //解码
                    value = URLDecoder.decode(value, "utf-8");
                    System.out.println("解码后"+value);
                    resp.getWriter().write("欢迎回来,您上次访问时间为:"+value+"</h1");
                    break;
                }
            }
        }
        // ②没有:是第一次访问
        //         a.响应数据:您好,欢迎您首次访问
        //         b.写回cookie:lastTime = 年月日时分
        if(cookies== null || cookies.length == 0|| flag == false){
            //没有,第一次访问
            //设置cookie的value
            //获取当前时间的字符串重新设置cookie的值,重新发送cookie
            Date date = new Date();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
            String str_date = sdf.format(date);
            Cookie cookie = new Cookie("lastTime",str_date);
            cookie.setValue(str_date);
            //设置cookie的存活时间
            cookie.setMaxAge(60*60*24*30);//一个月
            resp.addCookie(cookie);
            resp.getWriter().write("您好,欢迎您首次访问</h1>");
        }
    }
}

JSP改造cookie案例

一、JSP概念
1.Java Server Pages:java服务器端页面
(1)可以理解为:一个特殊的页面,其中既可以指定定义html标签,又可以定义java代码
(2)用于简化书写。
代码示例

 <body>
    <%
      System.out.println("hello,jsp");
    %>
  <h1>hi-jsp</h1>
  </body>

效果在控制台输出<% %>中的语句。在页面输出<h1></h1>中的语句
在这里插入图片描述

二、JSP原理
在这里插入图片描述
JSP本质上就是一个servlet

三、JSP脚本
JSP定义Java代码的方式
三种方法定义:
方法1.<% 代码 %>:定义的java代码,在service方法中,service方法可以定义什么,该脚本就可以定义什么
方法2.<%! 代码 %>:定义的java代码,在jsp转换后的java类的成员位置
方法3.<%=代码 %>:定义的java代码,会输出到页面上,输出语句中可以定义什么,该脚本中就可以定义什么
四、JSP内置对象
1.内置对象: 在jsp页面中不需要获取和创建,可以直接使用的对象
2.jsp一共有九个内置对象
3.介绍三个:
(1)request:
(2)response:
(3)out:字符输出流对象。可以将数据输出到页面上。和response.getWriter()类似
response.getWriter()和Out.write()的区别:
①在tomcat服务器真正给客户端做出响应之前,会先找response缓冲区数据,再找out缓冲区数据
②response.getWriter()数据输出永远在out.write()之前

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值