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 都是来完成一次会话内多次请求间数据共享的;
-
不同点:
Cookie Session 存储位置 将数据存在客户端 将数据存在服务端 安全性 不安全 安全 数据大小 最大3KB 无大小限制 存储时间 可以长期存储 默认30min 服务器性能 不占服务器资源 Session占用服务器资源