版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Web后端框架現(xiàn)代Web開(kāi)發(fā)與應(yīng)用
內(nèi)容提要Spring概述Web層框架-SpringMVC(SpringBoot)持久層框架-SpringData以及MyBatisSpring概述
4Spring概述RodJohnson《ExpertOne-on-OneJ2EEDevelopmentwithoutEJB》Spring是Rod主創(chuàng)的一個(gè)應(yīng)用于JavaEE領(lǐng)域的輕量應(yīng)用程序框架,其核心是一個(gè)IOC容器以及AOP實(shí)現(xiàn)。Spring框架模塊核心容器:Core,Beans,Context,ExpressionLanguage數(shù)據(jù)訪(fǎng)問(wèn)和整合模塊:JDBC,ORM,OXM,JMS,TransactionWeb模塊:Web,Web-Servlet,Web-Struts,Web-PortletAOP模塊測(cè)試模塊Spring框架的特點(diǎn)輕量級(jí)框架IOC(控制反轉(zhuǎn))容器AOP(面向切面編程)的支持聲明式的事務(wù)支持封裝和簡(jiǎn)化了JavaEE的很多API對(duì)各種框架的整合
6
7SpringCoreBeanFactory是springIOC的核心組件,是工廠(chǎng)模式的一種實(shí)現(xiàn),將實(shí)際代碼和依賴(lài)配置進(jìn)行了分離。
8控制反轉(zhuǎn)IoCIoC(Inversionofcontrol)也稱(chēng)為依賴(lài)注入DI(DependencyInjection)好萊塢原則:“Don‘tcallme,I’llcallyou.”控制:對(duì)象的生命周期和對(duì)象間的關(guān)系
實(shí)現(xiàn)目標(biāo)功能的松耦合:替換實(shí)現(xiàn)功能模塊方法一:將所有可能出現(xiàn)的實(shí)現(xiàn)模塊都準(zhǔn)備好,使用不同的調(diào)用方法。方法二:不改變調(diào)用方的調(diào)用方式,面向接口編程,并且用到工廠(chǎng)模式;分解依賴(lài),按照需要自動(dòng)“注入”相關(guān)對(duì)象;一般通過(guò)XML配置文件或注釋來(lái)決定注入方式。
9控制反轉(zhuǎn)IoC傳統(tǒng)做法不使用容器publicclassGreeting{publicvoidgreet(){Speakers=newSpeaker();s.sayHello();}}
10控制反轉(zhuǎn)IoC傳統(tǒng)做法注冊(cè)容器中的受管對(duì)象,通過(guò)JNDI等API訪(fǎng)問(wèn)classXxxDAO{privateDataSourceds;private
static
finalStringdataSourceJNDI="jdbcDataSource";privateConnectiongetConnection()throwsException{if(ds==null){InitialContextcontext=newInitialContext();ds=(DataSource)PortableRemoteObject.narrow(context.lookup(dataSourceJNDI),DataSource.class);}return
ds.getConnection();}public
voidadd(Objectxxx){ //...}}
11控制反轉(zhuǎn)IoCIoC(Inversionofcontrol)面向接口編程publicinterfacePCComponent{StringgetName();//名稱(chēng)doublegetPrice();//價(jià)格StringgetCompany();//廠(chǎng)家}publicinterfaceRamextendsPCComponent{intgetSize();//內(nèi)存大小voidinData();//讀數(shù)據(jù)voidoutData();//取數(shù)據(jù)}
12控制反轉(zhuǎn)IoCIoC(Inversionofcontrol)面向接口編程publicclassKingmaxRamimplementsRam{
publicintgetSize(){return512;}
publicvoidinData(){//讀入數(shù)據(jù)}
publicvoidoutData(){//輸出數(shù)據(jù)}
publicStringgetName(){return"Kingmax內(nèi)存";}
publicdoublegetPrice(){return300;}
publicStringgetCompany(){return"Kingmax公司";
}
}publicclassKingstoneRamimplementsRam{
publicintgetSize(){return512;}
publicvoidinData(){//讀入數(shù)據(jù)}
publicvoidoutData(){//輸出數(shù)據(jù)}
publicStringgetName(){return"Kingstone內(nèi)存";}
publicdoublegetPrice(){return200;}
publicStringgetCompany(){return"Kingstone公司";
}
}
13控制反轉(zhuǎn)IoCIoC(Inversionofcontrol)工廠(chǎng)模式publicclassBeanFactory{//框架化publicstaticObjectgetBean(StringaName){StringclassName=“**”;//根據(jù)讀取的類(lèi)名;returnClass.forName(className).newInstance();}}//設(shè)置配置文件,定義別名和類(lèi)名的映射…Ramram=(KingstoneRam)BeanFactory.getBean(“別名”);ram.getCompany();..從外部文件中獲取
14控制反轉(zhuǎn)IoCIoC(Inversionofcontrol)結(jié)合前兩者ApplicationContextcontext=newFileSystemXmlApplicationContext("applicationContext.xml");Computercomputer=(Computer)context.getBean("myComputer");computer.doWork();<beans><beanid="myMainboard"class="ioc.IntelBoard"><propertyname="ram"><beanclass="ioc.KingmaxRam"/></property><propertyname="cpu">
<beanclass="ioc.AMDCpu"/>
</property></bean><beanid="myComputer"class="ioc.Computer"><propertyname="mainboard"ref="myMainboard"/></bean></beans>控制反轉(zhuǎn)IoCIoC的優(yōu)勢(shì)將尋找和產(chǎn)生相關(guān)對(duì)象的責(zé)任交給了配置文件和讀取配置文件的工廠(chǎng)類(lèi)對(duì)象。減少了實(shí)現(xiàn)之間的緊耦合,鼓勵(lì)面向接口的設(shè)計(jì)。
允許應(yīng)用在代碼之外進(jìn)行重新設(shè)置關(guān)系。支持編寫(xiě)方便測(cè)試的獨(dú)立組件。
15Bean工廠(chǎng)采用配置的機(jī)制管理Bean,如XmlBeanFactory理論上可以采用各種配置文件格式–XML–屬性文件–數(shù)據(jù)庫(kù)–目錄LDAP
16<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEbeansPUBLIC"-//SPRING//DTDBEAN//EN""/dtd/spring-beans.dtd"><beans><beanid="..."class="...">...</bean><beanid="..."class="...">...</bean>...</beans>ApplicationContextApplicationContext是BeanFactory的子接口,添加了許多有用特征:–支持文本信息的解析–裝在文件資源的通用方法–發(fā)布事件WebApplicationContext是ApplicationContext的子接口XmlWebApplicationContext是WebApplicationContext的實(shí)現(xiàn),用于web應(yīng)用中
17
18BeanFactory位于org.springframework.beans
包下org.springframework.beans.factory接口
19XMLConfigurationFile<?xmlversion="1.0"?><!DOCTYPEbeansPUBLIC"-//SPRING//DTDBEAN//EN""/dtd/spring-beans.dtd"><beans><beanid="messageDisplay"class="test.SystemOutMessageDisplay"></bean><beanid="messageProducer"class="test.HelloMessageProducer"></bean><beanid="helloApp"class="test.HelloApp"><propertyname="display"> <reflocal="messageDisplay"/></property><propertyname="producer"> <reflocal="messageProducer"/></property></bean></beans>Beans.xml
20BeanFactoryExamplepublic
classTest{public
static
voidmain(String[]args){BeanFactoryfactory=newXmlBeanFactory(
newClassPathResource("/Beans.xml"));HelloApphelloApp=(HelloApp)factory.getBean("helloApp");helloApp.displayProducedMessage();}}ApplicationContextcontext=newFileSystemXmlApplicationContext("applicationContext.xml");Greetinggreeting=(Greeting)context.getBean("Greeting");實(shí)際中更多采用
21SpringIOC容器非入侵式框架侵入式框架:一組類(lèi)與對(duì)象按照既定的規(guī)則交互。如果需要使用框架的功能,用戶(hù)必須實(shí)現(xiàn)框架的接口。于是代碼與框架耦合,可移植性降低。publicclassxxximplementsEJBHome{ create(){} …….}
22SpringDependentInjection:依賴(lài)注入的三種方式constructor注入:在實(shí)例化時(shí)完成注入。運(yùn)行時(shí)難以改變(spring推薦),非侵入式編程。setter注入通過(guò)setXXX()方法注入,非侵入式編程。接口注入實(shí)現(xiàn)容器接口,由容器完成對(duì)象關(guān)系的建立。侵入式編程。
23SpringIOC容器容器:容納對(duì)象,并維護(hù)各個(gè)對(duì)象之間的關(guān)系通過(guò)配置文件管理對(duì)象間關(guān)系創(chuàng)建由容器完成“注入”(對(duì)象關(guān)系的建立)也由容器完成
24SpringDependentInjection:依賴(lài)注入注入方式——setter注入:setXXX()。
25SpringDependentInjection:依賴(lài)注入注入方式——constructor注入。在實(shí)例化時(shí)完成注入。
26SpringDependentInjection:依賴(lài)注入對(duì)其他bean的引用。
27Spring依賴(lài)注入采用注釋的配置@Component:定義一個(gè)通用組件,容器將POJO轉(zhuǎn)為容器管理的bean@Repository:Dao@Service:Service實(shí)現(xiàn)類(lèi)@Controller:Controller實(shí)現(xiàn)類(lèi)@Autowired:自動(dòng)裝配
28SpringSpring容器高層視圖Bean生命周期啟動(dòng)關(guān)閉
29
30SpringAOP
31AOP概念跨越多個(gè)模塊的關(guān)注點(diǎn)稱(chēng)為橫切關(guān)注點(diǎn)或交叉關(guān)注點(diǎn)(CrosscuttingConcerns)
32SpringAOPAspect(切面)解決跨越多個(gè)模塊的交叉關(guān)注點(diǎn)問(wèn)題,大多數(shù)是一些系統(tǒng)級(jí)的或者核心關(guān)注點(diǎn)外圍的問(wèn)題。是包含通知和切點(diǎn)的模塊化單元。
比如Log,Exception,Security,TransactionJoinpoint(
連接點(diǎn))應(yīng)用程序執(zhí)行過(guò)程中,切點(diǎn)匹配的特定點(diǎn)。比如方法調(diào)用前,方法執(zhí)行返回后,拋出異常時(shí)Advice(通知)一段代碼,定義了切面中的實(shí)際邏輯,即實(shí)現(xiàn)Pointcut(切點(diǎn))插入Advice的連接點(diǎn),定義了通知應(yīng)該在何處執(zhí)行。切點(diǎn)的描述比較具體,而且一般會(huì)跟連接點(diǎn)上下文環(huán)境結(jié)合。
33SpringAOPIntroduction(
引入)向現(xiàn)有的類(lèi)添加新方法和屬性。Target:(目標(biāo)對(duì)象)通知所針對(duì)的對(duì)象Proxy(代理)代理是將通知(Advice)應(yīng)用到目標(biāo)對(duì)象后創(chuàng)建的對(duì)象。Weaving(織入)將切面與應(yīng)用程序的目標(biāo)對(duì)象連接起來(lái)的過(guò)程。運(yùn)行時(shí)織入:大多數(shù)AOP采用,代理方式編譯器織入:使用專(zhuān)門(mén)的編譯器來(lái)編譯基于語(yǔ)言的擴(kuò)展,AspectJinterceptor(攔截器)實(shí)現(xiàn)對(duì)連接點(diǎn)進(jìn)行攔截,從而在連接點(diǎn)前或后加入自定義的切面模塊功能
34SpringAOP示例–業(yè)務(wù)接口packageaop;public
interfaceSayHello{ public
voidsayHello(Stringname);}
35SpringAOP示例–實(shí)現(xiàn)packageaop;public
classSayHelloImplimplementsSayHello{public
voidsayHello(Stringname){ System.out.println("Hello,"+name);}}
36SpringAOP示例-Advicepackageaop;importjava.lang.reflect.Method;importorg.springframework.aop.MethodBeforeAdvice;public
classMyAdviceimplementsMethodBeforeAdvice{public
voidbefore(Methodmethod,Object[]args,Objecttarget) throwsThrowable{ System.out.println(method.getName()+":");}}
37SpringAOP示例–beans.xml<?xmlversion="1.0"?><!DOCTYPEbeansPUBLIC"-//SPRING//DTDBEAN//EN""/dtd/spring-beans.dtd"><beans><beanid="sayHello"class="aop.SayHelloImpl"></bean><beanid="myAdvice"class="aop.MyAdvice"></bean><beanid="mySayHello"class="org.springframework.aop.framework.ProxyFactoryBean"><propertyname="proxyInterfaces"> <list><value>aop.SayHello</value></list></property><propertyname="target"><reflocal="sayHello"/></property><propertyname="interceptorNames"> <list><value>myAdvice</value></list></property></bean></beans>
38SpringAOP示例–調(diào)用Adviced方法packageaop;importorg.springframework.beans.factory.BeanFactory;importorg.springframework.beans.factory.xml.XmlBeanFactory;importorg.springframework.core.io.ClassPathResource;public
classTest{ public
static
voidmain(String[]args){BeanFactoryfactory=newXmlBeanFactory(newClassPathResource("aop/beans.xml"));SayHellohello=(SayHello)factory.getBean("mySayHello");hello.sayHello("Leo"); }}
39SpringAOP示例-輸出結(jié)果sayHello:Hello,LeoDemoSpringAOPDemoinDOSenv
40Advice類(lèi)型前置通知(BeforeAdvice)在目標(biāo)方法執(zhí)行前執(zhí)行后置通知(AfterAdvice)在目標(biāo)方法執(zhí)行后執(zhí)行,不考慮方法的返回值或異常。返回通知(AfterReturningAdvice)在目標(biāo)方法成功執(zhí)行并返回結(jié)果后執(zhí)行。異常通知(AfterThrowingAdvice)在目標(biāo)方法拋出異常后執(zhí)行。環(huán)繞通知(AroundAdvice)在目標(biāo)方法前后執(zhí)行,可以控制目標(biāo)方法的執(zhí)行過(guò)程。Advice類(lèi)型--SpringBeforeAdvice
41importjava.lang.reflect.Method;
importorg.springframework.aop.MethodBeforeAdvice;
publicclassBeforeAdviceimplementsMethodBeforeAdvice
{
//實(shí)現(xiàn)MethodBeforeAdvice的before方法
publicvoidbefore(Methodmethod,Object[]args,Objecttarget)
{
System.out.println("beforadvice");
}//endbefore
}//endclassBeforeAdvice
Advice類(lèi)型--SpringAfterreturningadvice
42importjava.lang.reflect.Method;
importorg.springframework.aop.AfterReturningAdvice;
publicclassAfterReturningAdviceImpimplementsAfterReturningAdvice
{
publicvoidafterReturning(ObjectreturnValue,Methodmethod,Object[]arg2,Objecttarget)throwsThrowable
{
System.out.println("afterReturning“);
}
}
Advice類(lèi)型--SpringAroundadvice
43importercept.MethodInterceptor;
importercept.MethodInvocation;
publicclassAroundAdviceimplementsMethodInterceptor
{
publicObjectinvoke(MethodInvocationmi)
{
Objectobj=null;
//dosomething....
returnobj;
}//endinvoke(...)
}//endclassAroundAdvice()
DemoSpring2AOPAroundinMyeclipseenvAdvice類(lèi)型--SpringAfterthrowingadvice
44importjava.lang.reflect.Method;
importorg.springframework.aop.ThrowsAdvice;
publicclassAfterThorwsAdviceimplementsThrowsAdvice
{
publicvoidafterThorwing(Throwablethrowable)
{
//dosomething....
}
publicvoidafterThrowing(Methodmethod,Object[]args,Objecttarget)
{
//dosomething....
}
}
SpringMVC
46SpringWeb
47SpringMVCSpringMVC概述SpringMVC是Spring技術(shù)棧為展現(xiàn)層提供的基于MVC設(shè)計(jì)理念的優(yōu)秀的Web框架。SpringMVC通過(guò)一套MVC注解,讓POJO成為處理請(qǐng)求的控制器,而無(wú)須實(shí)現(xiàn)任何接口。支持REST風(fēng)格的URL請(qǐng)求。采用了松散耦合可插拔組件結(jié)構(gòu),比其他MVC框架更具擴(kuò)展性和靈活性。
48SpringMVC
49SpringMVC處理流程
50SpringMVCDispatcherServlet前端控制器,進(jìn)行調(diào)度
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
51SpringMVC控制器類(lèi)HandlerMapping
52SpringMVCHandlerAdapter框架內(nèi)部使用,使得DispatcherServlet知道調(diào)用哪個(gè)Controller
53SpringMVC簡(jiǎn)單示例:HelloWorld步驟:加入SpringMVC所需要的jar包在web.xml中配置DispatcherServlet加入SpringMVC的配置文件編寫(xiě)處理請(qǐng)求的處理器,并標(biāo)識(shí)為處理器編寫(xiě)視圖
54SpringMVC簡(jiǎn)單示例:HelloWorld步驟:加入SpringMVC所需要的jar包在web.xml中配置DispatcherServlet加入SpringMVC的配置文件編寫(xiě)處理請(qǐng)求的處理器,并標(biāo)識(shí)為處理器編寫(xiě)視圖<servlet><servlet-name>dispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext-mvc.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>dispatcherServlet</servlet-name><url-pattern>/</url-pattern></servlet-mapping>
55SpringMVC簡(jiǎn)單示例:HelloWorld步驟:加入SpringMVC所需要的jar包在web.xml中配置DispatcherServlet加入SpringMVC的配置文件編寫(xiě)處理請(qǐng)求的處理器,并標(biāo)識(shí)為處理器編寫(xiě)視圖<!--配置視圖解析器:如何把handler方法返回值解析為實(shí)際的物理視圖--><beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver"><propertyname="prefix"value="/WEB-INF/views/"></property><propertyname="suffix"value=".jsp"></property></bean><!--配置自定掃描的包--><context:component-scanbase-package="fudan.adweb.springmvc"></context:component-scan>
56SpringMVC簡(jiǎn)單示例:HelloWorld步驟:加入SpringMVC所需要的jar包在web.xml中配置DispatcherServlet加入SpringMVC的配置文件編寫(xiě)處理請(qǐng)求的處理器,并標(biāo)識(shí)為處理器編寫(xiě)視圖
57SpringMVC簡(jiǎn)單示例:HelloWorld
58SpringMVC映射請(qǐng)求參數(shù)、請(qǐng)求方法或請(qǐng)求頭@RequestMapping的value、method、params及heads屬性值
分別表示請(qǐng)求URL、請(qǐng)求方法、請(qǐng)求參數(shù)及請(qǐng)求頭。它們之間是“與”的關(guān)系。
59SpringMVC映射請(qǐng)求參數(shù)、請(qǐng)求方法或請(qǐng)求頭@RequestMapping的value、method、params及heads分別表示請(qǐng)求URL、請(qǐng)求方法、請(qǐng)求參數(shù)及請(qǐng)求頭
60SpringMVC映射請(qǐng)求參數(shù)、請(qǐng)求方法或請(qǐng)求頭:注解通過(guò)@PathVariable可以將URL中占位符參數(shù)綁定到控制器處理方法的入?yún)⒅小<碪RL中的{xxx}占位符可以通過(guò)@PathVariable(“xxx”)綁定到操作方法的入?yún)⒅?。這對(duì)REST化提供了很好的支持。
61SpringMVC映射請(qǐng)求參數(shù)、請(qǐng)求方法或請(qǐng)求頭:注解在處理方法入?yún)⑻幨褂聾RequestParam可以把請(qǐng)求參數(shù)傳遞給處理方法。@RequestMapping(value="/testRequestParam")publicStringtestRequestParam(@RequestParam(value="username")Stringun,@RequestParam(value="age",required=false,defaultValue="0")intage){System.out.println("testRequestParam,username:"+un+",age:"+age);returnSUCCESS;}
62SpringMVC對(duì)REST的支持HTTP協(xié)議里面,四個(gè)表示操作方式的動(dòng)詞:GET:/order/1HTTPGET:得到id=1的orderPOST:/orderHTTPPOST:新增orderPUT:/order/1HTTPPUT:更新id=1的orderDELETE:/order/1HTTPDELETE:刪除id=1的orderHiddenHttpMethodFilter瀏覽器form表單只支持GET與POST請(qǐng)求Spring3.0添加了一個(gè)過(guò)濾器,可以將這些請(qǐng)求轉(zhuǎn)換為標(biāo)準(zhǔn)的http方法,使得支持GET、POST、PUT與DELETE請(qǐng)求。
63SpringMVC對(duì)REST的支持在Web.xml中注冊(cè)HiddenHttpMethodFilter表單中通過(guò)隱藏域通過(guò)post傳遞操作方法put<filter><filter-name>HiddenHttpMethodFilter</filter-name><filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class></filter><filter-mapping><filter-name>HiddenHttpMethodFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><formaction="springmvc/testRest/1"method="post"><inputtype="hidden"name="_method"value="PUT"/><inputtype="submit"value="TestRestPUT"/></form>
64SpringMVC映射請(qǐng)求參數(shù)、請(qǐng)求方法或請(qǐng)求頭:注解通過(guò)@RequestHeader即可將請(qǐng)求頭中的屬性值綁定到處理方法的入?yún)⒅?。@CookieValue可讓處理方法入?yún)⒔壎硞€(gè)Cookie值。
65SpringMVC使用POJO對(duì)象綁定請(qǐng)求參數(shù)值SpringMVC會(huì)按請(qǐng)求參數(shù)名和POJO屬性名進(jìn)行自動(dòng)匹配,自動(dòng)為該對(duì)象填充屬性值。支持級(jí)聯(lián)屬性。@RequestMapping("/testPojo")publicStringtestPojo(Useruser){System.out.println("testPojo:"+user);returnSUCCESS;}<formaction="springmvc/testPojo"method="post">username:<inputtype="text"name="username"/>password:<inputtype="password"name="password"/>email:<inputtype="text"name="email"/>age:<inputtype="text"name="age"/>city:<inputtype="text"name="address.city"/>province:<inputtype="text"name="vince"/><inputtype="submit"value="Submit"/></form>寫(xiě)一個(gè)User類(lèi),屬性和表單中的屬性一一對(duì)應(yīng)
66SpringMVC使用ServletAPI作為入?yún)⒖梢灾苯邮褂靡恍㏒ervletAPI作為入?yún)?。@RequestMapping("/testServletAPI")publicvoidtestServletAPI(HttpServletRequestrequest,HttpServletResponseresponse,Writerout)throwsIOException{System.out.println("testServletAPI,"+request+","+response);out.write("hellospringmvc");}支持的servletAPI
67SpringMVC處理數(shù)據(jù)模型SpringMVC提供了以下幾種途徑輸出模型數(shù)據(jù):ModelAndView:處理方法體可通過(guò)該對(duì)象添加模型數(shù)據(jù)Map及Model:處理方法返回時(shí),Map中的數(shù)據(jù)會(huì)自動(dòng)添加到模型中。@SessionAttributes:將模型中的某個(gè)屬性暫存到HttpSession中@ModelAttribute :方法入?yún)?biāo)注該注解后,入?yún)⒌膶?duì)象就會(huì)放到數(shù)據(jù)模型中
68SpringMVC處理數(shù)據(jù)模型ModelAndView既包含視圖信息,也包含模型數(shù)據(jù)信息。添加模型數(shù)據(jù):addObject方法,SpringMVC會(huì)把ModelAndView的model中數(shù)據(jù)放入到request域?qū)ο笾小TO(shè)置視圖:setViewName方法。視圖中訪(fǎng)問(wèn)通過(guò)${requestScope.user}
69SpringMVC處理數(shù)據(jù)模型Map及ModelSpringMVC在內(nèi)部使用了一個(gè)org.springframework.ui.Model接口存儲(chǔ)模型數(shù)據(jù)?;蛘呷?yún)閛rg.springframework.ui.ModelMap或java.uti.Map存放信息。 @RequestMapping("/testMap") publicStringtestMap(Map<String,Object>map){ System.out.println(map.getClass().getName()); map.put("names",Arrays.asList("Tom","Jerry","Mike")); returnSUCCESS; }names:${requestSs}<br><br>
70SpringMVC處理數(shù)據(jù)模型@SessionAttributes在模型中對(duì)應(yīng)的屬性暫存到HttpSession中。除了可以通過(guò)屬性名指定需要放到會(huì)話(huà)中的屬性外,還可以通過(guò)模型屬性的對(duì)象類(lèi)型指定哪些模型屬性需要放到會(huì)話(huà)中。例如@SessionAttributes(types=User.class)會(huì)將隱含模型中所有類(lèi)型為User.class的屬性添加到會(huì)話(huà)中。@SessionAttributes(value={“user1”,“user2”})@SessionAttributes(types={User.class,Dept.class})@SessionAttributes(value={“user1”,“user2”},types={Dept.class})
71SpringMVC處理數(shù)據(jù)模型@ModelAttribute:方法定義上時(shí):SpringMVC在調(diào)用目標(biāo)處理方法前,會(huì)先逐個(gè)調(diào)用在方法級(jí)上標(biāo)注了@ModelAttribute的方法。在方法的入?yún)⑶笆褂?/p>
@ModelAttribute注解:將方法入?yún)?duì)象和模型中對(duì)應(yīng)。
72SpringMVCSpringMVC如何解析視圖對(duì)于那些返回String,View或ModelMap等類(lèi)型的處理方法,SpringMVC也會(huì)在內(nèi)部將它們裝配成一個(gè)ModelAndView對(duì)象。
73SpringMVCSpringMVC如何解析視圖InternalResourceViewResolverJSP是最常見(jiàn)的視圖技術(shù),可以使用InternalResourceViewResolver作為視圖解析器:
74SpringMVCSpringMVC如何解析視圖重定向一般情況下,控制器方法返回字符串類(lèi)型的值會(huì)被當(dāng)成邏輯視圖名處理。如果返回的字符串中帶forward:或redirect:前綴時(shí),SpringMVC會(huì)對(duì)他們進(jìn)行特殊處理:將forward:和redirect:當(dāng)成指示符,其后的字符串作為URL來(lái)處理redirect:success.jsp:會(huì)完成一個(gè)到success.jsp的重定向的操作forward:success.jsp:會(huì)完成一個(gè)到success.jsp的轉(zhuǎn)發(fā)操作
75SpringMVC攔截器SpringMVC使用攔截器對(duì)請(qǐng)求進(jìn)行攔截處理。在Handler處理前后可以通過(guò)攔截實(shí)現(xiàn)一些功能
76SpringMVC用戶(hù)自定義攔截器實(shí)現(xiàn)HandlerInterceptor接口
77SpringMVC用戶(hù)自定義攔截器多個(gè)攔截器的執(zhí)行順序
不再調(diào)用其他的組件去處理請(qǐng)求,則使其返回false。
78SpringMVCSpringMVC詳細(xì)運(yùn)行流程
79SpringBootSpringBoot精要自動(dòng)配置:針對(duì)常見(jiàn)的應(yīng)用功能,SpringBoot自動(dòng)提供相關(guān)配置。起步依賴(lài):告訴SpringBoot需要什么功能,它就能引入需要的庫(kù)。命令行界面:SpringBoot的可選特性,只需寫(xiě)代碼就能完成完整的應(yīng)用程序,無(wú)需傳統(tǒng)項(xiàng)目構(gòu)建。Actuator:提供在運(yùn)行時(shí)檢視應(yīng)用程序內(nèi)部情況的能力。
80SpringBoot添加springboot核心依賴(lài)
81SpringBoot一個(gè)提供Rest化服務(wù)的簡(jiǎn)單示例數(shù)據(jù)訪(fǎng)問(wèn)與ORM框架什么是持久層持久層的作用:在系統(tǒng)邏輯層面上,專(zhuān)注于實(shí)現(xiàn)數(shù)據(jù)持久化的一個(gè)相對(duì)獨(dú)立的領(lǐng)域(Domain),將數(shù)據(jù)使用者和數(shù)據(jù)實(shí)體相關(guān)聯(lián)。類(lèi)比:消費(fèi)者商業(yè)流通渠道商品數(shù)據(jù)使用者持久化層數(shù)據(jù)什么是持久層解耦合表現(xiàn)層VIEW數(shù)據(jù)處理層MODEL業(yè)務(wù)邏輯數(shù)據(jù)邏輯JdbcTemplate簡(jiǎn)介JdbcTemplate是Spring框架對(duì)JDBC的封裝JdbcTemplate可處理連接的獲取和釋放,以及異常情況下的資源回收。將JDBC的異常封裝為Spring的DataAccessException,使異常處理更容易。支持SQL參數(shù)化,可防范SQL注入攻擊,使代碼更安全??梢詫⒉樵?xún)結(jié)果映射到Java對(duì)象,簡(jiǎn)化了數(shù)據(jù)提取和轉(zhuǎn)換的過(guò)程。支持批處理操作,可以一次性執(zhí)行多個(gè)SQL語(yǔ)句,提高了性能。JdbcTemplate簡(jiǎn)介配置JdbcTemplate在Spring配置文件中配置數(shù)據(jù)源和JdbcTemplate的Bean。JdbcTemplate簡(jiǎn)介使用JdbcTemplate常用方法:execute()、query()、update()、call()。用jdbcTemplate.query()方法接收兩個(gè)參數(shù):SQL查詢(xún)字符串和一個(gè)RowMapper對(duì)象。RowMapper對(duì)象用于將查詢(xún)結(jié)果的每一行映射到Java對(duì)象User中,查詢(xún)結(jié)果映射為User對(duì)象的列表,并返回該列表。SpringDataSpringData簡(jiǎn)介由Spring社區(qū)維護(hù)的項(xiàng)目,旨在提供各種數(shù)據(jù)訪(fǎng)問(wèn)技術(shù)的簡(jiǎn)化和集成。提供了一個(gè)通用的、統(tǒng)一的數(shù)據(jù)訪(fǎng)問(wèn)編程模型。提供了自動(dòng)化的數(shù)據(jù)訪(fǎng)問(wèn)功
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 健身器材行業(yè)人才培養(yǎng)基地建設(shè)與管理考核試卷
- 蘇州艾灸課程設(shè)計(jì)
- 防火防爆課程設(shè)計(jì)論文
- 木材加工機(jī)械課程設(shè)計(jì)
- 質(zhì)量管理管理課程設(shè)計(jì)
- 飲品培訓(xùn) 課程設(shè)計(jì)
- 資產(chǎn)評(píng)估課程設(shè)計(jì)任務(wù)
- 機(jī)器人方面課程設(shè)計(jì)
- 銅礦深部開(kāi)采安全保障-洞察分析
- 網(wǎng)絡(luò)金融安全風(fēng)險(xiǎn)管理-洞察分析
- 第5課《弘揚(yáng)勞動(dòng)精神勞模精神工匠精神》第1框《理解勞動(dòng)精神勞模精神工匠精神》-【中職專(zhuān)用】《職業(yè)道德與法治》同步課堂課件
- 2025美國(guó)國(guó)防部財(cái)年美軍武器裝備采購(gòu)預(yù)算中文版
- 70歲換證三力測(cè)試題附答案
- 中華醫(yī)學(xué)會(huì)利益沖突聲明模板
- 帶你玩轉(zhuǎn)VR虛擬現(xiàn)實(shí)智慧樹(shù)知到期末考試答案2024年
- DAM10KW中波發(fā)射機(jī)各單元的檢測(cè)與調(diào)整指導(dǎo)示意圖
- 物業(yè)采購(gòu)工作總結(jié)
- 人教版四年級(jí)上冊(cè)加減乘除四則混合運(yùn)算300題及答案
- 組織文化與領(lǐng)導(dǎo)力
- 膠粘性不良改善報(bào)告
- 河北省石家莊市橋西區(qū)2023-2024學(xué)年九年級(jí)上冊(cè)期末英語(yǔ)模擬試題(附答案)
評(píng)論
0/150
提交評(píng)論