JavaWeb学习(11)--JSP改造Cookie案例

1)JSP入门学习

代码:https://gitee.com/jianghaok/Login.git
概念:Java Server Pages,java服务器端页面;
可以理解为:一个特殊的页面,其中既可以指定定义html标签,又可以定义java代码,用于简化书写!!!
原理:JSP本质上就是一个Servlet,图解如下:
在这里插入图片描述
JSP脚本:JSP定义Java代码的方式;

  1. <% 代码 %>:定义的java代码,在service方法中。service方法中可以定义什么,该脚本中就可以定义什么;
  2. <%! 代码 %>:定义的java代码,在jsp转换后的java类的成员位置;
  3. <%= 代码 %>:定义的java代码,会输出到页面上。输出语句中可以定义什么,该脚本中就可以定义什么。

例:index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>

      <%
        System.out.println("hello jsp");
        int i = 5;
        String contextPath = request.getContextPath();
        out.print(contextPath);
      %>
      <%!
        int i = 3;
      %>
      <%= "hello" %>
      System.out.println("hello jsp");
      <h1>hi~ jsp!</h1>
      <% response.getWriter().write("response....."); %>
  </body>
</html>

输出:
在这里插入图片描述
JSP的内置对象:在jsp页面中不需要获取和创建,可以直接使用的对象;

jsp一共有9个内置对象,out::字符输出流对象。可以将数据输出到页面上,和response.getWriter()类似;

response.getWriter()和out.write()的区别

  • 在tomcat服务器真正给客户端做出响应之前,会先找response缓冲区数据,再找out缓冲区数据;
  • response.getWriter()数据输出永远在out.write()之前

2)JSP改造Cookie案例

案例:记住上一次访问时间;【参见上篇博客–《Cookie快速入门》
需求:

  1. 访问一个Servlet,如果是第一次访问,则提示:您好,欢迎您首次访问。
  2. 如果不是第一次访问,则提示:欢迎回来,您上次访问时间为:显示时间字符串
    代码:home.jsp
<%@ page import="java.util.Date" %>
<%@ page import="java.text.SimpleDateFormat" %>
<%@ page import="java.net.URLEncoder" %>
<%@ page import="java.net.URLDecoder" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>itcast</title>
</head>
<body>
<%
    //1.获取所有Cookie
    Cookie[] cookies = request.getCookies();
    boolean flag = false;//没有cookie为lastTime
    //2.遍历cookie数组
    if(cookies != null && cookies.length > 0){
    
    
        for (Cookie cookie : cookies) {
    
    
            //3.获取cookie的名称
            String name = cookie.getName();
            //4.判断名称是否是:lastTime
            if("lastTime".equals(name)){
    
    
                //有该Cookie,不是第一次访问
                flag = true;//有lastTime的cookie
                //设置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);//一个月
                response.addCookie(cookie);
                //响应数据
                //获取Cookie的value,时间
                String value = cookie.getValue();
                System.out.println("解码前:"+value);
                //URL解码:
                value = URLDecoder.decode(value,"utf-8");
                System.out.println("解码后:"+value);
                %>
            <h1>欢迎回来,您上次访问时间为:<%=value%></h1>
            <input>
<%
                break;
            }
        }
    }
    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);
        System.out.println("编码前:"+str_date);
        //URL编码
        str_date = URLEncoder.encode(str_date,"utf-8");
        System.out.println("编码后:"+str_date);

        Cookie cookie = new Cookie("lastTime",str_date);
        //设置cookie的存活时间
        cookie.setMaxAge(60 * 60 * 24 * 30);//一个月
        response.addCookie(cookie);

%>
        <h1>您好,欢迎您首次访问</h1>
<span></span>
<%
    }
%>
<input>
</body>
</html>

内容来源:《学习传智播客的课程《JavaWeb+黑马旅游网》》
代码:https://gitee.com/jianghaok/Login.git

关注公众号,回复 【算法】,获取高清算法书!
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/jianghao233/article/details/106208780