JavaWeb_16_02_JSP---01

本文详细介绍了JSP的基础知识,包括它的概念、作用和原理,指出JSP本质上是一个Servlet。通过代码示例展示了JSP如何生成Servlet及简化书写。接着讲解了JSP的脚本元素,包括三种不同的脚本定义方式,并给出了使用示例。最后,通过一个Cookie管理案例,演示了如何在JSP中处理Cookie,实现用户访问时间记录的功能。
摘要由CSDN通过智能技术生成

1 JSP—概述(day16_cookie)

1.1 概念

  • JSP全称Java Server Pages,是一种动态网页开发技术。
  • 它使用JSP标签在HTML网页中插入Java代码。标签通常以<%开头以%>结束

1.2 作用

  • JSP是一种Java servlet,主要用于实现Java web应用程序的用户界面部分。
  • 网页开发者们通过结合HTML代码、XHTML代码、XML元素以及嵌入JSP操作和命令来编写JSP。
  • JSP通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。
  • JSP 基于Java Servlet API,因此,JSP拥有各种强大的企业级Java API
  • JSP页面可以与处理业务逻辑的 Servlet 一起使用,这种模式被Java servlet 模板引擎所支持

2 JSP—原理

2.1 JSP本质上就是一个Servle

在这里插入图片描述

2.2 代码展示

2.2.1 先运行day16项目,找到项目运行配置目录

在这里插入图片描述
在这里插入图片描述

2.2.2 关闭项目重启

停掉项目,清除日志信息,
再运行项目,访问index.jsp页面,就会生成工作目录work
查看运行配置目录,
会新增一个work目录

在这里插入图片描述

2.2.3 查看work目录下的文件

在这里插入图片描述

2.2.4 查看work目录中的index_jsp.java源码

  • 1、index_jsp类继承自HttpJspBase

在这里插入图片描述

2.2.5 在Tomcat源码中找到HttpJspBase

  • 1、在Tomcat源码中找到HttpJspBase类

    • org.apache.jasper.runtime.HttpJspBase
  • 2、源码目录:

    • apache-tomcat-8.5.63-src --> java --> org --> apache --> jasper --> runtime

在这里插入图片描述

  • 3、发现HttpJspBase继承自HttpServlet
    • 证明:JSP本质上就是一个Servlet

在这里插入图片描述

2.2.6 JSP如何用来简化书写的

  • 1、index_jsp.java文件中同样存在_JspService方法,类似于servlet中的servlet方法

在这里插入图片描述

  • 2、_JspService方法中定义了out对象

在这里插入图片描述

  • 3、为out对象赋值

在这里插入图片描述

  • 4、 out对象帮助我们输出了HTML代码

在这里插入图片描述

3 JSP—脚本

3.1 脚本概念

           JSP定义java代码的方式

3.2 脚本位置 <% – java代码 – %>

在这里插入图片描述

3.3 脚本分类(JSP定义java代码的方式)

     方式一、<% java代码 %>
     方式二、<%! java代码 %>
     方式三、<%= java代码 %>

3.3.1 方式一、<% java代码 %>

<% java代码 %>

此方式定义的代码,在service方法中,Service方法中可以定义什么,该脚本中就能定义什么

在这里插入图片描述

在这里插入图片描述

3.3.1 方式二、<%! java代码 %>

<%! java代码 %>
定义的java代码,会成为在jap转换后的java类的成员变量位置,不在service方法中,一般不使用

在这里插入图片描述

在这里插入图片描述

3.3.3 方式三、<%= java代码 %>

<%= java代码 %>
定义的java代码,会输出到页面上,输出语句中能定义什么,改脚本中就能定义什么,定义在Service方法中的脚本

案例:
输出a的值
输出字符串

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

4 JSP—的内置对象

4.1 内置对象的概念

     在jap页面中,不需要获取和创建,可以直接使用的对象

4.2 JSP的九大内置对象

request:请求对象
response:响应对象
out:字符输出流对象,可以将数据输出到页面上,和response.getWrite()方法类似

4.3 out.write()和response.getWrite()的区别

     response.getWrite()方法在任何时候,都会优先于out输出到页面

在这里插入图片描述

在这里插入图片描述

5 JSP—案例-改造Cookie案例

5.1 创建编辑home.jsp文件

    将CookieServletLogin中post方法中的代码,放置到home.jsp文件的脚本中

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.util.Date" %>
<%@ page import="java.text.SimpleDateFormat" %>
<%@ page import="java.net.URLDecoder" %>
<%@ page import="java.net.URLEncoder" %>
<html>
<head>
    <title>JSP</title>
</head>
<body>
    <%
        //1、获取素有的cookie,判断cookie的名称是不是lastTiMe
        Cookie[] cookies = request.getCookies();
        boolean flag = false;//没有cookie名为lastTime
        //2、判断cookie,遍历cookie
        if (cookies != null && cookies.length>0){
            for (Cookie cookie : cookies) {
                String name = cookie.getName();
                //4.判断名称是否是lastTime
                if ("lastTime".equals(name)){ //存在该cookie,不是第一次访问,
                    //存在lastTime的cookie,将标识符设置成true
                    flag = true;
                    //获取当前时间字符串,重新设置cookie的属性值,重新发送cookie
                    Date date = new Date();
                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss" );
                    String format = sdf.format(date);
                    System.out.println("编码前"+format);
                    //设置URL编码
                    format = URLEncoder.encode(format, "utf-8");
                    System.out.println("编码后"+format);
                    cookie.setValue(format);
                    //设置cookie的存活时间
                    cookie.setMaxAge(30*24*60*60);
                    response.addCookie(cookie);

                    //相应数据:
                    //获取上次访问的时间
                    String time = cookie.getValue();
                    System.out.println("解码前"+time);
                    //URL解码
                    time = URLDecoder.decode(time, "utf-8");
                    System.out.println("编码后"+time);
                    response.getWriter().write("欢迎回来,您上次的访问时间是:"+time);

                    //找到之后就不再循环
                    break;
                }
            }
        }

        /*
         * 如果cookie不存在的情况
         * */

        if(cookies==null || cookies.length==0 || flag == false){
            //1、获取当前时间字符串
            Date date = new Date();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String format = sdf.format(date);
            System.out.println("编码前"+format);
            //设置URL编码
            format = URLEncoder.encode(format, "utf-8");
            System.out.println("编码后"+format);

            //2.创建cookie对象
            Cookie cookie =  new Cookie("lastTime",format);
            //设置cookie的最大存活时间
            cookie.setMaxAge(30*24*60*60);
            response.addCookie(cookie);

            //3、写出响应体数据
            response.getWriter().write("您好,欢迎您首次访问");


        }
    %>
</body>
</html>

5.2 运行项目

访问路径:http://localhost:8080/day16/home.jsp

5.3 访问结果

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值