day13-(事务mvc反射补充)
生活随笔
收集整理的這篇文章主要介紹了
day13-(事务mvc反射补充)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
回顧:
jsp:java服務器頁面jsp的腳本jsp的注釋html注釋java注釋jsp注釋<%-- --%>jsp的指令page:聲明頁面一些屬性重要的屬性:importpageEncodingcontentType了解屬性isErrorPage:一旦他的值為true jsp頁面就是可以使用exception內置對象include:靜態包含,(內容)taglib:導入標簽庫jsp的內置對象 9個out requestresponsesessionexceptionpageconfigapplicationpageContextjsp的域對象pageContextrequestsessionapplicationjsp的動作標簽jsp:forward 請求轉發jsp:include 動態包含(運行結果)
el:從jsp2.0使用的內置表達式語言替代<%=...%>作用:1.獲取域中的數據簡單${域.域中屬性名}${域中屬性名}:若找不到返回一個""注意:若屬性名字中有"."等特殊符號的時候必須使用 ${域["域中屬性名"]}復雜數組和list ${域中名稱[index]}map ${域中的名稱.鍵}javabean導航javabean:1.必須公共的類2.私有字段3.提供公共的訪問字段的方法 get|set|is一旦提供公共的方法之后,get|set|is后面的名稱首字母小寫,這個東西稱之為bean屬性例如:getName() name就是一個bean屬性4.提供一個無參構造器5.一般會實現序列化接口${域中的屬性名.bean屬性}2.執行運算注意:+empty三元運算符el的內置對象:cookie${cookie.cookie名稱.value}pageContext在jsp頁面動態的獲取項目路徑 /day11${pageContext.request.contextPath}
jstl:jsp 標準標簽庫apache組織使用步驟:1.導入jar包2.在頁面上導入標簽庫core:核心包c:if 判斷c:forEach 循環
//
分層和事務
案例-使用mvc思想完成轉賬操作
需求:在一個頁面上有匯款人 收款人 轉賬金額.一旦轉賬之后,匯款人金額減少,收款人金額增多.使用事務控制起來.
技術分析:mvc思想事務
///
mvc思想servlet-->缺點:生成html內容太麻煩|jsp--->缺點:閱讀起來不方便,維護比較困難|jsp+javabean:jsp的model1:jsp:接受請求,展示數據javabean:和數據打交道 |jsp+javabean+servletjsp的model2:jsp:展示數據javabean:和數據打交道servlet:接受請求,處理業務邏輯就是MVC思想的體現
MVC:就是將業務邏輯,代碼,顯示相分離的一種思想M:model 模型 作用:主要是封裝數據,封裝對數據的訪問V:view 視圖 作用:主要是用來展示數據 一般是jsp擔任的C:ctrl 控制 作用:接受請求,找到相應的javabean完成業務邏輯
/
jsp設計模式1 model1:(了解)javabean+jspjavabean在model1使用(了解)<!-- 接受值 --><jsp:useBean id="u" class="com.itheima.domain.User"></jsp:useBean><!--相當于 User u=new User()--><jsp:setProperty property="name" name="u"/><!--相當于 u.setName(...)--><jsp:setProperty property="password" name="u"/><!-- 打印值--><jsp:getProperty property="name" name="u"/>
//
反射:1.獲取class對象方式1:Class clazz=Class.forName("全限定名")方式2:Class clazz=類名.class;方式3:Class clazz=對象.getClass;2.可以獲取對應類的構造方法(了解)Constructor con = clazz.getConstructor(Class .. paramClass);Person p = (Person) con.newInstance(參數);3.可以通過clazz創建一個對象(了解)clazz.newInstance();//相當于調用的無參構造器4.可以通過clazz獲取所有的字段 getFiled()(了解中的了解)5.可以通過clazz獲取所有的方法Method m = clazz.getMethod("sleep");//獲取公共的方法Method m = clazz.getDeclaredMethod("sleep");//獲取任意的方法注意:若是私有的方法 必須讓該方法可以訪問m.setAccessible(true);6.Method對象的invoke是有返回值,他的返回值就是目標方法執行的返回值
總結:有了class對象之后,無所不能.javabean在model2中使用BeanUtils:可以看作封裝數據一個工具類使用步驟:1.導入jar包2.使用BeanUtils.populate(Object bean,Map map);/
分層:javaee的三層架構web作用:展示數據 ----jsp-----servlet-------接受請求找到對應的service,調用方法 完成邏輯操作信息生成或者頁面跳轉service 業務層作用:完成業務操作調用daodao(data access object 數據訪問對象)作用:對數據庫的curd操作
/
/
事務:就是一件完整的事情,包含多個操作單元,這些操作要么全部成功,要么全部失敗.例如:轉賬包含轉出操作和轉入操作.mysql中的事務:mysql中事務默認是自動提交,一條sql語句就是一個事務.開啟手動事務方式方式1:關閉自動事務.(了解)set autocommit = off;方式2:手動開啟一個事務.(理解)start transaction;-- 開啟一個事務commit;-- 事務提交rollback;-- 事務回滾擴展:oracle中事務默認是手動的,必須手動提交才可以.例如:創建數據庫和表create database day13;use day13;create table account(name varchar(20),money int);insert into account values('aa','1000');insert into account values('bb','1000');完成 aa給bb轉500;update account set money = money - 500 where name='aa';update account set money = money + 500 where name='bb';java中的事務:Connection接口的api:★setAutoCommit(false);//手動開啟事務commit():事務提交rollback():事務回滾擴展:了解 Savepoint還原點void rollback(Savepoint savepoint) :還原到那個還原點Savepoint setSavepoint() :設置還原點/步驟分析:1.數據庫和表2.新建一個項目 day13013.導入jar包和工具類驅動 jdbcUtilsc3p0及其配置文件和工具類dbutils4.新建一個account.jsp 表單5.accountservlet:接受三個參數調用accountservice.account方法完成轉賬操作打印信息6.account方法中:使用jdbc不考慮事務調用dao完成轉出操作調用dao完成轉入操作7.dao中一旦出現異常,錢飛了.要想避免這事情,必須添加事務,在service添加事務.為了保證所有的操作在一個事務中,必須保證使用的是同一個連接在service層我們獲取了連接,開啟了事務.如何dao層使用此連接呢????方法1:向下傳遞參數.注意連接應該在service釋放方法2:可以將connection對象綁定當前線程上jdk中有一個ThreadLocal類,ThreadLocal 實例通常是類中的 private static 字段,它們希望將狀態與某一個線程(例如,用戶 ID 或事務 ID)相關聯。 ThreadLocal的方法:構造:new ThreadLocal()set(Object value):將內容和當前線程綁定Object get():獲取和迪昂前線程綁定的內容remove():將當前線程和內容解綁內部維護了map集合map.put(當前線程,內容);map.get(當前線程)map.remove(當前線程)
/
DButils:1.創建queryrunner2.編寫sql3.執行sql
QueryRunner:構造:new QueryRunner(DataSource ds):自動事務new QueryRunner():手動事務常用方法:update(Connection conn,String sql,Object ... params):執行的cud操作query(Connection conn....):執行查詢操作注意:一旦使用手動事務,調用方法的時候都需要手動傳入connection,并且需要手動關閉連接事務總結:事務的特性:★★★ACID原子性:事務里面的操作單元不可切割,要么全部成功,要么全部失敗一致性:事務執行前后,業務狀態和其他業務狀態保持一致.隔離性:一個事務執行的時候最好不要受到其他事務的影響持久性:一旦事務提交或者回滾.這個狀態都要持久化到數據庫中不考慮隔離性會出現的讀問題★★臟讀:在一個事務中讀取到另一個事務沒有提交的數據不可重復讀:在一個事務中,兩次查詢的結果不一致(針對的update操作)虛讀(幻讀):在一個事務中,兩次查詢的結果不一致(針對的insert操作)通過設置數據庫的隔離級別來避免上面的問題(理解)read uncommitted 讀未提交 上面的三個問題都會出現read committed 讀已提交 可以避免臟讀的發生repeatable read 可重復讀 可以避免臟讀和不可重復讀的發生serializable 串行化 可以避免所有的問題了解演示臟讀的發生:將數據庫的隔離級別設置成 讀未提交set session transaction isolation level read uncommitted;查看數據庫的隔離級別select @@tx_isolation;避免臟讀的發生,將隔離級別設置成 讀已提交set session transaction isolation level read committed;不可避免不可重復讀的發生.避免不可重復讀的發生 經隔離級別設置成 可重復讀set session transaction isolation level repeatable read;演示串行化 可以避免所有的問題set session transaction isolation level serializable;鎖表的操作.四種隔離級別的效率read uncommitted>read committed>repeatable read>serializable四種隔離級別的安全性read uncommitted<read committed<repeatable read<serializable開發中絕對不允許臟讀發生.mysql中默認級別:repeatable readoracle中默認級別:read committedjava中控制隔離級別:(了解)Connection的apivoid setTransactionIsolation(int level) level是常量///
//////
上午回顧:
jsp的設計模式model1:jsp+javabean(了解)model2:jsp+servlet+javabeanjsp:展示數據servlet:接受請求,處理業務邏輯javabean:封裝數據,封裝對數據的訪問
MVC:將業務邏輯 代碼 顯示相分離M:model 模型 封裝數據,封裝對數據的訪問V:view 視圖 展示數據,目前jsp擔任C:ctrl 控制 接受請求
三層架構:web:作用:展示數據接受請求調用service頁面跳轉,信息的生成service作用:處理業務邏輯調用daodao作用:對數據庫的curd操作
///
反射:1.獲取class對象2.通過class獲取構造器3.通過class獲取字段4.通過class獲取指定的方法5.可以執行方法
/
事務:就是一件完整的事情,可以包含多個操作單元,這些單元要么全部成功,要么全部失敗
mysql中的事務(了解)默認自動提交. 控制事務:1.關閉自動事務2.手動打開一個事務start transaction;commit;rollback;
java中事務:(★)Connection的apisetAutoCommit(false):手動開啟事務commit():事務提交rollback():事務回滾
/
如何使用同一個connection1.向下傳遞2.將連接綁定到當前線程ThreadLocalset(Object value)Object get()remove()
//
DBUtils中事務控制QueryRunner:構造:new QueryRunner(Datasource ds)://自動事務.調用方法的不需要傳入connection,資源不用我們釋放.new QueryRunner()://手動事務.調用方法的必須傳入connection,需要手動提交事務或者回滾事務.必須手動的釋放資源
/
事務的特性 ★★★ACID原子性 一致性 隔離性 持久性
不考慮隔離性會出現的讀問題★★臟讀 不可重復度 虛讀
數據庫的隔離級別read uncommitted 讀未提交 不能避免任何問題★read committed 讀已提交 避免臟讀★repeatable read 可重復度 避免臟讀和不可重復讀的發生serializable 串行化 避免所有的問題/
servlet會創建一個servlet會更改web.xmlservletContext:全局管理者 上下文資源共享(域對象)獲取資源文件getRealPath()getResourceAsStream()獲取mimetypegetMimeType()面試題:serlvet的生命周期
rrresponse:往瀏覽器寫東西重定向:response.sendRedirect(絕對路徑)定時刷新:refreshsetHeader("refresh","秒數;url=跳轉路徑")metagetWriter():字符流getOutputStream():字節流文件下載:setContentType(mime類型)setHeader("content-disposition","attachment;filename="+文件名);request:獲取瀏覽器發送過來的數據獲取參數:3個中文亂碼:通用的方式new String(名字.getBytes("iso-8859-1"),"utf-8");針對post請求request.setCharacterEncoding("utf-8");請求轉發(域對象)request.getRequestDispatcher(內部路徑).forward(..);cookie和sessioncookie:瀏覽器端會話技術常用方法:new Cookie(String key,String value);寫回瀏覽器response.addCookie(Cookie c)獲取cookierequest.getCookies()cookie的apigetName()getValue()setMaxAge(int 秒)setPath(String path)session:服務器端的會話技術常用方法:獲取sessionrequest.getSession域對象:私有的數據創建:銷毀:服務器非正常關閉session超時手動刪除:session.invalidate()jsp el jstljsp的指令 include taglibjsp的內置對象 面試題jsp:forwardjsp:includeel:全部獲取數據執行運算jstl:ifforeach
轉載于:https://www.cnblogs.com/chenyanlong/p/9986190.html
總結
以上是生活随笔為你收集整理的day13-(事务mvc反射补充)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Leetcode39.Combinati
- 下一篇: IIS上部署MVC网站,打开后Exten