java-web复习阶段2
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java-web复习阶段2相关的知识,希望对你有一定的参考价值。
11、文件上传~~~
Apache提供Commons-FileUpload
SmartUpload
Struts2文件上传
步骤一:form表单使用post提交,并且表单添加 enctype="multipart/form-data",
实现多媒体封装。
表单项中<input type="file" name="myFile" >,file表单项必须有name属性,否则不会上传。
步骤二:开发后天程序处理文件上传的数据。
可以使用Apache提供Commons-FileUpload来完成文件的上传
2、文件保存的位置
3.防止上传的文件重名覆盖
4.防止同一个目录下上传文件过多
12、分页(带有查询条件)~~~
13、事务
事务的四大特性 ~
事务的四大特性是事务本身具有的特点。简称ACID。
原子性(Atomicity)
原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
一致性(Consistency)
事务前后数据的完整性必须保持一致。
隔离性(Isolation)
事务的隔离性是指多个用户并发访问数据库时,一个用户的事务不能被其它用户的事务所干扰,
多个并发事务之间数据要相互隔离。
持久性(Durability)
持久性是指一个事务一旦被提交,它对数据库中数据的改变就是"永久性"的,
接下来即使数据库发生故障也不应该对其有任何影响。
四大隔离级别 ~
那么数据库设计者在设计数据库时到底该防止哪些问题呢?防止的问题越多性能越低,
防止的问题越少,则安全性越差。
到底该防止哪些问题应该由数据库使用者根据具体的业务场景来决定,所以数据库的设计者并没有
把放置哪类问题写死,而是提供了如下选项:
数据库的四大隔离级别:
read uncommitted;
--- 不做任何隔离,可能造成脏读 不可重复度 虚读(幻读)问题
read committed;
-- 可以防止脏读,但是不能防止不可重复度 虚读(幻读)问题
repeatable read;
-- 可以防止脏读 不可重复度,但是不能防止 虚读(幻读)问题
serializable;
-- 可以防止所有隔离性的问题,但是数据库就被设计为了串行化的数据库,性能很低
从安全性上考虑:
Serializable > Repeatable Read > Read Committed > Read uncommitted
从性能上考虑:
Read uncommitted > Read committed > Repeatable Read > Serializable
数据库中的锁:
1.8.1. 共享锁
共享锁和共享锁可以共存,共享锁和排他锁不能共存.
在非Serializable隔离级别下做查询不加任何锁,
在Serializable隔离级别下做查询加共享锁.
1.8.2. 排他锁
排他锁和共享锁不能共存,排他锁和排他锁也不能共存,在任何隔离级别下做增删改都加排他锁.
1.8.3. 可能的死锁
mysql可以自动检测到死锁,错误退出一方执行另一方
1.9更新丢失问题~~~
1.9.1. 更新丢失问题的产生
两个并发的事务基于同一个查询结果进行修改,
后提交的事务忽略了先提交的事务对数据库的影响,造成了先提交的事务对数据库的影响丢失,
这个过程就叫做更新丢失。
乐观锁和悲观锁并不是数据库中真实存在的锁,而是两种解决方案的名字。
(1)悲观锁:悲观的认为每一次修改,都会操作更新丢失的问题。
在查询时,手动的加排他锁,从而在查询时就排除可能的更新丢失。
select * from users for update;
(2)乐观锁:
在表中设计版本字段,在进行修改时修改时,要求根据具体版本进行修改,并将版本字段+1,
如果更新失败,说明更新丢失,需要重新进行更新。
#两种解决方案各有优缺点:
如果查询多修改少,用乐观锁.
如果修改多查询少,用悲观锁。
ThreadLocal(本地线程变量) ~~~
在线程内部保存数据,利用线程对象在线程执行的过程中传递数据,另外由于每一个线程保存各自
的数据,所以可以避免多线程并发安全的问题。
本质:是参数传递一种机制。
1、创建对象
private static ThreadLocal<Connection> tl = new ThreadLocal<Connection>(){
protected Connection initialValue() {
try {
return DaoUtils.getConn();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
};
2、常用的方法
set(Object obj)
get()
initialValue()
public void remove()
注解~~~
反射注解
!!!动态代理
以上是关于java-web复习阶段2的主要内容,如果未能解决你的问题,请参考以下文章