Day1
MySQL
这部分其实没啥好说的,本科阶段对于数据库部分掌握的还不错,应用性很强的技术。
在安装MySQL时需要配置一下环境变量。
在系统变量里新增一条MySQL的环境变量
再在path中 新建一条MySQL的路径
另外低版本和高版本的MySQL安装上有些许不同,具体安装步骤自行百度即可解决 :)
MySQL是一种关系型数据库,是由多张能相互连接的二维表组成的数据库。
关系型数据库的优点:
都是使用表结构,格式一致,维护容易
使用通用的SQL语言操作,使用方便,可用于复杂查询
数据存储在磁盘中,安全。
SQL分类
DDL:数据定义语言,用来定义数据库对象:数据库、列、表等
DML:数据操作语言,用来对数据库中表的数据进行增删改
DQL:数据查询语言,用来查询数据库中表的数据
DCL:数据控制语言,用来定义数据库的访问权限和安全级别,以及创建用户
在命令行中写sql太麻烦了,所以选择使用Navicat工具来管理和开发MySQL
SQL中有很多基本的语法,但这些语法都很简单而且规范都很严谨,所以不再赘述
约束
约束是作用于表中列上的规则,用于限制加入表的数据,保证了数据空中数据的正确性、有效性和完整性。
分类:
非空约束:关键字是NOT NULL
正如其名,该列中所有数据不能有null
唯一约束:关键字是UNIQUE
列中所有数据各不相同
检查约束:关键字是CHECK
列中的值必须满足某一条件
默认约束:关键字是DEFAULT
保存数据时,如果没有指定值就采用默认值
外键约束:关键字是FOREIGN KEY
外键用于让两个表数据之间建立链接,保证数据的一致性和完整性
数据库设计
步骤:需求分析、逻辑分析、物理设计、维护设计
表关系
一对一、一对多、多对多
事务
事务是一种机制、一个操作序列,包含一组数据库操作命令
事务把所有命令作为一个整体一起向系统提交或撤销。
事务的四大特性:原子性、一致性、隔离性、持久性
JDBC
使用Java语言操作关系型数据库的一套API
导入驱动jar包
注册驱动、获取连接
定义SQL语句、获取执行SQL对象、执行SQL
使用PreparedStatement预编译SQL语句并执行可以预防SQL注入问题
数据库连接池
数据库连接池是个容器,负责分配、管理数据库连接,允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个,释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏
Druid(德鲁伊)
Druid连接池是阿里巴巴开源的数据库连接池项目
同样需要先导入jar包
编写配置文件
使用Druid的代码
商品品牌数据增删改查练习
数据库表
查询所有
添加数据
更新数据
删除数据
Day2
Maven
Maven是专门用于管理和构建Java项目的工具,它的主要功能有:
提供了一套标准化的项目结构
提供了一套标准化的构建流程(编译,测试,打包,发布...)
提供了一套依赖管理机制
maven的目录结构
同样需要配置环境变量
在IDEA中创建一个Maven项目
点击完成即可
使用坐标引入jar包
依赖范围 | 编译classpath | 测试classpath | 运行classpath | 例子 |
compile | Y | Y | Y | logback |
test | - | Y | - | Junit |
provided | Y | Y | - | servlet-api |
runtime | - | Y | Y | jdbc驱动 |
systen | Y | Y | - | 存储在本地的jar包 |
Mybatis
Mybatis是一款优秀的持久层框架,用于简化JDBC开发
Mybatis是的硬编码可以配置到配置文件,操作繁琐的地方mybatis都自动完成
使用mybatis需要先添加依赖坐标
在resourse目录下创建mybatis的配置文件 mybatis-config.xml
该文件的内容可以到Mybatis官网中获取
Mapper代理开发
Mapper代理方式解决原生方式中的硬编码并简化后期执行SQL
使用Mapper代理方式必须满足以下要求
定义与SQL映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放置在同一目录下
设置SQL映射文件的namespace属性为Mapper接口全限定名
在Mapper接口中定义方法,方法名就是SQL映射文件中sql语句的id,保持参数类型和返回值类型一致(这里使用了注解开发)
使用Mybatis练习增删改查
查询所有数据
多条件查询
单条件查询
删除多行数据
Day3
HTML
HTML,超文本标记语言
超文本:超越了文本的限制,比普通文本更强大
标记语言:有标签构成的语言
HTML中标签种类繁多,不一一予以展示了
表单标签
在网页中主要负责数据采集功能
form是表单标签,它在页面上没有任何展示的效果。需要借助于表单项来展示不同的效果
form标签属性
action:规定当提交表单时向何处发送表单数据,该属性值就是URL
method:规定用于发送表单数据的方式,有以下两种:
get:默认值。请求参数会拼接在URL后边 长度有限制4KB
post:浏览器会将数据放到http请求消息体中 参数无限制
CSS
CSS是一门语言,用于控制网页表现。没啥可说的,这部分主要是前端开发的部分,后端学习了解即可
JavaScript
JavaScript是一门跨平台、面向对象的脚本语言,不需要编译,游浏览器直接解析并执行
JavaScript中引用var关键字来声明变量。JavaScript是一门弱类型语言,变量可以存放不同类型的值
var关键字作用域:全局变量
var变量可以重复定义
Day4
HTTP&Tomcat&Servlet
WEB
B/S架构
浏览器/服务器架构模式,它的特点是客户端只需要浏览器,应用程序的逻辑和数据都存储在服务器端。浏览器只需要请求服务器,获取Web资源,服务器把Web资源发送给浏览器即可。
静态资源
静态资源主要包含HTML、CSS、JavaScript、图片等,主要负责页面的展示。
动态资源
动态资源主要包含Servlet、JSP等,主要用来负责逻辑处理。
动态资源处理完逻辑后会把得到的结果交给静态资源来进行展示,动态资源和静态资源要结合一起使用。
数据库
数据库主要负责存储数据
(1)浏览器发送一个请求到服务端,去请求所需要的相关资源;
(2)资源分为动态资源和静态资源,动态资源可以是使用Java代码按照Servlet和JSP的规范编写的内容;
(3)在Java代码可以进行业务处理也可以从数据库中读取数据;
(4)拿到数据后,把数据交给HTML页面进行展示,再结合CSS和JavaScript使展示效果更好;
(5)服务端将静态资源响应给浏览器;
(6)浏览器将这些资源进行解析;
(7)解析后将效果展示在浏览器,用户就可以看到最终的结果。
HTTP
HyperText Transfer Protocol,超文本传输协议,规定了浏览器和服务器之间数据传输的规则
数据传输的规则指的是请求数据和响应数据需要按照指定的格式进行传输。
HTTP协议特点
基于TCP协议: 面向连接,安全
基于请求-响应模型的:一次请求对应一次响应
HTTP协议是无状态协议:对于事物处理没有记忆能力。每次请求-响应都是独立的
请求数据格式
请求数据总共分为三部分内容,分别是请求行、请求头、请求体
响应数据格式
响应数据总共分为三部分内容,分别是响应行、响应头、响应体
Tomcat
Web服务器
Web服务器是一个应用程序(软件),对HTTP协议的操作进行封装,使得程序员不必直接对协议进行操作,让Web开发更加便捷。主要功能是"提供网上信息浏览服务"。
Tomcat目录结构
Maven创建Web项目
Web项目结构
集成本地Tomcat
点确定即可
Tomcat Maven插件
使用Maven Helper插件快速启动项目,选中项目,右键-->Run Maven --> tomcat7:run
Servlet
Servlet是JavaWeb最为核心的内容,它是Java提供的一门动态web资源开发技术。
使用Servlet就可以实现,根据不同的登录用户在页面上动态显示不同内容。
Servlet是JavaEE规范之一,其实就是一个接口,将来我们需要定义Servlet类实现Servlet接口,并由web服务器运行Servlet
Servlet由谁创建?Servlet方法由谁调用?
Servlet由web服务器创建,Servlet方法由web服务器调用
服务器怎么知道Servlet中一定有service方法?
因为我们自定义的Servlet,必须实现Servlet接口并复写其方法,而Servlet接口中有service方法
Servlet的生命周期
Servlet运行在Servlet容器(web服务器)中,其生命周期由容器来管理,分为4个阶段:
加载和实例化:默认情况下,当Servlet第一次被访问时,由容器创建Servlet对象
初始化:在Servlet实例化之后,容器将调用Servlet的init()方法初始化这个对象,完成一些如加载配置文件、创建连接等初始化的工作。该方法只调用一次
请求处理:每次请求Servlet时,Servlet容器都会调用Servlet的service()方法对请求进行处理
服务终止:当需要释放内存或者容器关闭时,容器就会调用Servlet实例的destroy()方法完成资源的释放。在destroy()方法调用之后,容器会释放这个Servlet实例,该实例随后会被Java的垃圾收集器所回收
urlPattern配置
Servlet类编写好后,要想被访问到,就需要配置其访问路径(==urlPattern==)
一个Servlet,可以配置多个urlPattern
Request&Response
Request:
获取请求数据 浏览器会发送HTTP请求到后台服务器[Tomcat]
HTTP的请求中会包含很多请求数据[请求行+请求头+请求体]
后台服务器[Tomcat]会对HTTP请求中的数据进行解析并把解析结果存入到一个对象中
所存入的对象即为request对象,所以我们可以从request对象中获取请求的相关参数
获取到数据后就可以继续后续的业务,比如获取用户名和密码就可以实现登录操作的相关业务
Response:
设置响应数据 业务处理完后,后台就需要给前端返回业务处理的结果即响应数据
把响应数据封装到response对象中
后台服务器[Tomcat]会解析response对象,按照[响应行+响应头+响应体]格式拼接结果
浏览器最终解析结果,把内容展示在浏览器给用户浏览
Request请求转发
请求转发(forward):一种在服务器内部的资源跳转方式。
(1)浏览器发送请求给服务器,服务器中对应的资源A接收到请求
(2)资源A处理完请求后将请求发给资源B
(3)资源B处理完后将结果响应给浏览器
(4)请求从资源A到资源B的过程就叫请求转发
请求转发的特点
浏览器地址栏路径不发生变化
只能转发到当前服务器的内部资源,不能从一个服务器通过转发访问另一台服务器
一次请求,可以在转发资源间使用request共享数据
Response请求重定向
Response重定向(redirect):一种资源跳转方式。
(1)浏览器发送请求给服务器,服务器中对应的资源A接收到请求
(2)资源A现在无法处理该请求,就会给浏览器响应一个302的状态码+location的一个访问资源B的 路径
(3)浏览器接收到响应状态码为302就会重新发送请求到location对应的访问地址去访问资源B
(4)资源B接收到请求后进行处理并最终给浏览器响应结果,这整个过程就叫重定向
重定向的特点
浏览器地址栏路径发送变化。当进行重定向访问的时候,由于是由浏览器发送的两次请求,所以地址会发生变
可以重定向到任何位置的资源(服务内容、外部均可), 因为第一次响应结果中包含了浏览器下次要跳转的路径,所以这个路径是可以任意位置资源。
两次请求,不能在多个资源使用request共享数据,因为浏览器发送了两次请求,是两个不同的request对象,就无法通过request对象进行共享数据
用户注册登录案例
在UserMapper接口中提供一个根据用户名和密码查询用户对象的方法
login.html
编写LoginServlet
用户注册
RegisterServlet
Day5
JSP
JSP这部分不想多说,现在实际开发中该技术基本被淘汰了,而且在做练习的时候出现了很多莫名其妙的问题,所以直接略过 o(╥﹏╥)o
Day6
会话技术
会话:用户打开浏览器,访问web服务器的资源,会话建立,直到有一方断开连接,会话结束。在一次会话中可以包含==多次==请求和响应。
从浏览器发出请求到服务端响应数据给前端之后,一次会话(在浏览器和服务器之间)就被建立了
会话被建立后,如果浏览器或服务端都没有被关闭,则会话就会持续建立着
浏览器和服务器就可以继续使用该会话进行请求发送和响应,上述的整个过程就被称之为会话。
会话跟踪:一种维护浏览器状态的方法,服务器需要识别多次请求是否来自于同一浏览器,以便在同一次会话的多次请求间共享数据。
服务器会收到多个请求,这多个请求可能来自多个浏览器
服务器需要用来识别请求是否来自同一个浏览器
服务器用来识别浏览器的过程,这个过程就是会话跟踪
服务器识别浏览器后就可以在同一个会话中多次请求之间来共享数据
Cookie
Cookie:客户端会话技术,将数据保存到客户端,以后每次请求都携带Cookie数据进行访问。
Cookie的工作流程
服务端提供了两个Servlet,分别是ServletA和ServletB
浏览器发送HTTP请求1给服务端,服务端ServletA接收请求并进行业务处理
服务端ServletA在处理的过程中可以创建一个Cookie对象并将name=zs
的数据存入Cookie
服务端ServletA在响应数据的时候,会把Cookie对象响应给浏览器
浏览器接收到响应数据,会把Cookie对象中的数据存储在浏览器内存中,此时浏览器和服务端就建立了一次会话
在同一次会话中浏览器再次发送HTTP请求2给服务端ServletB,浏览器会携带Cookie对象中的所有数据
ServletB接收到请求和数据后,就可以获取到存储在Cookie对象中的数据,这样同一个会话中的多次请求之间就实现了数据共享
Session
Session:服务端会话跟踪技术:将数据保存到服务端。
Session是存储在服务端而Cookie是存储在客户端
存储在客户端的数据容易被窃取和截获,存在很多不安全的因素
存储在服务端的数据相比于客户端来说就更安全
Session是基于Cookie实现的
Session实现的也是一次会话中的多次请求之间的数据共享
Session钝化与活化
钝化:在服务器正常关闭后,Tomcat会自动将Session数据写入硬盘的文件中
活化:再次启动服务器后,从文件中加载数据到Session中
session数据存储在服务端,服务器重启后,session数据会被保存
浏览器被关闭启动后,重新建立的连接就已经是一个全新的会话,获取的session数据也是一个新 的对象
session的数据要想共享,浏览器不能关闭,所以session数据不能长期保存数据
cookie是存储在客户端,是可以长期保存
Cookie和Session小结
Cookie 和 Session 都是来完成一次会话内多次请求间数据共享的。
所需两个对象放在一块,就需要思考:
Cookie和Session的区别是什么?
Cookie和Session的应用场景分别是什么?
- 区别:
- 存储位置:Cookie 是将数据存储在客户端,Session 将数据存储在服务端
- 安全性:Cookie不安全,Session安全
- 数据大小:Cookie最大3KB,Session无大小限制
- 存储时间:Cookie可以通过setMaxAge()长期存储,Session默认30分钟
- 服务器性能:Cookie不占服务器资源,Session占用服务器资源
- 应用场景:
- 购物车:使用Cookie来存储
- 以登录用户的名称展示:使用Session来存储
- 记住我功能:使用Cookie来存储
- 验证码:使用session来存储
- 结论
- Cookie是用来保证用户在未登录情况下的身份识别
- Session是用来保存用户登录后的数据
用户登录注册案例
需求说明:
-
完成用户登录功能,如果用户勾选“记住用户” ,则下次访问登录页面自动填充用户名密码
-
完成注册功能,并实现验证码功能
Dao层
Service层
login.jsp
LoginServlet类
注册功能
Dao层
Service层
Register.jsp部分代码
Servlet层
验证码
Day7
Filter&Listener&Ajax
Filter
Filter 表示过滤器,过滤器可以把对资源的请求拦截下来,从而实现一些特殊的功能。
拦截器拦截到后可以做什么功能呢? 过滤器一般完成一些通用的操作。比如每个资源都要写一些代码完成某个功能,我们总不能在每个资源中写这样的代码吧, 而此时我们可以将这些代码写在过滤器中,因为请求每一个资源都要经过过滤器。
Filter执行流程
Filter拦截路径配置
拦截路径表示 Filter 会对请求的哪些资源进行拦截,使用 @WebFilter 注解进行配置。如: @WebFilter("拦截路径")
拦截路径有如下四种配置方式:
拦截具体的资源:/index.jsp:只有访问index.jsp时才会被拦截
目录拦截:/user/*:访问/user下的所有资源,都会被拦截
后缀名拦截:*.jsp:访问后缀名为jsp的资源,都会被拦截
拦截所有:/*:访问所有资源,都会被拦截
过滤器链
过滤器链是指在一个Web应用,可以配置多个过滤器,这多个过滤器称为过滤器链
Listener
Listener 表示监听器,可以监听就是在 application , session , request 三个对象创建、销毁或者往其中添加修改删除属性时自动 执行代码的功能组件。
Ajax
AJAX (Asynchronous JavaScript And XML):异步的 JavaScript 和 XML。
AJAX 作用有以下两方面:
1. 与服务器进行数据交换:通过AJAX可以给服务器发送请求,服务器将数据直接响应回给浏览器。
2. 异步交互:可以在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页的技术
Axios
Axios 对原生的AJAX进行封装,简化书写。
JSON
JSON 本质就是一个字符串,但是该字符串内容是有一定的格式要求的。
JSON 串的键要求必须使用双引号括起来,而值根据要表示的类型确定。
value 的数据类型分为如下
数字(整数或浮点数)
字符串(使用双引号括起来)
逻辑值(true或者false)
数组(在方括号中)
对象(在花括号中)
null
Fastjson
Fastjson 是阿里巴巴提供的一个Java语言编写的高性能功能完善的 JSON 库,是目前Java语言中最快的 JSON 库,可以实 现 Java 对象和 JSON 字符串的相互转换。