Shiro
WebService
Spring Data JPA
BootStrap
LayUI/VUE.js
Echarts
Struts2
SVN
Git
S2SH Struts2+Spring+Hibernate
SSH SpringMVC+Spring+Hibernate
SSM SpringMVC+Spring+MyBatis
SSS SpringMVC+Spring+Spring Data
今日内容:
如何看待编程语言?
可以开发一些系统,简化日常的工作
JAVA体系知识点:
基本语法:
数据类型:
基本类型:byte short int long float double char boolean
引用类型:String 集合 数组 枚举 等,除了上述的八种基本类型之外,剩下的都是引用类型
int[] arr1
Integer[] arr2
long 8个
float 4个 可以存储科学记数法
基本类型的转换是按照数据存储的范围
long可以自动转换为float
byte\short\char参与运算的时候,被转为int
运算符:
赋值运算符:= += -= *=
算术运算符:+ ++ -- %
比较运算符:> < >= == !=
逻辑运算符:| || & &&
位运算符:^ & | << >>> >>
三目运算符:X?Y:Z
字符串连接运算符:+
Dog dog1=new Dog();
Dog dog2=new Dog();
输出:dog1+dog2
程序结构:
1、顺序结构
2、分支结构:if\switch
3、循环结构:for\while\do/while
请写出2*4的效率最高的写法:2<<2
面向对象:万事万物皆对象 OOP和AOP
2大核心:
1、类
2、对象
面向对象的特征:
1、封装
2、继承----
3、多态
1、编译时多态
重载
2、运行时多态
1、重写
2、对象造型
1、子--父类 向上转型 自动
2、父类--子 向下转型 强制
4、抽象
java中内部类:
1、匿名内部类
2、静态内部类
3、成员内部类
4、局部内部类
JAVA中的非持久化(内存存储)存储:
1、数组
算法:排序、查找
一维数组
二维数组
2、集合
List<E>:有序且可重复
1、ArrayList: 底层:数组 特点:新增和删除 慢 查询和修改快
2、LinkedList<E>:底层:链式结构 特点:新增和删除 快 查询和修改 慢
Set<E>:无序且不可重复
1、HashSet:底层:哈希散列存储 需要重写:hashcode和equals
2、TreeSet:底层:红黑二叉树 需要实现比较器接口:Comparable Comparator
Map<K,V>:key不允许重复,Value可以重复
HashMap
HashTable---Properties
IO流:
划分:
1、按照单位
1、字节流
2、字符流
2、按照流向分:
1、输入
2、输出
3、按照功能:
1、节点流:直接操作数据的流 文件流和内存流
2、过滤流:操作流的流
常用IO流类
节点流
1、文件流:4个 FileXXX
2、内存流:2个 ByteArrayXXX
过滤流
1、缓存流:4个 BufferedXXX
2、转换流:2个
1、打印流
2、数据流
3、对象流 --序列化/反序列化
1、随机读取文件类
RandomAccessFile:可以用于:多线程下转或多线程读取
线程:是CPU处理程序的最小单位
线程就是用来执行代码
Lambda表达式:简化的表达式,用来实现接口中只有一个抽象方法的接口的实例化
语法格式:(参数名)->{代码块}
Eclipse
1、创建方式:
2、线程的生命周期:
1、新建 new
2、就绪 start
3、运行
4、阻塞 sleep\wait
5、死亡
3、用户线程和守护线程
用户线程销毁的时候,会将守护线程一起销毁
主线程和GC线程
4、多线程的安全
当多个线程共同操作同一资源的时候,可能会引发线程安全
5、锁
互斥锁
lock
读写锁
6、死锁
多个线程因为资源无法彼此拥有的时候,线程都进入了阻塞状态导致程序无法正常结束
7、生产者消费者模型
这种模型就是为了平衡多线程间的交互
wait/notify/notifyall
wait:释放锁,并将当前线程在对应的锁上进行阻塞
notify:唤醒在对应锁上因为wait而陷入阻塞的任意一个线程
notifyall:唤醒所有的线程
线程A用来爬取数据---数据的生产者
线程B用来存储数据---数据的消费者
网络编程:
Socket
用在及时通讯
TCP:
面向连接
数据交互没有大小的限制
数据安全
效率低
HTTP协议
UDP
无需连接
数据交互大小有限制 64KB
数据不安全
效率高
网络会议室
翻墙软件
前端:
HTML+CSS+JavaScript
HTML:显示数据 标签
表单标签:
<form>
<input type="">
<select>
<textarea>
<a>
<img>
<hr>
<video>
<audio>
<canvas>
CSS:样式,美化页面
格式:选择器 {
属性名:值
}
选择器:
1、id选择器 #id名称
2、class选择器 .class名称
3、标签选择器 标签名称
4、属性选择器 [属性名=值]
CSS引入方式:
1、嵌入 在标签上使用style
2、内部:写在<head> <style>
3、外部:<link>
常用属性:
1、文字
2、位置
绝对定位
相对定位
3、盒子模型
margin---外边距
padding--内边距
4、背景
JS:动态改变html内容和css样式
JavaScript:面向对象语言
浏览器脚本语言,浏览器进行解释
基本语法
变量:
var 变量
局部变量和全局变量
运算符:
分支
循环语句
== 比较的是值
=== 比较的是值和类型
函数格式: function 方法名(参数){
函数体
[return 返回值]
}
事件:
onclick 单击事件
onchange 内容变化
onblur 失去焦点
onfocus 获取焦点
onmoveorver
onmoveout
onkeydown
onkeyup
ondbclick
JS内置对象
数组
Number
String
Math
Regex
Date
JS的BOM
浏览器对象:
window
location
screen
JS的DOM
document:文档
getElementById
getElementsByName
createElement
MySQL数据库:
数据存储的仓库
关系型数据库:SQL92
MySQL
Oracle:
SQL:结构化查询语言
专门操作数据库的语言
SQL语言的分类:
1、DDL:数据定义语言
create
alter
drop
2、DML:数据操作语言
insert
update
delete
3、DQL:数据查询语言
select order by group by having limit(MySQL)
4、DCL:数据控制语言
对用户权限的分配 grant
5、TPL:事务处理语言
对事务的管理
6、CCL:控制指针语言
MySQL数据类型
int
char
varchar
date
datetime
time
double
blob
text
MySQL约束条件
主键约束 primary key
非空约束 not null
默认约束 default
唯一约束 unique
外键约束 foreign key
--创建 表、数据库、视图、触发器
CREATE TABLE 表名 (字段 数据类型 约束条件);
--修改
ALTER TABLE 表名 add 字段名称 数据类型
--删除
DROP TABLE 表名
--新增数据
INSERT INTO 表名 (字段名称) values(值);
--修改数据
UPDATE 表名 SET 字段=值 [WHERE 条件]
--删除数据
DELETE FROM 表名 [WHERE 条件]
--查询
SELECT 字段 FROM 表名 [WHERE 条件] [GROUP BY 字段] [HAVING 条件] [ORDER BY 字段 ASC|DESC] [LIMIT 行索引,数量]
关系型数据库的联合查询:
1、union 将多条查询结果 纵向排列
2、子查询
3、笛卡尔积查询
4、连接查询
1、内连接
inner join on
2、外连接
1、左外连接
2、右外连接
JDBC:java DataBase Connection
java操作数据库的api
使用步骤:
1、导入jar---数据库驱动jar
2、注册驱动 Class.forName
3、获取连接对象 Connection
4、创建Statement/PreparedStatement
5、执行SQL语句
6、处理查询结果:ResultSet
7、关闭数据库连接
SQL注入:
select * from user where username='' ;
select * from user where username=''or 1=1 ;
XML解析
DOM---
Dom4j---SAXReader---Document----Element----
SAX---DefaultHandler--SAXParser
XML:
组成:
1、声明区 标记版本和编码格式和对应的约束文档等
2、数据区 以根标签开始和结尾
XML语法:
1、严格区分大小写
2、标签有开始有结尾
3、属性的值必须使用双引号
4、特殊字符使用特殊符号代替
JSON:
就是符合一定格式的字符串
语法:
{} 对象
[] 数组
, 多个属性或多个元素的分隔符
: 连接属性和值
"" 属性名称或者字符串类型的值
常用的JSON解析技术:
1、FASTJSON ---JSON
2、GSON
解析数组格式的数据
new TypeToken<new ArrayList<E>>(){}.getType()
3、JSON JSONObject/JSONArray
4、Jackson---ObjectMapper----SpringMVC内置的JSON解析器 @ResponseBody和@RequestBody
JS解析json:
1、JSON.parse()
2、eval('('++')')
3、设置消息头
["id":2,3] x
XML和JSON:
跨平台
跨网络
跨编程语言
B/S:浏览器/服务器 :无需消耗用户的电脑性能
C/S:客户端/服务器----APP:移动桌面程序开发
B/S+APP
Servlet:java语言编写的专门运行在服务器软件上的api
生命周期:
1、初始化
2、服务---service----doGet/doPost
3、销毁
Servlet的页面跳转:
1、转发 1次请求
2、重定向 2次请求
HttpServletRequest
HttpServletResponse
get和post的区别?
1、信息敏感 get的参数是在url上 post
2、大小 get跟在url上,url是长度限制 post没有
3、性能 get快 post慢
用户状态跟踪技术
Cookie: 浏览器保存数据技术
数据存储在客户端
HttpSession:
数据存储在服务器
HttpSession的销毁条件:
1、时间超时
2、invalidate
3、服务器宕机
如果说Cookie禁止了,如何跟踪用户?
1、URL重写
response.encodingURL()
JSP:页面 动态页面
JSP脚本语法:
1、<%! %> 声明全局变量或定义方法
2、<% %> 定义局部变量、调用代码块
3、<%= %> 赋值
4、<%--注释--%>
JSP三大指令:
1、page 页面设置 import
2、taglib 引用标签库 JSTL
3、include 静态加载页面
JSP六大动作:
include
forward
param
usebean
setproperty
getproperty
JSP九大内置对象
pageContext
out
session
application
request
response
exception
page
config
JSP四大域
application
session
request
pageContext
EL表达式:从四大域、Cookie中获取值
格式:${对象}
JSTL标签库
核心库 core
<c:forEach>
<c:if>
<c:choose>
Filter:过滤器
可以对请求进行预处理和后处理
应用场景:
1、编码
2、未登录拦截
3、权限分配
4、全站压缩---gzip
Linsener:监听器
分类:
1、监听ServletContext
2、监听HttpSession
3、监听HttpServletRequest
应用场景:
1、统计在线人数
2、在访问高峰期进行动态的Session失效
Ajax:异步网页刷新技术
$.ajax({
url:"路径",data:"请求参数",datatype:"参数的格式",type:"请求方式",contentType:"内容的格式",success:function(data){}
});
jQuery:对JS的封装
语法格式:$("选择器").行为(function(){});
事件:click\change
改变内容:val(),html()
改变样式:css()
动画:hide\show\fadeIn\fadeOut\slideUp\slideDown\animate
jquery-validate
数据库的事务
事务:保证操作的一致性
事务的特性:
A:原子性
C:一致性
I:隔离性
D:持久性
事务可能会出现的问题:
1、脏读:读取到了未提交的内容
2、虚读:读取的数据前后不一样:insert \delete
3、不可重复读:读取的数据内容不一致:update
事务的隔离级别:
1、串行化 全部避免
2、Repeatable Read 避免脏读和不可重复读
3、Commited Read 避免脏读
4、UnCommited Read 什么都没有避免
数据库连接池
Dbcp----
C3P0----
Druid---德鲁伊
DbUtils------
//反射+注解
Hibernate:
ORM(对象关系映射)
配置文件:
1、全局配置文件:hibernate.cfg.xml
四本一言
四个基本项:驱动、url、用户名、密码
一言:方言 根据数据库生成sql
二级缓存
查询缓存
DDL语句的执行
映射文件
2、映射配置文件:类名.hbm.xml
类----表
主键
属性---字段
多表关系
Hibernate的检索方式:
1、OID update\delete\get\load
2、HQL 面向对象查询语言 表---类 字段---属性 数据--对象 Query
3、SQL NativeQuery SQLQuery
4、对象导航图:多表关系 <one-to-one> <many-to-one><one-to-many><many-to-many>
5、QBC 5.2.x版本过时 JPA
openSession和getCurrentSession?
getCurrentSession:一个线程就一个Session
默认关闭,要求增删改查都需要开启事务
使用步骤:
1、在全局配置文件中,使用<property name="hibernate.current_session_context_class">thread</property>
ThreadLocal---Map<Thread,E>
Hibernate的懒加载:
1、类
lazy=true
2、多表关系
Hibernate的多表关系的配置
一对一
1、主键关联 <one-to-one name constrained=true>
2、外键关联 <many-to-one name unique=true column=>
一对多
<set name>
<key column="外键名称">
<one-to-many class>
</set>
多对一
<many-to-one name column="外键名称">
多对多
隐式:
<set>
<key column="当前表在关联表中的外键名">
<many-to-many class column="另一张表在关联表中的外键名称">
</set>
显式:
使用一对多和多对一代替
<one-to-one>
<many-to-one>
<one-to-many>
<many-to-many>
Hibernate的对象状态:
1、瞬时态 跟Session无关------------- 未追上
2、持久态 跟Session有关-------------- 追上 evict/clear
3、游离态 之前跟Session有关---------- 前任
持久态的对象的属性发生变化的时候,当事务提交会自动更新到数据库
Hibernate的缓存机制:
1、一级缓存 存储在Session 默认有
2、二级缓存 存储在SessionFactory 默认无
3、集群缓存 Redis
Hibernate注解:
@Entity
@Table
@Column
@Id
@Basic
@Transient 标记属性不是字段
@JoinColumn
@JoinTable
@OneToOne
@OneToMany
@ManyToOne
@ManyToMany
@Cache
Spring
IOC:控制反转 DI:依赖注入
Spring的IOC的使用:
<bean class id >
Bean的实例数量:
singleton 当前Bean的实例在Spring的IOC容器中只有一个
prototype 每次调用就是创建新的实例
request
session
AOP:面向切面编程
What:做什么 ----通知
When:在什么时候---配置通知出现的时机
Where:在哪里------切入点表达式
动态代理:
1、jdk----要求目标类 实现接口
2、cglib--
Spring的事务的类型:
1、声明式事务
2、编程式事务
Spring:SpEL表达式
格式:#{表达式}
Spring的#和$的区别
#:SpEl表达式
$:外部文件的key的值 properties
Spring Jdbc模板
SpringMVC:
Web的MVC框架
SpringMVC的前端控制器:
SpringMVC的控制器的方法的定义
SpringMVC对JSON数据的解析和创建:@RequestBody,@ResponseBody
SpringMVC实现文件上传和下载
SpringMVC的拦截器
SpringMVC的自定义转换器---日期转换器
SpringMVC的标签
SpringMVC的标签验证:1、自带验证 2、JSR 303 Hibernate
SpringMVC异常处理:
局部处理和全局处理
SpringMVC国际化 基本不用
MyBatis
ORM框架的实现
半自动框架 现在最火的框架
配置文件:
全局配置文件
接口配置文件
MyBatis的缓存机制
1、一级缓存
存储在SqlSession
2、二级缓存
MyBatis自身实现了二级缓存
缓存策略:
1、LRU:最近最少使用原则
2、FIFO:先进先出 队列存储 栈:先进后出
3、Weak:弱引用
4、Soft:软引用
Java四种引用关系:
1、强引用
new 类名()
只要引用存在,那么哪怕内存不足GC也不会回收
2、弱引用
如果内存不足时,GC会回收弱引用的内存
3、软引用
只要GC运行,都有可能回收内存
4、虚引用
想收就收,回收对象时,会调用finalize
MyBatis实现多表关系
<ResultMap>
MyBatis动态SQL
<if>
<where>
<set> <trim><choose><when><foreach>
MyBatis的注解
@Insert
@Update
@Select
@Delete
@ResultMap
Maven:
1、管理jar
2、构建项目
Maven的命令:
clear
package
install
build
state
Maven生命周期:
1、清空
2、构建
3、站点
Maven允许依赖的传递
jar的范围:
scope:
test:测试
compile:编译、测试、运行、打包
provided:编译
runtime:编译、测试、运行
system:系统,非Mavenjar包
Maven的打包方式:
1、jar
2、war
3、pom
Maven项目允许继承
Maven的聚合:Maven Project+Maven Module
JVM-Sandbox
四阶段目标:
1、掌握技术点
2、解决问题的能力
3、主动学习能力
4、表达能力
毕业的目标:独立开发项目
WebService
Spring Data JPA
BootStrap
LayUI/VUE.js
Echarts
Struts2
SVN
Git
S2SH Struts2+Spring+Hibernate
SSH SpringMVC+Spring+Hibernate
SSM SpringMVC+Spring+MyBatis
SSS SpringMVC+Spring+Spring Data
今日内容:
如何看待编程语言?
可以开发一些系统,简化日常的工作
JAVA体系知识点:
基本语法:
数据类型:
基本类型:byte short int long float double char boolean
引用类型:String 集合 数组 枚举 等,除了上述的八种基本类型之外,剩下的都是引用类型
int[] arr1
Integer[] arr2
long 8个
float 4个 可以存储科学记数法
基本类型的转换是按照数据存储的范围
long可以自动转换为float
byte\short\char参与运算的时候,被转为int
运算符:
赋值运算符:= += -= *=
算术运算符:+ ++ -- %
比较运算符:> < >= == !=
逻辑运算符:| || & &&
位运算符:^ & | << >>> >>
三目运算符:X?Y:Z
字符串连接运算符:+
Dog dog1=new Dog();
Dog dog2=new Dog();
输出:dog1+dog2
程序结构:
1、顺序结构
2、分支结构:if\switch
3、循环结构:for\while\do/while
请写出2*4的效率最高的写法:2<<2
面向对象:万事万物皆对象 OOP和AOP
2大核心:
1、类
2、对象
面向对象的特征:
1、封装
2、继承----
3、多态
1、编译时多态
重载
2、运行时多态
1、重写
2、对象造型
1、子--父类 向上转型 自动
2、父类--子 向下转型 强制
4、抽象
java中内部类:
1、匿名内部类
2、静态内部类
3、成员内部类
4、局部内部类
JAVA中的非持久化(内存存储)存储:
1、数组
算法:排序、查找
一维数组
二维数组
2、集合
List<E>:有序且可重复
1、ArrayList: 底层:数组 特点:新增和删除 慢 查询和修改快
2、LinkedList<E>:底层:链式结构 特点:新增和删除 快 查询和修改 慢
Set<E>:无序且不可重复
1、HashSet:底层:哈希散列存储 需要重写:hashcode和equals
2、TreeSet:底层:红黑二叉树 需要实现比较器接口:Comparable Comparator
Map<K,V>:key不允许重复,Value可以重复
HashMap
HashTable---Properties
IO流:
划分:
1、按照单位
1、字节流
2、字符流
2、按照流向分:
1、输入
2、输出
3、按照功能:
1、节点流:直接操作数据的流 文件流和内存流
2、过滤流:操作流的流
常用IO流类
节点流
1、文件流:4个 FileXXX
2、内存流:2个 ByteArrayXXX
过滤流
1、缓存流:4个 BufferedXXX
2、转换流:2个
1、打印流
2、数据流
3、对象流 --序列化/反序列化
1、随机读取文件类
RandomAccessFile:可以用于:多线程下转或多线程读取
线程:是CPU处理程序的最小单位
线程就是用来执行代码
Lambda表达式:简化的表达式,用来实现接口中只有一个抽象方法的接口的实例化
语法格式:(参数名)->{代码块}
Eclipse
1、创建方式:
2、线程的生命周期:
1、新建 new
2、就绪 start
3、运行
4、阻塞 sleep\wait
5、死亡
3、用户线程和守护线程
用户线程销毁的时候,会将守护线程一起销毁
主线程和GC线程
4、多线程的安全
当多个线程共同操作同一资源的时候,可能会引发线程安全
5、锁
互斥锁
lock
读写锁
6、死锁
多个线程因为资源无法彼此拥有的时候,线程都进入了阻塞状态导致程序无法正常结束
7、生产者消费者模型
这种模型就是为了平衡多线程间的交互
wait/notify/notifyall
wait:释放锁,并将当前线程在对应的锁上进行阻塞
notify:唤醒在对应锁上因为wait而陷入阻塞的任意一个线程
notifyall:唤醒所有的线程
线程A用来爬取数据---数据的生产者
线程B用来存储数据---数据的消费者
网络编程:
Socket
用在及时通讯
TCP:
面向连接
数据交互没有大小的限制
数据安全
效率低
HTTP协议
UDP
无需连接
数据交互大小有限制 64KB
数据不安全
效率高
网络会议室
翻墙软件
前端:
HTML+CSS+JavaScript
HTML:显示数据 标签
表单标签:
<form>
<input type="">
<select>
<textarea>
<a>
<img>
<hr>
<video>
<audio>
<canvas>
CSS:样式,美化页面
格式:选择器 {
属性名:值
}
选择器:
1、id选择器 #id名称
2、class选择器 .class名称
3、标签选择器 标签名称
4、属性选择器 [属性名=值]
CSS引入方式:
1、嵌入 在标签上使用style
2、内部:写在<head> <style>
3、外部:<link>
常用属性:
1、文字
2、位置
绝对定位
相对定位
3、盒子模型
margin---外边距
padding--内边距
4、背景
JS:动态改变html内容和css样式
JavaScript:面向对象语言
浏览器脚本语言,浏览器进行解释
基本语法
变量:
var 变量
局部变量和全局变量
运算符:
分支
循环语句
== 比较的是值
=== 比较的是值和类型
函数格式: function 方法名(参数){
函数体
[return 返回值]
}
事件:
onclick 单击事件
onchange 内容变化
onblur 失去焦点
onfocus 获取焦点
onmoveorver
onmoveout
onkeydown
onkeyup
ondbclick
JS内置对象
数组
Number
String
Math
Regex
Date
JS的BOM
浏览器对象:
window
location
screen
JS的DOM
document:文档
getElementById
getElementsByName
createElement
MySQL数据库:
数据存储的仓库
关系型数据库:SQL92
MySQL
Oracle:
SQL:结构化查询语言
专门操作数据库的语言
SQL语言的分类:
1、DDL:数据定义语言
create
alter
drop
2、DML:数据操作语言
insert
update
delete
3、DQL:数据查询语言
select order by group by having limit(MySQL)
4、DCL:数据控制语言
对用户权限的分配 grant
5、TPL:事务处理语言
对事务的管理
6、CCL:控制指针语言
MySQL数据类型
int
char
varchar
date
datetime
time
double
blob
text
MySQL约束条件
主键约束 primary key
非空约束 not null
默认约束 default
唯一约束 unique
外键约束 foreign key
--创建 表、数据库、视图、触发器
CREATE TABLE 表名 (字段 数据类型 约束条件);
--修改
ALTER TABLE 表名 add 字段名称 数据类型
--删除
DROP TABLE 表名
--新增数据
INSERT INTO 表名 (字段名称) values(值);
--修改数据
UPDATE 表名 SET 字段=值 [WHERE 条件]
--删除数据
DELETE FROM 表名 [WHERE 条件]
--查询
SELECT 字段 FROM 表名 [WHERE 条件] [GROUP BY 字段] [HAVING 条件] [ORDER BY 字段 ASC|DESC] [LIMIT 行索引,数量]
关系型数据库的联合查询:
1、union 将多条查询结果 纵向排列
2、子查询
3、笛卡尔积查询
4、连接查询
1、内连接
inner join on
2、外连接
1、左外连接
2、右外连接
JDBC:java DataBase Connection
java操作数据库的api
使用步骤:
1、导入jar---数据库驱动jar
2、注册驱动 Class.forName
3、获取连接对象 Connection
4、创建Statement/PreparedStatement
5、执行SQL语句
6、处理查询结果:ResultSet
7、关闭数据库连接
SQL注入:
select * from user where username='' ;
select * from user where username=''or 1=1 ;
XML解析
DOM---
Dom4j---SAXReader---Document----Element----
SAX---DefaultHandler--SAXParser
XML:
组成:
1、声明区 标记版本和编码格式和对应的约束文档等
2、数据区 以根标签开始和结尾
XML语法:
1、严格区分大小写
2、标签有开始有结尾
3、属性的值必须使用双引号
4、特殊字符使用特殊符号代替
JSON:
就是符合一定格式的字符串
语法:
{} 对象
[] 数组
, 多个属性或多个元素的分隔符
: 连接属性和值
"" 属性名称或者字符串类型的值
常用的JSON解析技术:
1、FASTJSON ---JSON
2、GSON
解析数组格式的数据
new TypeToken<new ArrayList<E>>(){}.getType()
3、JSON JSONObject/JSONArray
4、Jackson---ObjectMapper----SpringMVC内置的JSON解析器 @ResponseBody和@RequestBody
JS解析json:
1、JSON.parse()
2、eval('('++')')
3、设置消息头
["id":2,3] x
XML和JSON:
跨平台
跨网络
跨编程语言
B/S:浏览器/服务器 :无需消耗用户的电脑性能
C/S:客户端/服务器----APP:移动桌面程序开发
B/S+APP
Servlet:java语言编写的专门运行在服务器软件上的api
生命周期:
1、初始化
2、服务---service----doGet/doPost
3、销毁
Servlet的页面跳转:
1、转发 1次请求
2、重定向 2次请求
HttpServletRequest
HttpServletResponse
get和post的区别?
1、信息敏感 get的参数是在url上 post
2、大小 get跟在url上,url是长度限制 post没有
3、性能 get快 post慢
用户状态跟踪技术
Cookie: 浏览器保存数据技术
数据存储在客户端
HttpSession:
数据存储在服务器
HttpSession的销毁条件:
1、时间超时
2、invalidate
3、服务器宕机
如果说Cookie禁止了,如何跟踪用户?
1、URL重写
response.encodingURL()
JSP:页面 动态页面
JSP脚本语法:
1、<%! %> 声明全局变量或定义方法
2、<% %> 定义局部变量、调用代码块
3、<%= %> 赋值
4、<%--注释--%>
JSP三大指令:
1、page 页面设置 import
2、taglib 引用标签库 JSTL
3、include 静态加载页面
JSP六大动作:
include
forward
param
usebean
setproperty
getproperty
JSP九大内置对象
pageContext
out
session
application
request
response
exception
page
config
JSP四大域
application
session
request
pageContext
EL表达式:从四大域、Cookie中获取值
格式:${对象}
JSTL标签库
核心库 core
<c:forEach>
<c:if>
<c:choose>
Filter:过滤器
可以对请求进行预处理和后处理
应用场景:
1、编码
2、未登录拦截
3、权限分配
4、全站压缩---gzip
Linsener:监听器
分类:
1、监听ServletContext
2、监听HttpSession
3、监听HttpServletRequest
应用场景:
1、统计在线人数
2、在访问高峰期进行动态的Session失效
Ajax:异步网页刷新技术
$.ajax({
url:"路径",data:"请求参数",datatype:"参数的格式",type:"请求方式",contentType:"内容的格式",success:function(data){}
});
jQuery:对JS的封装
语法格式:$("选择器").行为(function(){});
事件:click\change
改变内容:val(),html()
改变样式:css()
动画:hide\show\fadeIn\fadeOut\slideUp\slideDown\animate
jquery-validate
数据库的事务
事务:保证操作的一致性
事务的特性:
A:原子性
C:一致性
I:隔离性
D:持久性
事务可能会出现的问题:
1、脏读:读取到了未提交的内容
2、虚读:读取的数据前后不一样:insert \delete
3、不可重复读:读取的数据内容不一致:update
事务的隔离级别:
1、串行化 全部避免
2、Repeatable Read 避免脏读和不可重复读
3、Commited Read 避免脏读
4、UnCommited Read 什么都没有避免
数据库连接池
Dbcp----
C3P0----
Druid---德鲁伊
DbUtils------
//反射+注解
Hibernate:
ORM(对象关系映射)
配置文件:
1、全局配置文件:hibernate.cfg.xml
四本一言
四个基本项:驱动、url、用户名、密码
一言:方言 根据数据库生成sql
二级缓存
查询缓存
DDL语句的执行
映射文件
2、映射配置文件:类名.hbm.xml
类----表
主键
属性---字段
多表关系
Hibernate的检索方式:
1、OID update\delete\get\load
2、HQL 面向对象查询语言 表---类 字段---属性 数据--对象 Query
3、SQL NativeQuery SQLQuery
4、对象导航图:多表关系 <one-to-one> <many-to-one><one-to-many><many-to-many>
5、QBC 5.2.x版本过时 JPA
openSession和getCurrentSession?
getCurrentSession:一个线程就一个Session
默认关闭,要求增删改查都需要开启事务
使用步骤:
1、在全局配置文件中,使用<property name="hibernate.current_session_context_class">thread</property>
ThreadLocal---Map<Thread,E>
Hibernate的懒加载:
1、类
lazy=true
2、多表关系
Hibernate的多表关系的配置
一对一
1、主键关联 <one-to-one name constrained=true>
2、外键关联 <many-to-one name unique=true column=>
一对多
<set name>
<key column="外键名称">
<one-to-many class>
</set>
多对一
<many-to-one name column="外键名称">
多对多
隐式:
<set>
<key column="当前表在关联表中的外键名">
<many-to-many class column="另一张表在关联表中的外键名称">
</set>
显式:
使用一对多和多对一代替
<one-to-one>
<many-to-one>
<one-to-many>
<many-to-many>
Hibernate的对象状态:
1、瞬时态 跟Session无关------------- 未追上
2、持久态 跟Session有关-------------- 追上 evict/clear
3、游离态 之前跟Session有关---------- 前任
持久态的对象的属性发生变化的时候,当事务提交会自动更新到数据库
Hibernate的缓存机制:
1、一级缓存 存储在Session 默认有
2、二级缓存 存储在SessionFactory 默认无
3、集群缓存 Redis
Hibernate注解:
@Entity
@Table
@Column
@Id
@Basic
@Transient 标记属性不是字段
@JoinColumn
@JoinTable
@OneToOne
@OneToMany
@ManyToOne
@ManyToMany
@Cache
Spring
IOC:控制反转 DI:依赖注入
Spring的IOC的使用:
<bean class id >
Bean的实例数量:
singleton 当前Bean的实例在Spring的IOC容器中只有一个
prototype 每次调用就是创建新的实例
request
session
AOP:面向切面编程
What:做什么 ----通知
When:在什么时候---配置通知出现的时机
Where:在哪里------切入点表达式
动态代理:
1、jdk----要求目标类 实现接口
2、cglib--
Spring的事务的类型:
1、声明式事务
2、编程式事务
Spring:SpEL表达式
格式:#{表达式}
Spring的#和$的区别
#:SpEl表达式
$:外部文件的key的值 properties
Spring Jdbc模板
SpringMVC:
Web的MVC框架
SpringMVC的前端控制器:
SpringMVC的控制器的方法的定义
SpringMVC对JSON数据的解析和创建:@RequestBody,@ResponseBody
SpringMVC实现文件上传和下载
SpringMVC的拦截器
SpringMVC的自定义转换器---日期转换器
SpringMVC的标签
SpringMVC的标签验证:1、自带验证 2、JSR 303 Hibernate
SpringMVC异常处理:
局部处理和全局处理
SpringMVC国际化 基本不用
MyBatis
ORM框架的实现
半自动框架 现在最火的框架
配置文件:
全局配置文件
接口配置文件
MyBatis的缓存机制
1、一级缓存
存储在SqlSession
2、二级缓存
MyBatis自身实现了二级缓存
缓存策略:
1、LRU:最近最少使用原则
2、FIFO:先进先出 队列存储 栈:先进后出
3、Weak:弱引用
4、Soft:软引用
Java四种引用关系:
1、强引用
new 类名()
只要引用存在,那么哪怕内存不足GC也不会回收
2、弱引用
如果内存不足时,GC会回收弱引用的内存
3、软引用
只要GC运行,都有可能回收内存
4、虚引用
想收就收,回收对象时,会调用finalize
MyBatis实现多表关系
<ResultMap>
MyBatis动态SQL
<if>
<where>
<set> <trim><choose><when><foreach>
MyBatis的注解
@Insert
@Update
@Select
@Delete
@ResultMap
Maven:
1、管理jar
2、构建项目
Maven的命令:
clear
package
install
build
state
Maven生命周期:
1、清空
2、构建
3、站点
Maven允许依赖的传递
jar的范围:
scope:
test:测试
compile:编译、测试、运行、打包
provided:编译
runtime:编译、测试、运行
system:系统,非Mavenjar包
Maven的打包方式:
1、jar
2、war
3、pom
Maven项目允许继承
Maven的聚合:Maven Project+Maven Module
JVM-Sandbox
四阶段目标:
1、掌握技术点
2、解决问题的能力
3、主动学习能力
4、表达能力
毕业的目标:独立开发项目