java web

所需技术

java web_第1张图片

 web标准组成

html:负责网页的结构(页面元素和内容)

css:负责网页的表现(页面元素的外观,位置等页面样式,如:颜色,大小等)

javasc:负责网页行为(交互效果)

java web_第2张图片

 web前端开发

java web_第3张图片

html,css学习
html:超文本标记语言

超文本:超越了文本的限制,比普通文本根强大

标记语言:由标签构成的语言

css

层叠样式表,用于控制页面布局

css标签可进入w3school官方文档查看

html快速入门

java web_第4张图片

HTML结构(Hypertext Markup Language)是一种用于创建网页和其他信息展示的标记语言。它由HTML标签和文本组成,标签用于定义文档的结构和内容,文本则是实际内容的主体。

HTML结构由以下几个部分组成:

  1. 文件声明: <!DOCTYPE html>,用于告诉浏览器使用哪个HTML版本。

  2. html 标签: <html>,用于定义文档的根元素。

  3. head 标签: <head>,用于定义文档的头部,包含元数据和其他信息。

  4. title 标签: <title>,用于定义文档的标题。

  5. body 标签: <body>,用于定义文档的主体,包含文档显示的所有内容。

  6. header 标签: <header>,用于定义文档的页眉,通常包含网站的logo和导航菜单等。

  7. nav 标签: <nav>,用于定义文档的导航菜单。

  8. section 标签: <section>,用于定义文档中的节或段落。

  9. article 标签: <article>,用于定义独立的文章或故事。

  10. aside 标签: <aside>,用于定义文档的侧边栏。

  11. footer 标签: <footer>,用于定义文档的页脚。

  12. div 标签: <div>,用于定义文档中的区块,通常用于布局。

HTML结构可以根据需要添加其他标签和属性来实现不同的功能和样式。

java web_第5张图片

vs code安装使用

安装:

  1. 下载Visual Studio Code安装程序:https://code.visualstudio.com/Download

  2. 运行安装程序,按照提示完成安装即可。

使用:

  1. 打开Visual Studio Code,可以直接从开始菜单中打开。

  2. 在打开的界面中,可以选择打开文件夹或者文件。也可以通过终端(Terminal)命令行进入到指定文件夹,输入“code . ”命令打开Visual Studio Code。

  3. 编写代码:支持多种编程语言的代码编写,如C、C++、Java、Python、JavaScript等等。

  4. 调试代码:Visual Studio Code支持多种语言的调试,可以通过调试工具检查代码逻辑、变量的值等。

  5. 安装插件:Visual Studio Code支持自定义插件,用户可以根据自己的需要安装相应的插件。可以通过菜单栏中的“扩展(Extensions)”查看和安装插件。

  6. 快捷键:Visual Studio Code支持多种快捷键,可以通过菜单栏中的“帮助(Help)”查看快捷键列表。

  7. 其他功能:Visual Studio Code还提供了很多其他的功能,如代码折叠、代码格式化、自动补全等等。用户可以根据自己的需要使用这些功能。

 html基础标签&样式

java web_第6张图片

java web_第7张图片 标题样式 

java web_第8张图片

  1.  行内样式:

    旅游热点

  2. 内嵌样式:

  3. 外联样式

        h1{

    color: red;

}


选择器

HTML选择器是CSS中用来选择HTML元素的方法。HTML选择器可以通过元素的标签名、类名、ID、属性、伪类和伪元素等多种方式来匹配元素。

HTML选择器分类如下:

  1. 标签选择器:使用HTML标签名作为选择器,可以匹配所有该标签的元素,如p、div等。

  2. 类别选择器:使用CSS类名作为选择器,只匹配具有指定类名的元素,如.class。

  3. ID选择器:使用CSS ID作为选择器,只匹配具有指定ID的元素,如#id。(id名称不能重复,优先级最高)

  4. 属性选择器:匹配具有指定属性的元素,如[type="text"]。

  5. 伪类选择器:匹配一些特定状态下的元素,如:hover、:active等。

  6. 伪元素选择器:匹配元素的特定部分,如::before、::after等。

颜色表示形式
  1. 关键字:预定义的颜色名,如red...
  2. rgb表示法:红绿蓝三原色。每项取值范围:0-255,如:rgb(0,0,0)
  3. 十六进制表示法:#开头,将数字转换成十六进制表示。如:#000000...
文本标签

HTML(HyperText Markup Language)是一种用于创建网页的标记语言,它使用标签来描述网页内容的各个部分。

以下是一些常见的HTML标签及其用途:

  1. <html>:定义HTML文档的根元素
  2. <head>:定义文档头部,其中包含了一些元数据信息,如文档标题、字符集等
  3. <title>:定义文档的标题,通常会显示在浏览器的标签栏中
  4. <body>:定义文档的主体部分,包含了页面的内容
  5. <h1> ~ <h6>:定义标题,<h1> 最大,<h6> 最小
  6. <p>:定义段落,可以包含文本、图像、链接等
  7. <img>:定义图像,需要指定图像的源文件(src)、替代文本(alt)等属性
  8. <a>:定义链接,需要指定链接的目标(href)、链接文本等属性
  9. <ul><ol><li>:定义无序列表、有序列表和列表项
  10. <table>:定义表格,需要使用 <tr><td> 等标签来指定表格的行、列和单元格
  11. <form>:定义表单,可以包含输入控件,如文本框、单选框、复选框等
  12. <input>:定义输入控件,在 <form> 中使用,需要指定类型(type)和名称(name)等属性
  13. <textarea>:定义文本域,用于输入大段文本,如评论、简介等
  14. <button>:定义按钮,通常与 JavaScript 一起使用来实现交互功能
  15. <div>:定义文档中的一个区块,通常用来分组其他元素
  16. <span>:定义文档中的一个内联区块,通常用来修饰文本(组合行内元素,没有语义)

以上仅是 HTML 中的一部分标签,完整列表可以在 W3Schools 中查看。

字体标签

HTML字体标签是一种用来定义文本字体、大小、颜色等样式的标签。以下是常用的HTML字体标签:

  1. :用于定义文本字体、大小、颜色等样式。可以通过属性指定字体、大小、颜色等样式。

  2. :用于定义加粗效果。默认字体为粗体。

  3. :用于定义强调效果。默认字体为斜体。

  4. :用于定义下划线效果。

  5. :用于定义删除线效果。

  6. :分别用于定义上标和下标效果。

  7. -

    :用于定义标题。h1最大,h6最小,依次递减。

示例:

这是一段红色、Arial字体大小为18px的文本。

这是加粗的文本 这是斜体的文本 这是下划线的文本 这是删除线的文本 210等于1024 H1标签:这是一级标题 H2标签:这是二级标题
超链接

HTML超链接标签是标签,用于创建一个超链接。它的语法如下:

链接文本

其中,href属性指定了链接的地址,链接文本则是用户点击链接时看到的文本内容。

示例:

创建一个指向百度首页的链接:

百度首页

点击「百度首页」,会跳转到百度首页。

java web_第9张图片

视频标签和音频标签

HTML中的视频标签和音频标签分别为<video><audio>标签。

视频标签(<video>

语法:


其中,src属性指定了视频文件的地址,widthheight属性指定了视频播放器的宽度和高度,controls属性用于显示视频控制按钮。

示例:


音频标签(<audio>

语法:


其中,src属性指定了音频文件的地址,controls属性用于显示音频控制按钮。

示例:


需要注意的是,视频和音频文件格式有很多种,不同的格式支持情况也有所不同。在实际使用中,最好提供多种格式的文件,以便于不同浏览器和设备能够正常播放。

换行标签

HTML换行标签是 <br>。在 HTML 中,<br> 表示换行符,可以在段落中插入一个简单的换行符,而不是分段。

例如:

这是第一行。
这是第二行。

上面的代码将生成一个段落,其中一行包含两个句子,这两个句子之间用换行符分隔。

需要注意的是,<br> 标签是一个单标签,不需要闭合标签。

空格

在 HTML 中,空格占位符可以使用   实现。实际上,HTML 中默认是忽略连续的空格的,可以使用空格占位符来强制浏览器显示空格。这对于需要在 HTML 中控制布局的情况特别有用。

例如,如果您希望在段落中有一些额外的间距而不想使用 CSS,请使用空格占位符:

这是一些        额外的间距。

在上面的例子中,我们在“一些”和“额外的间距”之间插入了七个空格占位符,以便在这些单词之间添加一些额外的间距。

需要注意的是,  是一个实体名称,而不是一个标签,因此不能使用   或其他类似的形式。

div标签

是HTML中最基本的容器标签,其作用是为一组相关的元素提供容器,用于组织页面内容的布局结构。同时,
标签也可以用作CSS样式的容器,方便开发者为其内部元素应用相同的样式。

标签没有特定的语义含义,具有很强的通用性和灵活性。HTML中的大部分元素都可以放置在
标签内部,如文本、图片、视频、音频等。

标签的使用范例:

这是一个标题

这是一段文字

图片

上述代码中,

标签作为一个容器,包含了一个标题、一段文字和一张图片。开发者可以为这个
容器设置样式,例如设置其宽度、背景颜色、边框等。

span标签

标签是HTML中用于标记短小文本片段的标签,相较于

标签,标签更为精细和细致,其通常用来对文本进行局部样式设置、添加超链接、标记颜色、标记语义等操作。

标签可用于内联文本,例如,在一段文本中用于标记一个词或一个短语。与

标签不同,标签不会自动换行,而是将内嵌的内容作为一整个行内元素展示出来。

例如:

这是一段包含重要信息的文本。

上述代码中,标签用于对“重要信息”一词进行标记,可以方便地为其设置样式,例如加粗、变色、添加下划线等效果。

表格标签

HTML中用于创建表格的主要标签有以下几个:

  1. :定义一个表格。

  2. :定义表格中的一行。

  3. :定义表格的头部。

  4. :定义表格的主体部分。

  5. :定义表格的脚注部分。

    :定义行中的一个单元格。

  6. :定义行中的一个表头单元格。

  7. :定义表格的标题。

  8. 标签是创建表格的基础标签,其内部必须包含至少一个标签,每个标签必须包含至少一个
    标签,而标签用于定义表格的表头,会自动加粗并居中显示。

    例如,下面是一个包含表头、主体和脚注部分的简单表格:

    2019年度休假情况
    姓名 职位 年假 事假
    张三 经理 15天 2天
    李四 主管 12天 3天
    总计 27天 5天

    java web_第10张图片

    表单标签

    HTML中用于创建表单的主要标签有以下几个:

    1. :定义一个表单,用于向服务器发送用户输入的数据。

    2. :定义表单中的输入控件,可以输入文本、选项、按钮等。


    3. 表单标签-表单项

      java web_第12张图片

      
          
      姓名:
      密码:
      性别
      Java python
      邮箱:
      数字输入框
      定义文件上传
      学历

      java web_第13张图片

      css样式-首行缩进

      在 CSS 中实现首行缩进的方法有两种:使用 text-indent 属性和使用 padding-left 属性。

      使用 text-indent 属性:

      语法:

      selector {
        text-indent: length;
      }
      

      其中,selector 为要应用样式的元素选择器,length 为缩进距离,可以是像素值、百分比、em 等长度单位。如果缩进距离为负数,则表示向左侧缩进。

      示例:

      p {
        text-indent: 2em;
      }
      

      上面的样式将会使 <p> 元素的首行缩进 2 个字符的宽度。

      使用 padding-left 属性:

      语法:

      selector {
        padding-left: length;
        text-indent: -length;
      }
      

      其中,selector 为要应用样式的元素选择器,length 为缩进距离,可以是像素值、百分比、em 等长度单位。如果缩进距离为负数,则表示向左侧缩进。需要注意的是,为了使首行缩进生效,需要将 text-indent 属性设置为负数的同等距离。

      示例:

      p {
        padding-left: 2em;
        text-indent: -2em;
      }
      

      上面的样式将会使 <p> 元素的首行缩进 2 个字符的宽度。这种方法还可以通过设置不同的 padding-left 值来实现不同级别的缩进。

       盒子模型

      CSS盒子模型是指在网页中每个元素都是一个矩形的盒子,由四条边和四个角组成。CSS盒子模型包括以下几个部分:

      1. 内容区(Content):元素的内容,比如文本、图片等,属于内容的展示部分。
      2. 填充区(Padding):紧贴内容区的区域,属于元素内部的空白区域。
      3. 边框(Border):包围着填充区的边框线,可以设置边框的样式、宽度和颜色等属性。
      4. 外边距(Margin):位于填充区和周围元素之间的空白区域。

      上述四个部分形成了一个完整的盒子模型,可以通过CSS设置它们的各种属性,包括宽度、高度、边框样式、内外边距等等。盒子模型的尺寸计算方式为:元素的宽度 = 左右内边距 + 左右边框 + 左右外边距 + 内容区宽度,元素的高度则是上下内边距 + 上下边框 + 上下外边距 + 内容区高度。

      java web_第14张图片

      java web_第15张图片

       java web_第16张图片

      CSS盒子模型的标准模型和IE盒子模型的区别在于,标准模型的宽高只包括内容区,而IE盒子模型的宽高包括了填充和边框。在CSS中采用标准盒子模型,可以通过box-sizing属性控制。

      JavaScript

      跨平台面向对象的脚本语言

      js的引入方式

      JavaScript可以通过以下方式引入:

      1. 内联方式:直接在网页中嵌入JavaScript代码,例如:

        
        

      2. 外部引用方式:将JavaScript代码写入一个单独的文件中,然后在HTML文件中通过<script>标签引用该文件,例如:

        
        

        这里的path/to/javascript.js是JavaScript代码所在的路径。

      3. 模块导入方式:通过<script type="module">标签引入JavaScript模块,例如:

        
        

        此时,javascript.js文件必须是符合ES6模块标准的JavaScript代码。

      JS基础语法
      书写语法

      1.区分大小写

      2.每行结尾的分号可有可无

      注释:

              单行注释://注释内容

              多行注释:/*注释内容*/

      大括号表示代码块

      //判断
      if(count==3){
         alert(count);
      }

      输出语句

      java web_第17张图片
      变量

      用var来声明变量,js是一门弱类型语言,变量可以存放不同类型的值。

      var a = 20;
      a ="张三";

       变量名需要遵循如下规则:

              组成字符可以是任何字母,数字,下划线(_)或者美元符号($)

              数字不能开头

              建议使用驼峰命名

      注意:1.ES6新增了let关键字来定义变量,它的用法类似于var,但是所声明的变量,只在let关键字所在的代码块内有效,且不允许重复声明。

                   2.ES6新增const关键字,用来声明一个只读的变量,一旦声明,常量的值就不能改变。

        
      数据类型,运算符,流程控制语句

      原始类型和引用数据类型

      原始类型:

              number:数字(整数,小数,Nat(Not a Number))

              string:字符串,单双引皆可

              boolean:布尔,true,false

              null:对象为空

              undefined:当声明的变量未初始化时,该变量的默认值是undefined

      使用typeof运算符可以获取数据类型:

       

      运算符

      java web_第18张图片

       java web_第19张图片

      java web_第20张图片

      java web_第21张图片

      js函数

      执行特定任务的代码块

      定义需通过function关键字来定义,语法为:

      例如:

       function functionName(a,b){
              //要执行的代码
              return a+b;
          }

      注意:形式参数不需要类型,因为js是弱类型语言。返回值也不需要定义类型,可以在函数内部直接使用return返回即可

      调用:函数名称(实际参数列表)

        
      String

      java web_第24张图片

       java web_第25张图片

       
          
      JSON

      自定义对象

      java web_第26张图片

       

      JSON介绍

      java web_第27张图片

      JSON基础语法

       java web_第28张图片

      BOM

      java web_第29张图片

       Window

      java web_第30张图片

       location

      java web_第31张图片

      DOM

      java web_第32张图片

      java web_第33张图片

      获取对象

      java web_第34张图片

      js事件监听

      事件:发生在HTML上的事情;如:按钮被点击了,鼠标移动到元素上,按下键盘

      事件监听:JavaScript可以在事件被侦测到时执行代码

      事件绑定

      java web_第35张图片

      
          
          
      
          
      

      常见事件

      java web_第36张图片

       Vue

      是一套前端框架,免除原生JS中的DOM操作,简化书写。基于MVVM思想,实现数据双向绑定

      官网:https://v2.cn.vuejs.org/

      MVVM

      java web_第37张图片

      MVVM是一种软件架构模式,包括三个核心组件:Model、View、ViewModel。

      • Model:即数据模型,是应用程序中处理数据和业务逻辑的部分。它从数据源获取数据、验证数据并对其进行修改。
      • View:即用户界面,是应用程序中处理交互的部分,它负责向用户展示数据并响应用户的操作。
      • ViewModel:是连接 Model 和 View 的核心组件,它负责将 Model 中的数据转换成View可以使用的数据,并将用户的操作转换成Model可以理解的操作。同时,ViewModel还负责将数据变更通知给View,从而保证View与Model保持同步。

      MVVM的核心思想是数据绑定,即通过数据绑定,将ViewModel中的数据与View中的UI元素进行绑定,实现数据的自动更新。这样,当ViewModel中的数据发生变化时,相应的UI元素也会自动更新,无需手动操作。

      MVVM的优点有:

      • 分离关注点:通过将数据处理、业务逻辑和UI元素分离,MVVM能够使得应用程序的不同部分之间关注点更加清晰,代码更容易维护和扩展。
      • 可测试性:ViewModel中的数据和业务逻辑可以进行单元测试,View中的UI元素也可以进行UI测试,从而保证应用程序的质量。
      • 可重用性:由于MVVM将数据和UI元素分离,因此可以更加容易地将ViewModel重用于不同的View上。

      MVVM是目前较为流行的前端框架(如Vue.js、Angular.js等)所使用的架构模式,也逐渐受到后端开发者的青睐并应用于后端开发中。

      快速入门

      1.新建HTML页面,引入Vue.jswenjian

      2.在JS代码区域,创建Vue核心对象,定义数据模型

      3.编写视图

      
      
      
          
          
          
          Vue快速入门
          
      
      
         
      {{ message }}
      插值表达式

      形式:{{表达式}}

      内容可以是:

              变量,三元运算符,函数调用,算数运算

      Vue常用指令

      java web_第38张图片

      v-bind和v-model

      v-bind

      为HTML标签绑定属性值,如设置href,css样式等

      书写格式:

      <标签 v-bind:属性名="元素">

       例如:

      星期天
      也可简写为:
      星期天

      v-model

      在表单元素上创建双向绑定数据

      书写格式

      
      
      
          
          
          
          Document
          
      
      
          
      
          
      
      
      

      注意:通过v-bind或者v-model绑定的变量,必需在数据模型中声明

      v-on

      为HTML标签绑定事件

               
              
      methods:{
                      h:function(){
                          alert('我被点击了')
                      }
                  }
      
          
      v-if,v-show,v-else和v-else-if

      java web_第39张图片

      年龄经判定,为: 年轻人(35岁以下) 中年人(35-60) >老年人(60及以上)
      年龄经判定,为: 年轻人(35岁以下) 中年人(35-60) >老年人(60及以上)
       v-for

      列表渲染,便案例容器的元素或者对象的属性

      java web_第40张图片

       Vue的生命周期

      java web_第41张图片

      
          

      java web_第42张图片

      Ajax 

      java web_第43张图片

      同异步请求 

      java web_第44张图片

       原生Ajax
      1. 准备数据地址
      2. 创建XMLHttpRequest对象:用于和服务器交换数据
      3. 向服务器发送请求
      4. 获取服务器相应数据

      具体可以去W3c查看

      Axios
      介绍:Axios对原生的Ajax进行了封装,简化书写,快速开发
      官网:https://www.axios-http.cn/
      快速入门

      java web_第45张图片

      可简化为:

      java web_第46张图片

      前后端分离开发 

      java web_第47张图片

      YAPI 

      YAPI是高效,易用,功能强大的api管理平台,旨在为开发,产品,测试人员提供更优雅的接口管理服务

      地址:http://yapi.smart-xwork.cn/

      前端开发工程化

      java web_第48张图片

       环境准备
      vue-cli

      java web_第49张图片

       安装NodeJS

      官网下载

      java web_第50张图片

      配置

       完成

      v-cli安装

      java web_第51张图片

       配置淘宝镜像全局配置

      下载vue-cli脚手架

      安装完成

      Vue项目简介
      vue项目创建

      java web_第52张图片

       图形化界面打不开解决方案:关于Vue ui 的没反应、报错问题解决总结_vue.js_脚本之家

                                                      npm install -g @vue/cli 常见问题_我是PHP小白的博客-CSDN博客

      npm 下载vue-cli出错npm安装报错(npm ERR! code EPERM npm ERR! syscall mkdir npm ERR! path C:\Program Files\nodejs\node_ca...)_晴雷的博客-CSDN博客

      继承终端下载

      1.

      vue create vue-test

      2.

      java web_第53张图片

       创建完成

      java web_第54张图片

      结构

      java web_第55张图片 项目启动

      java web_第56张图片

      端口号配置
      java web_第57张图片 开发流程

      java web_第58张图片

      java web_第59张图片

      异常处理

      java web_第60张图片

       原因node.js版本过低,解决方法npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! [email protected] dev: `vite` npm ERR! Exit statu_礼貌而已的博客-CSDN博客

       Element

      Vue的组件库Element

      java web_第61张图片

      快速入门 

      java web_第62张图片

      
      
      
      
      
      
      

       java web_第63张图片

      常见组件
      
      
      
      
      
      
      Vue路由
      介绍

      java web_第64张图片

       安装

      java web_第65张图片

      打包部署 
      打包

      java web_第66张图片

       集成终端打包命令:

       生成一个dist文件夹即可

      部署

      java web_第67张图片

      java web_第68张图片

      异常
       端口被占用

      查看80端口被谁占用

       解决方案:

      修改nginx端口

      java web_第69张图片

       访问

      java web_第70张图片

       web后端开发

      基础技术

      java web_第71张图片

      Maven

       什么是maven?

      是一款用于管理和构建Java项目的工具

       maven的作用

      java web_第72张图片

       依赖管理

      管理Java相关的jar包

      统一项目结构

      java web_第73张图片

      项目构建 

      java web_第74张图片

       Maven概述
      介绍

      java web_第75张图片

      java web_第76张图片

      java web_第77张图片

       安装

      java web_第78张图片

       java web_第79张图片

      IDEA集成Maven
      配置Maven环境

      java web_第80张图片

       创建Maven项目

      java web_第81张图片

      java web_第82张图片

       导入Maven

      java web_第83张图片

      java web_第84张图片 依赖管理
      依赖配置

      java web_第85张图片

       依赖传递

      java web_第86张图片

       java web_第87张图片

      依赖范围
       java web_第88张图片
       Maven生命周期

      java web_第89张图片

      java web_第90张图片

      java web_第91张图片

      java web_第92张图片

      springBoot web后端开发

      官网:http://spring.io

      spring提供了若干个子项目,每个项目用于完成特定的功能,spring boot可以帮助我们非常快速的构架应用程序,简化开发,提高效率

      spring boot web入门

      案例:

      java web_第93张图片

      java web_第94张图片java web_第95张图片 

      HTTP协议
      HHTP-概述

      java web_第96张图片

      HTTP协议-请求协议
       java web_第97张图片

       java web_第98张图片

       

       HTTP响应协议

      java web_第99张图片

       状态码

      java web_第100张图片

      java web_第101张图片

      Web服务器-Tomcat
      简介 

      java web_第102张图片

      Tomcat基本是使用

      java web_第103张图片

      java web_第104张图片

      java web_第105张图片

      java web_第106张图片

      spring bootWeb-入门程序解析

      java web_第107张图片

       请求响应

      概述

      java web_第108张图片

      java web_第109张图片

      java web_第110张图片

      请求
      请求响应——Postman 

       简单参数

      java web_第111张图片

      java web_第112张图片

      java web_第113张图片

       java web_第114张图片

      java web_第115张图片

       实体参数

      java web_第116张图片

      java web_第117张图片

       数组集合参数

      java web_第118张图片

      java web_第119张图片

      java web_第120张图片

       日期参数

      java web_第121张图片

      JSON 参数

      java web_第122张图片

      java web_第123张图片

      java web_第124张图片

      路径参数
      java web_第125张图片
      小结
      java web_第126张图片
      响应数据

      java web_第127张图片

      统一响应结果 

      java web_第128张图片

      小结

      java web_第129张图片 

      分层解耦
      三层架构

      java web_第130张图片

       java web_第131张图片

      java web_第132张图片

      java web_第133张图片

       分成解耦

      java web_第134张图片

      java web_第135张图片

      IOC&DI入门 
      @Conponent

      将当前类交给IOC容器管理,成为IOC容器中的bean

      @Autowired

      运行时,IOC容器会提供该类型的bean对像,并取值给该变量---依赖注入

      java web_第136张图片

       java web_第137张图片

      java web_第138张图片

      IOC详解 
      Bean的声明

      java web_第139张图片

      Bean组件扫描 

       DI详解

      java web_第140张图片

       小结

      java web_第141张图片

       数据库

      java web_第142张图片

      java web_第143张图片

      MySQL概述

      安装,配置 

       java web_第144张图片

      java web_第145张图片

      java web_第146张图片

       数据模型
      关系型数据库

      java web_第147张图片

      java web_第148张图片

      SQL简介
      java web_第149张图片
      SQL分类
      java web_第150张图片

      数据库设计-DDL

      数据库

      java web_第151张图片

      创建数据库
      create database javawebtest;
      切换使用数据库
      use javawebtest;
      查看当前使用数据库
       select datdabase();
      查看所有数据库
      show databases;
      查看数据库中所有表
      show tables;
      删除数据库
       drop database javawebtest;
      图形化工具

      java web_第152张图片

       java web_第153张图片

      java web_第154张图片

      java web_第155张图片

       表结构操作-DDL
      创建

      java web_第156张图片

      -- 创建数据库
      create database javawebtest;
      -- 创建表结构
      create table tb_user(
          -- 唯一标识 auto_increment:自增长
          id int primary key auto_increment comment 'ID,唯一标识',
          -- 非空且唯一
          username varchar(20) not null unique comment '用户名',
          -- 非空
          name varchar(10) not null comment  '姓名',
          age int comment '年龄',
          -- 默认值为男
          gender char(1) default '男' comment '性别'
      )comment '用户表';
      常见的数据类型

      java web_第157张图片

      java web_第158张图片

      java web_第159张图片

      查询 

      java web_第160张图片

      修改 

      java web_第161张图片

      删除 

      java web_第162张图片

       表结构操作-DML

      java web_第163张图片

      添加insert 

      java web_第164张图片

      java web_第165张图片

      更新update 

      java web_第166张图片

       删除delete

      java web_第167张图片

       

       表结构操作-DQL

      java web_第168张图片

      基本查询 

      java web_第169张图片

      条件查询
      java web_第170张图片
      分组查询-聚合函数

      java web_第171张图片

      分组查询
      java web_第172张图片
      排序查询
      java web_第173张图片

      分页查询
      java web_第174张图片

       多表设计

      java web_第175张图片

      一对多
      java web_第176张图片

      java web_第177张图片

       一对一

       多对多

      java web_第178张图片

      多表查询

      java web_第179张图片

      java web_第180张图片

      内连接 

      java web_第181张图片

      外连接
      java web_第182张图片
      子查询
      java web_第183张图片
      标量子查询 

      java web_第184张图片

       列子查询

      java web_第185张图片

      行子查询 

      java web_第186张图片

       表子查询

      java web_第187张图片

      事务 

      java web_第188张图片

      java web_第189张图片

      四大特性
      java web_第190张图片

      索引 

      java web_第191张图片

      java web_第192张图片

      结构
      java web_第193张图片
       B+树

      java web_第194张图片

       语法

      java web_第195张图片

       Mybatis

      java web_第196张图片

       入门

      java web_第197张图片java web_第198张图片 

      配置SQL提示 

      java web_第199张图片

      java web_第200张图片

       JDBC

      java web_第201张图片

      java web_第202张图片

      java web_第203张图片

      数据库连接池
      java web_第204张图片

      java web_第205张图片

      切换数据库连接池
      java web_第206张图片
       lombok

      java web_第207张图片

      
              
                  org.projectlombok
                  lombok
              

       

      MyBatis基本操作

      环境准备

      java web_第208张图片

      java web_第209张图片

      java web_第210张图片

      删除
      @Mapper
      public interface EmpMapper{
      
          //根据ID 删除数据  #{}:mybatis占位符
          @Delete("delete from emp where id="#{id}")
          public void delete(Integer id);
          // public int delete(Integer id);
      
      }
      
      @SpringBootTest
      
      class SpringbootMybatisCrudApplicationTest{
          //声明接口
          @Autowired
          private EmpMapper empMapper;
      
          @Test
          public void testDelete(){
          //int  delete=empMapper.delete(1);
          //System.out.println(delete);
          empMapper.delete(1);
       }
      }
      

       日志输出

      java web_第211张图片

      java web_第212张图片

      SQL执行流程

      java web_第213张图片

      预编译流程java web_第214张图片 
       SQL注入

      java web_第215张图片

       参数占位符

      java web_第216张图片

       添加
      @Mapper
      public interface EmpMapper{
          //新增员工
          //@Insert(insert into emp(username,name,gender,job) values("Tom","汤姆",1,1)
          @Insert(insert into emp(username,name,gender,job) values(#{username},#{name},#{gender},#{job})
          public void insert(Emp emp);
      }
      @SpringBootTest
      
      class SpringbootMybatisCrudApplicationTest{
          //构造员工对象
          Emp emp=new Emp();
          emp.setUsername("Tom");
          emp.setName("汤姆");
          emp.setGender((short)1);
          emp.setJob((short)1);
      
          //执行添加员工信息操作
          empMapper.insert(emp);
      }
      主键返回

      在添加成功后,需要获取数据库数据的主键

      java web_第217张图片

      java web_第218张图片

      @Options(userGeneratedKeya=true,keyProperty="id")
      @Mapper
      public interface EmpMapper{
          //新增员工
          //@Insert(insert into emp(username,name,gender,job) values("Tom","汤姆",1,1)
          @Insert(insert into emp(username,name,gender,job) values(#{username},#{name},#{gender},#{job})
          public void insert(Emp emp);
      }
      @SpringBootTest
      
      class SpringbootMybatisCrudApplicationTest{
          //构造员工对象
          Emp emp=new Emp();
          emp.setUsername("Tom");
          emp.setName("汤姆");
          emp.setGender((short)1);
          emp.setJob((short)1);
      
          //执行添加员工信息操作
          empMapper.insert(emp);
          System.out.println(emp.getId);
      }
      修改
      
      @Mapper
      public interface EmpMapper{
          //修改员工信息
          @Update("update emp set username=#{username},name=#{name},gender=#{gender},job=#{job}")
          public void update(Emp emp);
      }
      
      @SpringBootTest
      
      class SpringbootMybatisCrudApplicationTest{
          //构造员工对象
          Emp emp=new Emp();
          emp.setUsername("Tom");
          emp.setName("汤姆");
          emp.setGender((short)1);
          emp.setJob((short)1);
      
          //修改员工信息
          empMapper.update(emp);
      }
      
      查询
      @Mapper
      public interface EmpMapper{
          //根据ID查询
          @Select("select * from emp where id=#{id} ")
          public Emp getById(Integer id);
      }
      @SpringBootTest
      
      class SpringbootMybatisCrudApplicationTest{
          @Test
          public void testGetById(){
            Emp emp = empMapper.getById(20);
            System.out.println(emp);
       }
      }
      数据封装

      java web_第219张图片

      解决方案
      @Mapper
      public interface EmpMapper{
          //根据ID查询
          //方案一:给字段起别名,让别名与实体类属性一致
          @Select("select id ,username ,name, gender ,job,create_time createTime,update_time  updateTime,dept_id deptId from emp where id=#{1} ")
          public Emp getById(Integer id);
      
          //方案二:通过@Results,@Result注解手动映射封装
          @Results({
              @Result(column="dept_id",property="deptId"),
              @Result(column="create_time",property="updateTime"),
              @Result(column="update_time",property="updateTime"),
          })
          @Select("select * from emp where id=#{id} ")
          public Emp getById(Integer id);
      }
      
      
        在配置文件application.properties中
          #方案三:开启Mybatis的驼峰命名自动映射开关------a_cloumn--------->aCloumn
          mybatis.configuration.map-underscore-to-camel-case=true
      
        在mapper中
          @Mapper
      public interface EmpMapper{
          //根据ID查询
          @Select("select * from emp where id=#{id} ")
          public Emp getById(Integer id);
      }
      
         测试类
          @SpringBootTest
      
      class SpringbootMybatisCrudApplicationTest{
          @Test
          public void testGetById(){
            Emp emp = empMapper.getById(20);
            System.out.println(emp);
       }
      }
      条件查询
      @Mapper
      public interface EmpMapper{
          //条件查询员工
         /* @Select("select * from emp where name=like '%${name}%' and gender=#{gender} and entrydate between #{begin} and #{end} order by update_time desc")
          public List list(String name,short gender,LocalData begin,LocalDate end);
          */
      
          
          //concat:字符串拼接函数
          @Select("select * from emp where name=like concat('%',#{name},'%') and gender=#{gender} and entrydate between #{begin} and #{end} order by update_time desc")
          public List list(String name,short gender,LocalData begin,LocalDate end);
      
          }
       @SpringBootTest
      
          class SpringbootMybatisCrudApplicationTest{
          @Test
          public void List(){
           empMapper.list("张",(short)1,LocalDate.of(2000,1,1),LocalDate.of(2001,2,2))
           System.out.println(empList)
       }
      }

      XML映射文件

      java web_第220张图片

      
      
      
      
      
      
          
          
      

       java web_第221张图片

       java web_第222张图片

       Mybatis动态SQL

      java web_第223张图片

      java web_第224张图片

      
      
      
      
      
      
      

       java web_第225张图片

      java web_第226张图片

      //批量删除员工
      public void deleteByIds(List ids){
          
      }
      
      
      
          delete from emp where id in
          
              #{id}
          
      
      
      @Test
      public void deleteByTds(){
          List ids=Arrays.asList(18,19,20);
          empMapper.deleteByIds(ids);
      }

      java web_第227张图片

      案例

      环境搭建

      java web_第228张图片

      java web_第229张图片

      java web_第230张图片 统一结果封装类
      @Data
      @NoArgsConstructor
      @AllArgsConstructor
      public class Result {
          private Integer code;//响应码,1 代表成功; 0 代表失败
          private String msg;  //响应信息 描述字符串
          private Object data; //返回的数据
      
          //增删改 成功响应
          public static Result success(){
              return new Result(1,"success",null);
          }
          //查询 成功响应
          public static Result success(Object data){
              return new Result(1,"success",data);
          }
          //失败响应
          public static Result error(String msg){
              return new Result(0,msg,null);
          }
      }
       查询

      java web_第231张图片

      EmpController
      @Slf4j//日志输出管理
      @RestController
      public class EmpController{
          @Autowired
          privater EmpService empservice;
          //查询所有数据
          @GetMapping("/emps")
          public Result select(){
              //调用service里面的delete方法,并用一个list集合接收
              List slectList= empservice.select();
              return Result.succes(selectList);
          }
      }
      EmpService
      public interface EmpService(){
          //查询所有
          List select();
      }
      EmpServiceImpl
      @Service
      public class EmpSerViceImpl implements EmpService(){
          @Autorwide
          private EmpMapper empmapper
          //查询所有
          @Override
          public Result select(){
              return empmapper.select();
          }
      }
      EmpMapper
      @Mapper
      publuc interface EmpMapper(){
          //查询所有
          @Select("select * from emp")
          List select();
      }

      java web_第232张图片

      EmpController
      //根据ID删除信息
      @DeleteMapping("/emps/{id}")
      public Result delete(@PathVariable Integer id){
          empservice.delete(id);
          renturn Result.success();
      }
      Service
      void delete(Integer id);
      EmpServiceImpl
      @Override
      public Result delete(Integer id){
          empmapper.deleteById(id);
      }
      EmpMapper
      @Delete("delete from emp where id=#{id}")
      void deleteById(id);
      新增

      java web_第233张图片

      分页查询

      java web_第234张图片

      java web_第235张图片

      java web_第236张图片

      java web_第237张图片 分页查询插件
      java web_第238张图片

      java web_第239张图片

       java web_第240张图片

      分页带条件查询
      java web_第241张图片

       java web_第242张图片

      删除
      java web_第243张图片

      java web_第244张图片

      新增员工

      目录

      所需技术

      ​编辑

       web标准组成

       web前端开发

      html,css学习

      html:超文本标记语言

      css

      html快速入门

      vs code安装使用

       html基础标签&样式

      ​编辑 标题样式 

      选择器

      颜色表示形式

      文本标签

      字体标签

      超链接

      视频标签和音频标签

      换行标签

      空格

      div标签

      span标签

      表格标签

      表单标签

      表单标签-表单项

      css样式-首行缩进

       盒子模型

      JavaScript

      js的引入方式

      JS基础语法

      书写语法

      ​编辑

      变量

      数据类型,运算符,流程控制语句

      js函数

      js对象

      Array

      String

      JSON

      BOM

      DOM

      js事件监听

      事件绑定

      常见事件

       Vue

      MVVM

      快速入门

      插值表达式

      Vue常用指令

      v-bind和v-model

      v-on

      v-if,v-show,v-else和v-else-if

       v-for

       Vue的生命周期

      Ajax 

      同异步请求 

       原生Ajax

      Axios

      介绍:Axios对原生的Ajax进行了封装,简化书写,快速开发

      官网:https://www.axios-http.cn/

      快速入门

      前后端分离开发 

      前端开发工程化

       环境准备

      vue-cli

       安装NodeJS

      v-cli安装

      Vue项目简介

      vue项目创建

      端口号配置

      ​编辑 开发流程

      异常处理

       Element

      快速入门 

      常见组件

      Vue路由

      介绍

       安装

      打包部署 

      打包

      部署

      异常

       端口被占用

       web后端开发

      Maven

       什么是maven?

       maven的作用

       依赖管理

      项目构建 

       Maven概述

      介绍

       安装

      IDEA集成Maven

      配置Maven环境

       导入Maven

      ​编辑 依赖管理

      依赖配置

       依赖传递

      依赖范围

       ​编辑

       Maven生命周期

      springBoot web后端开发

      spring boot web入门

      HTTP协议

      HHTP-概述

      HTTP协议-请求协议

       ​编辑

       HTTP响应协议

      Web服务器-Tomcat

      简介 

      Tomcat基本是使用

      spring bootWeb-入门程序解析

       请求响应

      概述

      请求

      请求响应——Postman 

       简单参数

       实体参数

       数组集合参数

       日期参数

      JSON 参数

      路径参数

      ​编辑

      小结

      ​编辑

      响应数据

      统一响应结果 

      小结

      分层解耦

      三层架构

       ​编辑

       分成解耦

      IOC&DI入门 

      @Conponent

      @Autowired

      IOC详解 

      Bean的声明

      Bean组件扫描 

       DI详解

       数据库

      MySQL概述

      安装,配置 

       数据模型

      关系型数据库

      SQL简介

      ​编辑

      SQL分类

      ​编辑

      数据库设计-DDL

      数据库

      图形化工具

       表结构操作-DDL

      创建

      常见的数据类型

      查询 

      修改 

      删除 

       表结构操作-DML

      添加insert 

      更新update 

       删除delete

       表结构操作-DQL

      基本查询 

      条件查询

      ​编辑

      分组查询-聚合函数

      分组查询

      ​编辑

      排序查询

      ​编辑

      分页查询

      ​编辑

       多表设计

      一对多

      ​编辑

       一对一

       多对多

      多表查询

      内连接 

      外连接

      ​编辑

      子查询

      ​编辑

      标量子查询 

       列子查询

      行子查询 

       表子查询

      事务 

      四大特性

      ​编辑

      索引 

      结构

      ​编辑

       B+树

       语法

       Mybatis

       入门

      配置SQL提示 

       JDBC

      数据库连接池

      ​编辑

      切换数据库连接池

      ​编辑

       lombok

      MyBatis基本操作

      环境准备

      删除

       日志输出

      SQL执行流程

      预编译流程​编辑 

       SQL注入

       参数占位符

       添加

      主键返回

      修改

      查询

      数据封装

      解决方案

      条件查询

      XML映射文件

       Mybatis动态SQL

      ​编辑

      案例

      环境搭建

      ​编辑 统一结果封装类

       查询

      EmpController

      EmpService

      EmpServiceImpl

      EmpMapper

      EmpController

      Service

      EmpServiceImpl

      EmpMapper

      新增

      分页查询

      ​编辑 分页查询插件

      ​编辑 

      分页带条件查询

      ​编辑 

      删除

      ​编辑 

      文件上传​编辑 


      java web_第245张图片

      java web_第246张图片

      文件上传java web_第247张图片 java web_第248张图片

      java web_第249张图片

      本地存储 
      @RestController
      @Slf4j
      public class UploadController {
          @PostMapping("/upload")
          public Result upload(String name, Integer age, MultipartFile image) throws Exception {
              log.info("上传文件:"+name+age+image);
      
              //获取上传文件名
              String originalFilename = image.getOriginalFilename();
              //构造唯一的文件名(不能重复)-uuid(通用唯一识别码)
              int index = originalFilename.lastIndexOf(".");
              String extname = originalFilename.substring(index);
              String newFileName= UUID.randomUUID().toString()+extname;
              //将上传文件保存到本地
              image.transferTo(new File("D:\\项目\\MavneTest\\imager"+newFileName));
              return Result.success();
          }
      }

      java web_第250张图片

      java web_第251张图片

      #配置单个文件上传大小限制
      spring.servlet.multipart.max-file-size=10MB
      #单个请求最大大小限制(一次请求可以上传多个文件)
      spring.servlet.multipart.max-request-size=100MB

      java web_第252张图片

      阿里云存储oss

      java web_第253张图片

       java web_第254张图片

       java web_第255张图片

      java web_第256张图片

      java web_第257张图片

       private AliOSSUtils aliOSSUtils;
      
          @PostMapping("/upload")
          public Result upload(MultipartFile image) throws IOException {
              log.info("文件上传");
              //获取对象存储OSS文件上传
              String upload = aliOSSUtils.upload(image);
              log.info("文件上传,请求url为"+upload);
      
              return Result.success(upload);
      
          }
      
      package com.example.tlias.utils;
      
      import com.aliyun.oss.OSS;
      import com.aliyun.oss.OSSClientBuilder;
      import org.springframework.stereotype.Component;
      import org.springframework.web.multipart.MultipartFile;
      import java.io.*;
      import java.util.UUID;
      
      /**
       * 阿里云 OSS 工具类
       */
      @Component
      public class AliOSSUtils {
      
          private String endpoint = "https://oss-cn-beijing.aliyuncs.com";
          private String accessKeyId = "自己的ID";
          private String accessKeySecret = "自己的Secret";
          private String bucketName = "bucketName";
      
          /**
           * 实现上传图片到OSS
           */
          public String upload(MultipartFile file) throws IOException {
              // 获取上传的文件的输入流
              InputStream inputStream = file.getInputStream();
      
              // 避免文件覆盖
              String originalFilename = file.getOriginalFilename();
              String fileName = UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf("."));
      
              //上传文件到 OSS
              OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
              ossClient.putObject(bucketName, fileName, inputStream);
      
              //文件访问路径
              String url = endpoint.split("//")[0] + "//" + bucketName + "." + endpoint.split("//")[1] + "/" + fileName;
              // 关闭ossClient
              ossClient.shutdown();
              return url;// 把上传到oss的路径返回
          }
      
      }
      
      修改员工
      查询,实现数据回显

      java web_第258张图片

      修改员工

      java web_第259张图片

      配置文件 

      java web_第260张图片

      java web_第261张图片

      java web_第262张图片

       yml配置文件

      java web_第263张图片

      java web_第264张图片

       java web_第265张图片
      常见的yml格式

       java web_第266张图片

      @ConfigurationProperties
      java web_第267张图片

      java web_第268张图片

      java web_第269张图片

       登录认证
      登录功能

      java web_第270张图片

      package com.example.tlias.controller;
      
      import com.example.tlias.pojo.Emp;
      import com.example.tlias.pojo.Result;
      import com.example.tlias.service.EmpService;
      import lombok.extern.slf4j.Slf4j;
      import org.springframework.beans.factory.annotation.Autowired;
      import org.springframework.web.bind.annotation.PostMapping;
      import org.springframework.web.bind.annotation.RequestBody;
      import org.springframework.web.bind.annotation.RestController;
      
      @Slf4j
      @RestController
      public class loginController {
      
          @Autowired
          private EmpService empService;
      
          /**
           * 登录功能
           */
          @PostMapping("/login")
          public Result login(@RequestBody Emp emp){
              log.info("登录功能");
              Emp e =empService.login(emp);
              return e!=null ? Result.success():Result.error("用户名或密码不正确");
          }
      }
      

      /**
           * 登录
           * @param emp
           * @return
           */
          Emp login(Emp emp);
      /**
           * 登录
           * @param emp
           * @return
           */
          @Override
          public Emp login(Emp emp) {
              return empMapper.getByUserNameAndPwd(emp);
          }
      /**
           * 根据用户名和密码实现登录
           * @param emp
           * @return
           */
          @Select("select * from emp where username=#{username} and password=#{password}")
          Emp getByUserNameAndPwd(Emp emp);
      登录校验
      java web_第271张图片
       会话技术
      java web_第272张图片
       跨域

      java web_第273张图片

      会话技术对比
      java web_第274张图片
      JWT令牌 

      java web_第275张图片

      java web_第276张图片

      生成JWT令牌 

      依赖导入

      
              
                  io.jsonwebtoken
                  jjwt
                  0.9.1
              
      /**
           * 生成JWT令牌
           */
          @Test
          public void testGenJWT(){
              Map claims=new HashMap<>();
              claims.put("id",1);
              claims.put("name","TOM");
      
              String jwt = Jwts.builder()
                      .signWith(SignatureAlgorithm.HS256, "wsulg")//设置签名算法
                      .setClaims(claims)//自定义内容
                      .setExpiration(new Date(System.currentTimeMillis() + 3600 * 1000))//设置有效期为一个小时
                      .compact();
              System.out.println(jwt);
          }
      /**
           * 解析JWT
           */
          @Test
          public void testParserJwt(){
              Claims claims = Jwts.parser()
                      .setSigningKey("wsulg")
                      .parseClaimsJws("eyJhbGciOiJIUzI1NiJ9.eyJuYW1lIjoiVE9NIiwiaWQiOjEsImV4cCI6MTY5MzI4OTY3Nn0.7kVfYCEzIseN4OWStIohc-ZIjrJGG-onb_7Xo7-xgA4")
                      .getBody();
              System.out.println(claims);
          }

      java web_第277张图片

      java web_第278张图片

      JWT令牌跟踪会话
      java web_第279张图片
       /**
           * 登录功能
           */
          @PostMapping("/login")
          public Result login(@RequestBody Emp emp){
              log.info("登录功能");
              Emp e =empService.login(emp);
              //登录成功,下发JWT令牌
              if (e !=null){
                  Map claims= new HashMap<>();
                  claims.put("id",e.getId());
                  claims.put("username",e.getUsername());
                  claims.put("name",e.getName());
                  //生成JWT令牌
                  String jwt = JwtUtils.generateJwt(claims);
                  return Result.success(jwt);
              }
      
              //登陆失败返回错误信息
              return Result.error("用户名或密码不正确");
          }
       过滤器Filter

      java web_第280张图片

      java web_第281张图片

      package com.example.tlias.filter;
      
      import javax.servlet.*;
      import javax.servlet.annotation.WebFilter;
      import java.io.IOException;
      
      @WebFilter(urlPatterns = "/*")
      public class FilterDemo implements Filter {
          @Override//初始化
          public void init(FilterConfig filterConfig) throws ServletException {
              //Filter.super.init(filterConfig);
              System.out.println("实现了init方法");
          }
      
          @Override//拦截所有请求,可调用多次
          public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
              System.out.println("拦截请求");
              //方行
              filterChain.doFilter(servletRequest, servletResponse);
          }
      
          @Override//销毁方法,只调用一次
          public void destroy() {
              //Filter.super.destroy();
              System.out.println("调用了destroy方法");
          }
      }
      

      package com.example.tlias;
      
      import org.springframework.boot.SpringApplication;
      import org.springframework.boot.autoconfigure.SpringBootApplication;
      import org.springframework.boot.web.servlet.ServletComponentScan;
      import org.springframework.web.bind.annotation.RestController;
      
      @ServletComponentScan//支持serclet
      @SpringBootApplication
      public class TliasApplication {
      
          public static void main(String[] args) {
              SpringApplication.run(TliasApplication.class, args);
          }
      
      }
      

      java web_第282张图片

      java web_第283张图片

      java web_第284张图片

      java web_第285张图片

      登录过滤器

      java web_第286张图片

      package com.example.tlias.filter;
      
      import com.alibaba.fastjson.JSONObject;
      import com.example.tlias.pojo.Result;
      import com.example.tlias.utils.JwtUtils;
      import lombok.extern.slf4j.Slf4j;
      import org.apache.catalina.connector.Request;
      import org.springframework.util.StringUtils;
      
      import javax.servlet.*;
      import javax.servlet.annotation.WebFilter;
      import javax.servlet.http.HttpServletRequest;
      import javax.servlet.http.HttpServletResponse;
      import java.io.IOException;
      
      @Slf4j
      @WebFilter(urlPatterns = "/*")
      public class LoginChexkFilter implements Filter {
      
          @Override
          public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
              HttpServletRequest req= (HttpServletRequest) servletRequest;
              HttpServletResponse reqs= (HttpServletResponse) servletResponse;
      
              //1.获取请求url
              String url = req.getRequestURL().toString();
              log.info("获取到的url为"+url);
      
              //2.判断请求url中是否包含login,如果包含,说明登录操作,放行
              if (url.contains("login")){
                  filterChain.doFilter(servletRequest,servletResponse);
                  return;
              }
      
              //3.获取请求头中的令牌(token)
              String jwt = req.getHeader("token");
      
              //4.判断令牌是否存在,如果不存在,返回错误结果(未登录)
              if (!StringUtils.hasLength(jwt)){
                  log.info("请求token为空,返回登录信息");
                  Result error = Result.error("NOT_LOGIN");
                  //将错误返回结果输出为json
                  //手动转换 对象---json------>阿里巴巴fastJSON
                  String notLogin= JSONObject.toJSONString(error);
                  reqs.getWriter().write(notLogin);
                  return;
              }
              //5.解析token,如果解析失败,返回错误结果(未登录)
              try {
                  JwtUtils.parseJWT(jwt);//校验令牌
              }catch (Exception e){//解析失败
                  e.printStackTrace();
                  log.info("解析令牌失败,返回未登录的错误信息");
                  Result error = Result.error("NOT_LOGIN");
                  //将错误返回结果输出为json
                  //手动转换 对象---json------>阿里巴巴fastJSON
                  String notLogin= JSONObject.toJSONString(error);
                  reqs.getWriter().write(notLogin);
                  return;
              }
              //6.放行
              log.info("令牌合法,放行");
              filterChain.doFilter(servletRequest,servletResponse);
          }
      }
      
      拦截器interceptor

      java web_第287张图片

      java web_第288张图片

      package com.example.tlias.interceptor;
      
      import org.springframework.stereotype.Component;
      import org.springframework.web.servlet.HandlerInterceptor;
      import org.springframework.web.servlet.ModelAndView;
      
      import javax.servlet.http.HttpServletRequest;
      import javax.servlet.http.HttpServletResponse;
      
      @Component
      public class LoginCheckInterceptor implements HandlerInterceptor {
          @Override//目标哦资源方法运行前运行,返回true 放行,返回false,不放行
          public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
              System.out.println("preHandle....");
              return true;
          }
      
          @Override//目标哦资源方法运行后运行
          public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
              //HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
              System.out.println("postHandle.....");
          }
      
          @Override//视图渲染后执行,最后执行
          public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
              //HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
              System.out.println("afterCompletion....");
          }
      }
      

      package com.example.tlias.config;
      
      import com.example.tlias.interceptor.LoginCheckInterceptor;
      import org.springframework.beans.factory.annotation.Autowired;
      import org.springframework.context.annotation.Configuration;
      import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
      import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
      
      @Configuration//配置类
      public class WebConfig implements WebMvcConfigurer {
      
          @Autowired
          private LoginCheckInterceptor loginCheckInterceptor;
      
          @Override
          public void addInterceptors(InterceptorRegistry registry) {
              registry.addInterceptor(loginCheckInterceptor).addPathPatterns("/**");
          }
      }
      
      拦截路径

      java web_第289张图片

      执行流程
      java web_第290张图片
      拦截器完成登录校验
      java web_第291张图片

      @Slf4j
      @Component
      public class LoginCheckInterceptor implements HandlerInterceptor {
          @Override//目标哦资源方法运行前运行,返回true 放行,返回false,不放行
          public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
              //1.获取请求url
              String url = request.getRequestURL().toString();
              log.info("获取到的url为"+url);
      
              //2.判断请求url中是否包含login,如果包含,说明登录操作,放行
              if (url.contains("login")){
                  return true;
              }
      
              //3.获取请求头中的令牌(token)
              String jwt = request.getHeader("token");
      
              //4.判断令牌是否存在,如果不存在,返回错误结果(未登录)
              if (!StringUtils.hasLength(jwt)){
                  log.info("请求token为空,返回登录信息");
                  Result error = Result.error("NOT_LOGIN");
                  //将错误返回结果输出为json
                  //手动转换 对象---json------>阿里巴巴fastJSON
                  String notLogin= JSONObject.toJSONString(error);
                  response.getWriter().write(notLogin);
                  return false;
              }
              //5.解析token,如果解析失败,返回错误结果(未登录)
              try {
                  JwtUtils.parseJWT(jwt);//校验令牌
              }catch (Exception e){//解析失败
                  e.printStackTrace();
                  log.info("解析令牌失败,返回未登录的错误信息");
                  Result error = Result.error("NOT_LOGIN");
                  //将错误返回结果输出为json
                  //手动转换 对象---json------>阿里巴巴fastJSON
                  String notLogin= JSONObject.toJSONString(error);
                  response.getWriter().write(notLogin);
                  return false;
              }
              //6.放行
              log.info("令牌合法,放行");
              return true;
          }
      
          @Override//目标哦资源方法运行后运行
          public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
              //HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
              System.out.println("postHandle.....");
          }
      
          @Override//视图渲染后执行,最后执行
          public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
              //HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
              System.out.println("afterCompletion....");
          }
      }
       异常处理

      java web_第292张图片

      java web_第293张图片

      /**
       * 全局统一异常处理类
       */
      @RestControllerAdvice
      public class GlobalExceptionHandler {
      
          @ExceptionHandler(Exception.class)//捕获所有异常
          public Result ex(Exception ex){
              ex.printStackTrace();
              return Result.error("对不起,操作失败,请联系管理员");
          }
      }
      

      spring事务管理&AOP

      事务管理

      java web_第294张图片java web_第295张图片

      日志开关配置

      java web_第296张图片

      事物进阶
      rollbackFor
      java web_第297张图片propagation

      java web_第298张图片java web_第299张图片

      java web_第300张图片

      java web_第301张图片

      AOP基础

      java web_第302张图片java web_第303张图片java web_第304张图片AOP核心概念

      java web_第305张图片java web_第306张图片AOP进阶

      通知类型java web_第307张图片java web_第308张图片通知顺序
      java web_第309张图片切入点表达式
      execution
      java web_第310张图片java web_第311张图片java web_第312张图片java web_第313张图片@annotation

      java web_第314张图片

      连接点

      java web_第315张图片web后端开发——原理篇

      配置优先级

      java web_第316张图片

      java web_第317张图片

      java web_第318张图片

      java web_第319张图片

      Bean管理

      获取Bean

      Bean的作用域

      java web_第320张图片

      java web_第321张图片

      第三方Bean

      java web_第322张图片

      spring boot原理
      自动配置

      java web_第323张图片

      java web_第324张图片

      java web_第325张图片

      java web_第326张图片

      @Conditional

      java web_第327张图片

      java web_第328张图片

      java web_第329张图片

      案例

      java web_第330张图片

      总结

      java web_第331张图片

      java web_第332张图片

      Maven高级

      分模块设计与开发

      分模块设计

      java web_第333张图片

      java web_第334张图片

      java web_第335张图片

      java web_第336张图片

      继承与聚合

      继承

      java web_第337张图片

      java web_第338张图片

      java web_第339张图片

      java web_第340张图片

      版本锁定

      java web_第341张图片

      java web_第342张图片

      java web_第343张图片

      聚合

      java web_第344张图片

      java web_第345张图片

      java web_第346张图片

      私服

      介绍

      资源上传与下载

      java web_第347张图片

      java web_第348张图片

      java web_第349张图片

      java web_第350张图片

      java web_第351张图片

      学习结束了,将继续跟随黑马老师啃编程!

      你可能感兴趣的:(学习笔记,前端,web)