JavaWeb(3) - JSP/Cookie/Session

JavaWeb(3) - JSP/Cookie/Session

JSP

JSP快速入门

  • 导入JSP坐标

    <!-- jsp -->
    <dependency>
           <groupId>javax.servlet.jsp</groupId>
           <artifactId>jsp-api</artifactId>
           <version>2.2</version>
           <scope>provided</scope>
    </dependency>
    
  • webapp 包下创建JSP文件,并编写 HTML 标签 和 Java 代码

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
        <h1>hello jsp</h1>
        <%
            System.out.println("hello jsp...");
        %>
    </body>
    </html>
    

JSP原理 与 JSP脚本

  • JSP简单的来讲就是 Java + HTML,实质上就是一个Servlet
  • JSP被访问时,由Tomcat将其转换成Servlet,再由Tomcat将其编译,最终对外提供服务的其实就是这个字节码文件
    在这里插入图片描述
  • JSP脚本就是在JSP页面内定义Java代码
  • JSP脚本分类
    <!-- 内容会直接放到_jspService()方法之中 -->
    <%...%>
    
    <!-- 内容会放到out.print()中,作为out.print()的参数 -->
    <%=...%>
    
    <!-- 内容会放到_jspService()方法之外,被类直接包含 -->
    <%!...%>
    
  • 缺点:不利于前后端分离

EL表达式

  • 用于简化JSP页面内的Java代码,其主要功能是获取数据
  • 语法:${[表达式]}
    <!-- 获取域中存储的key为brands的数据 -->
    ${brands}
    
  • JavaWeb中的四大域对象
    page:当前页面有效
    request:当前请求有效
    session:当前会话有效
    application:当前应用有效
    在这里插入图片描述

JSTL标签

即 JSP 标准标签库,使用标签取代JSP页面上的Java代码

  • 导入坐标

    <!--jstl-->
    <dependency>
       <groupId>jstl</groupId>
       <artifactId>jstl</artifactId>
       <version>1.2</version>
    </dependency>
    
    <dependency>
       <groupId>taglibs</groupId>
       <artifactId>standard</artifactId>
       <version>1.1.2</version>
    </dependency>
    
  • 在JSP页面上引入JSTL标签库

    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    
  • 使用

    <!--c-if:完成逻辑判断,替换Java if-else-->
    <c:if test="[判断变量的值]"></c:if>
    
    <!-- c-forEach:完成for循环,替换Java for循环 -->
    <c:forEach item="[被遍历的容器]" var=[遍历产生的临时变量]>
    <c:forEach begin="[开始数]" end="[结束数]" step=[步长]>
    

MVC模式与三层架构(重点)

MVC设计模式(理论)

MVC是一种分层开发的模式,(其优势体现在职责单一,互补影响;有利于分工协作;有利于组件重用)其中:

  • M:Model,业务模型,处理业务
  • V:View,视图,界面展示
  • C:Controller,控制器,处理请求,调用模型和视图

三层架构(工业落地)

  • 数据访问层:对数据库的增删改查基本操作;
  • 业务逻辑层:对业务逻辑层进行封装,组合数据访问层层中的基本功能,形成复杂的业务逻辑功能;
  • 表现层:接收请求,封装数据,调用业务逻辑层,响应数据;
    在这里插入图片描述

会话跟踪技术(重点)

  • 会话:用户打开浏览器,访问web服务器的资源,会话建立,直到有一方断开连接,会话结束。在一次会话中可以包含多次请求和响应
  • 会话跟踪:一种维护浏览器状态的方法,服务器需要识别多次请求是否来自同一浏览器,以便在同一次会话的多次请求间共享数据
  • 为什么要数据共享:HTTP协议是无状态的,每次浏览器向服务器请求时,服务器都会将该请求是为新的请求,因此我们需要会话跟踪技术来实现会话内数据共享;

Cookie基本使用与基本原理

Cookie客户端会话技术,将数据保存到客户端,以后每次请求都携带Cookie数据进行访问
在这里插入图片描述

Cookie基本使用

发送Cookie(同样在Servlet类中编写Java代码)

  • 创建Cookie对象,设置数据

    Cookie cookie = new Cookie("key","value");
    
  • 发送Cookie到客户端,使用response对象

    response.addCookie(cookie);
    

获取Cookie(同样在Servlet类中编写Java代码)

  • 获取客户端携带的所有Cookie,使用request对象

    Cookie[] cookies = request.getCookies();
    
  • 遍历数组获取每一个Cookie对象并使用Cookie对象方法获取数据

    cookie.getName();
    cookie.getValue();
    
Cookie原理与相关细节

Cookie的实现是基于HTTP协议,它由 响应头(set-cookie)与请求头(cookie) 组成
在这里插入图片描述

  • Cookie存活时间:默认情况下,Cookie存储在浏览器内存中,当浏览器关闭,内存释放,则Cookie被销毁

    /*
    	1. 正数:将Cookie写入浏览器所在电脑的硬盘,持久化存储,到时间自动删除
    	2. 负数:默认值,Cookie在当前浏览器内存中,当浏览器关闭,则Cookie销毁
    	3. 零:删除对应的Cookie
    */
    setMaxAge(int seconds);
    
  • Cookie存储中文:通常情况下Cookie是不能存储中文,如果需要存储,则需要进行转码(URL编码)

    String value = "张三";
    value = URLEncoder.encode(value,"UTF-8");
    Cookie cookie = new Cookie("username",value);
    

Session基本使用与基本原理

  • 服务端会话跟踪技术,将数据保存到服务端
  • 通过HttpSession接口,来实现一次会话的多次请求间数据共享功能
    在这里插入图片描述
Session基本使用
  • 获取Session对象
    HttpSession session = request.getSession();
    
  • Session对象功能
    //存储数据到session域中
    void setAttribute(String name,Object o);
    
    //根据key,获取值
    Object getAttribute(String name);
    
    //根据key,删除该键值对
    void removeAttribute(String name)
    
Session原理与相关细节
  • Session是基于Cookie实现的
  • Session在同一个浏览器访问下Session对象是同一个,反之是不同的;
    在这里插入图片描述
  • Session钝化 (在服务器正常关闭之后,Tomcat会自动将Session数据写入硬盘文件中)/活化 (再次启动服务器后,从文件中加载数据到Session中):服务器重启后,Session中的数据是存在的;
  • Session销毁:默认情况下,无操作30min自动销毁;或者调用Session对象中的invalidate()方法

Cookie/Session小结

  • 相同点:Cookie 和 Session 都是来完成一次会话内多次请求间数据共享的;

  • 不同点:

    CookieSession
    存储位置将数据存在客户端将数据存在服务端
    安全性不安全安全
    数据大小最大3KB无大小限制
    存储时间可以长期存储默认30min
    服务器性能不占服务器资源Session占用服务器资源
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值