java-web複習階段2

十一、文件上傳~~~
    Apache提供Commons-FileUpload
    SmartUpload
    Struts2文件上傳
步驟一:form表單使用post提交,而且表單添加 enctype="multipart/form-data",
實現多媒體封裝。
  表單項中<input type="file" name="myFile" >,file表單項必須有name屬性,不然不會上傳。
步驟二:開發後天程序處理文件上傳的數據。
   可使用Apache提供Commons-FileUpload來完成文件的上傳
二、文件保存的位置
3.防止上傳的文件重名覆蓋
4.防止同一個目錄下上傳文件過多mysql


十二、分頁(帶有查詢條件)~~~sql

1三、事務數據庫

事務的四大特性 ~
事務的四大特性是事務自己具備的特色。簡稱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 > Serializablepost

數據庫中的鎖:
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(本地線程變量)  ~~~
在線程內部保存數據,利用線程對象在線程執行的過程當中傳遞數據,另外因爲每個線程保存各自
的數據,因此能夠避免多線程併發安全的問題。
本質:是參數傳遞一種機制。
一、建立對象
private static ThreadLocal<Connection> tl = new ThreadLocal<Connection>(){
 protected Connection initialValue() {
  try {
   return DaoUtils.getConn();
  } catch (SQLException e) {
   e.printStackTrace();
   throw new RuntimeException(e);
  }
 }
};
二、經常使用的方法
set(Object obj)


get()
initialValue()
public void remove()

 

註解~~~
  反射註解

!!!動態代理

相關文章
相關標籤/搜索