三大作用域
request作用域 - HttpServletRequest - 一次请求一次响应
session作用域 - HttpSession - 一次会话期间[从浏览器打开 - 浏览器关闭]
application作用域 - 从服务器打开到服务器关闭.
也叫做ServletContext作用域
HttpServletRequest
将所有来自于客户端的所有的请求的数据全部封装到了这个HttpServletRequest对象.
session的会话跟踪机制
cookie来管理session的.
http协议 - 无状态的协议.server端是不能够判断出俩次请求是来自于同一个客户端
管理的过程
http://192.168.186.216:8081/boot/session/set?name=admin - 控制层方法中提供了HttpSession
那么就会在tomcat内部为这个客户端开辟一块区域[session空间],并且每个session空间都会拥有唯一的一个id - JSESSIONID
server端创建一个一个cookie对象[容器],把这个JSESSIONID放入到cookie对象中.然后通过响应头信息将这个cookie响应该客户端,并且cookie保存在客户端
![]()
http://192.168.186.216:8081/boot/session/get 再次请求的时候,通过请求头信息将存有jsssionid的cookie一起发送给了server端
![]()
- 当前请求到达server端,服务器就会从请求头信息中的cookie里面拿到jessionid.根据这个jessionid来定位到它对应的session空间.
JSP技术
- java server page - java服务器端页面 - jsp运行在server端,通常在运行在tomcat服务器.
- tomcat服务器可以解析jsp页面
- jsp叫做动态网页技术,html叫做静态网页技术.
- jsp的作用可以在html代码中使用jsp标签来书写java代码以及jstl[标准标签库]
- jsp主要负责视图层的角色 - 负责展示数据到html页面
JSP三个脚本
代码块 _jspService方法内部
<% // java代码块 %>
声明 - _jspService方法外部.
<%! 声明 - 定义 %>
输出 - _jspService方法的内部
输出内容到网页
<%= 变量%>
JSP的本质
jsp的底层实际上是servlet技术,每个jsp文件经过tomcat中的Jsp解析器,每个Jsp文件解析成servlet程序.
jsp这个文件什么时候会被翻译成servlet程序[.java文件]
- 当启动服务器之后,当请求第一次到达这个jsp的时候,才会被翻译成.java文件.
- 只要后续的请求过程中,只要jsp文件没有进行任何的改动.都不会重复被翻译.但是如果jsp文件被改动了.肯定需要重新被翻译的.
JSP三个指令
<@ 指令名称 属性名=”属性值”>
page指令 - 一定要出现在jsp文件的顶部位置.但是允许出现多次
可以进行导包操作
include指令-静态包含
比如nav.jsp和order.jsp.后者包含了前者.只会被翻译成1个servlet文件.会将俩个jsp文件的内容合并到一块儿之后,一起
被翻译成了一个servlet文件.
先合并再翻译
taglib指令 - 用来引入jstl的 - 在项目中能够被频繁使用到的.
JSP九大常用的内置对象
- out对象 - 输出内容到网页
- request对象 - 把数据放入到request作用域中.
- pageContext - 来获取其他对象,默认的jsp中最小作用域对象.
- session对象
- application对象
JSP动作
jsp的一些常用标签,只是为了替代代码块的写法.
- jsp:useBean 初始化对象
- jsp:setProperty 设置对象属性值
- jsp:getProperty 获取对象属性值
- jsp:include 动态包含
- jsp:forward 转发
动态包含
jsp:include - 转发包含[servlet的称呼] , 动态包含[jsp的称呼]
当前文件以及包含的那个文件 - 都会各自被翻译成各自的servlet.java,然后再被编译
会生成俩个servlet文件
程序执行的过程中,将页面的结果包含过来.
笔试题
静态包含和动态包含有什么区别?
参考上面的
动态包含是可以进行传参的.但是静态包含是不会涉及到传参.
动态包含/静态包含都是可以共享request作用域中的数据
JSP-EL表达式
EL表达式只能获取到作用域中的数据.
访问对象以及对象的属性
可以访问对象的关联的对象[单个]的属性
public class User{ private UserInfo userInfo; } public class UserInfo{ private Integer id; } ${user.userInfo.id}
支持运算符
支持获取url后面的参数
${param.key}
集合[list]以及map集合
注意点:map的key如果是数字,推荐使用Long
操作cookie
JSTL
JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能。
JSTL支持通用的、结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签。 除了这些,它还提供了一个框架来使用集成JSTL的自定义标签。
根据JSTL标签所提供的功能,可以将其分为5个类别。
- 核心标签 √
- 格式化标签 √ - 日期和数字
- SQL 标签
- XML 标签
- JSTL 函数
步骤
导入依赖
javax.servlet jstl
- 在jsp文件中通过taglib指令来导入标签
SpringBoot-发送邮箱
选择一个可用的邮箱 - 比如qq - 设置 - 账户
开启服务
![]()
- 得到密钥 - tihfescwkqxebbii
单独测试邮箱的发送验证码的功能
4-1. 导入依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency>
springboot的配置文件 - 激活的是application-dev.yml文件进行邮箱的配置
spring: mail: host: smtp.qq.com username: 849962874@qq.com password: tihfescwkqxebbii default-encoding: UTF-8
单元测试
package tech.aistar.mail; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.mail.SimpleMailMessage; import org.springframework.mail.javamail.JavaMailSender; /** * 本类用来演示: * * @author: success * @date: 2021/9/28 2:13 下午 */ @SpringBootTest public class MailTest { @Autowired private JavaMailSender mailSender; @Test public void testSendMsg(){ //需要使用一个对象来封装关于邮件的信息 //发送方,收件方,标题,主题内容等 SimpleMailMessage msg = new SimpleMailMessage(); msg.setFrom("849962874@qq.com");//发送方 - 应该和application-dev.yml文件中的username保持一致 msg.setSubject("阿里干爹");//标题 //验证码是随机的10000 ~ 99999 int n = (int) (Math.random()*90000+10000); msg.setText("验证码:"+n); msg.setTo("849962874@qq.com");//登录页面输入的 - 收件方 //真正的发送 mailSender.send(msg); System.out.println("发送ok"); } }