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