SpringBoot框架2


三大作用域

  1. request作用域 - HttpServletRequest - 一次请求一次响应

  2. session作用域 - HttpSession - 一次会话期间[从浏览器打开 - 浏览器关闭]

  3. application作用域 - 从服务器打开到服务器关闭.

    也叫做ServletContext作用域

HttpServletRequest

将所有来自于客户端的所有的请求的数据全部封装到了这个HttpServletRequest对象.

session的会话跟踪机制

cookie来管理session的.

http协议 - 无状态的协议.server端是不能够判断出俩次请求是来自于同一个客户端

管理的过程

  1. http://192.168.186.216:8081/boot/session/set?name=admin - 控制层方法中提供了HttpSession

    那么就会在tomcat内部为这个客户端开辟一块区域[session空间],并且每个session空间都会拥有唯一的一个id - JSESSIONID

  2. server端创建一个一个cookie对象[容器],把这个JSESSIONID放入到cookie对象中.然后通过响应头信息将这个cookie响应该客户端,并且cookie保存在客户端

  1. http://192.168.186.216:8081/boot/session/get 再次请求的时候,通过请求头信息将存有jsssionid的cookie一起发送给了server端

  1. 当前请求到达server端,服务器就会从请求头信息中的cookie里面拿到jessionid.根据这个jessionid来定位到它对应的session空间.

JSP技术

  1. java server page - java服务器端页面 - jsp运行在server端,通常在运行在tomcat服务器.
  2. tomcat服务器可以解析jsp页面
  3. jsp叫做动态网页技术,html叫做静态网页技术.
  4. jsp的作用可以在html代码中使用jsp标签来书写java代码以及jstl[标准标签库]
  5. jsp主要负责视图层的角色 - 负责展示数据到html页面

JSP三个脚本

  1. 代码块 _jspService方法内部

    <%
      // java代码块
    %>
    
  2. 声明 - _jspService方法外部.

    <%!
      声明 - 定义
    %>
    
  3. 输出 - _jspService方法的内部

    输出内容到网页

    <%= 变量%>
    

JSP的本质

jsp的底层实际上是servlet技术,每个jsp文件经过tomcat中的Jsp解析器,每个Jsp文件解析成servlet程序.

jsp这个文件什么时候会被翻译成servlet程序[.java文件]

  1. 当启动服务器之后,当请求第一次到达这个jsp的时候,才会被翻译成.java文件.
  2. 只要后续的请求过程中,只要jsp文件没有进行任何的改动.都不会重复被翻译.但是如果jsp文件被改动了.肯定需要重新被翻译的.

JSP三个指令

<@ 指令名称 属性名=”属性值”>

  1. page指令 - 一定要出现在jsp文件的顶部位置.但是允许出现多次

    可以进行导包操作

  2. include指令-静态包含

    比如nav.jsp和order.jsp.后者包含了前者.只会被翻译成1个servlet文件.会将俩个jsp文件的内容合并到一块儿之后,一起

    被翻译成了一个servlet文件.

    先合并再翻译

  3. taglib指令 - 用来引入jstl的 - 在项目中能够被频繁使用到的.

JSP九大常用的内置对象

  1. out对象 - 输出内容到网页
  2. request对象 - 把数据放入到request作用域中.
  3. pageContext - 来获取其他对象,默认的jsp中最小作用域对象.
  4. session对象
  5. application对象

JSP动作

jsp的一些常用标签,只是为了替代代码块的写法.

  1. jsp:useBean 初始化对象
  2. jsp:setProperty 设置对象属性值
  3. jsp:getProperty 获取对象属性值
  4. jsp:include 动态包含
  5. jsp:forward 转发

动态包含

jsp:include - 转发包含[servlet的称呼] , 动态包含[jsp的称呼]

  1. 当前文件以及包含的那个文件 - 都会各自被翻译成各自的servlet.java,然后再被编译

    会生成俩个servlet文件

  2. 程序执行的过程中,将页面的结果包含过来.

笔试题

静态包含和动态包含有什么区别?

参考上面的

动态包含是可以进行传参的.但是静态包含是不会涉及到传参.

动态包含/静态包含都是可以共享request作用域中的数据

JSP-EL表达式

  1. EL表达式只能获取到作用域中的数据.

  2. 访问对象以及对象的属性

  3. 可以访问对象的关联的对象[单个]的属性

    public class User{
       private UserInfo userInfo;
    }
    public class UserInfo{
      private Integer id;
    }
    
    ${user.userInfo.id}
    
  4. 支持运算符

  5. 支持获取url后面的参数

    ${param.key}
    
  6. 集合[list]以及map集合

    注意点:map的key如果是数字,推荐使用Long

  7. 操作cookie

JSTL

JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能。

JSTL支持通用的、结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签。 除了这些,它还提供了一个框架来使用集成JSTL的自定义标签。

根据JSTL标签所提供的功能,可以将其分为5个类别。

  • 核心标签
  • 格式化标签 √ - 日期和数字
  • SQL 标签
  • XML 标签
  • JSTL 函数

步骤

  1. 导入依赖

    
      javax.servlet
      jstl
    
    
  1. 在jsp文件中通过taglib指令来导入标签

SpringBoot-发送邮箱

  1. 选择一个可用的邮箱 - 比如qq - 设置 - 账户

  2. 开启服务

  1. 得到密钥 - tihfescwkqxebbii
  1. 单独测试邮箱的发送验证码的功能

    4-1. 导入依赖

     <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-mail</artifactId>
    </dependency>
    
  2. springboot的配置文件 - 激活的是application-dev.yml文件进行邮箱的配置

    spring:
      mail:
        host: smtp.qq.com
        username: 849962874@qq.com
        password: tihfescwkqxebbii
        default-encoding: UTF-8
    
  3. 单元测试

    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");
        }
    }
    

文章作者: 码农耕地人
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 码农耕地人 !
  目录