什么是springMVC
springMVC框架原理
- 前端控制器遥倦、處理器映射器、處理器適配器退渗、試圖解析器
springMVC入門程序
- 目的:前端控制器导绷、處理器映射器犀勒、處理器適配器、試圖解析器的學(xué)習(xí)
非注解的處理器映射器妥曲、處理器適配器
注解的處理器映射器贾费、處理器適配器(掌握)
springMVC和mybatis整合(掌握)
springMVC注解開發(fā):
常用注解學(xué)習(xí)
參數(shù)綁定(簡單類型、pojo逾一、集合類型)
什么是mvc
mvc是一個(gè)設(shè)計(jì)模式铸本,mvc在b/s系統(tǒng)下的應(yīng)用
springMVC的框架
第一步:發(fā)起請求到前端控制器(DispatcherServlet)
第二步:前端控制器請求HandlerMapping查找Handler肮雨,可以根據(jù)xml配置遵堵、注解進(jìn)行查找
第三步:處理器映射器HandlerMapping向前端控制器返回Handler
第四步:前端控制器調(diào)用處理器適配器去執(zhí)行Handler
第五步:處理器適配器去執(zhí)行Handler
第六步:Handler執(zhí)行完成,給適配器返回ModelAndView
第七步:處理器適配器向前端控制器返回ModeAndView
ModeAndView是springMVC框架的一個(gè)底層對象怨规,包括Model和View
第八步:前端控制器請求視圖解析器去進(jìn)行試圖解析陌宿,根據(jù)邏輯視圖名解析成真正的視圖(jsp)
第九步:視圖解析器向前端控制器返回view
第十步:前端控制器進(jìn)行視圖渲染(就是將模型數(shù)據(jù)(在model and view中)填充到request域)
第十一步:前端控制器向用戶響應(yīng)結(jié)果
組件
- 前端控制器DispatcherServlet(一般不用程序員開發(fā))
作用:接受請求,響應(yīng)結(jié)果波丰,相當(dāng)于轉(zhuǎn)發(fā)器(中央處理器)
有了DispatcherServlet就減少了其他組件之間的耦合度 - 處理器映射器HandlerMapping(一般不用程序員開發(fā))
作用:根據(jù)請求的url查找Handler - 處理器適配器HandlerAdapter
作用:按照特定規(guī)則(HandlerAdapter要求的規(guī)則)去執(zhí)行Handler - 處理器Handler(需要程序員開發(fā))
注意:編寫Handler時(shí)按照HandlerAdapter的要求去做壳坪,這樣適配器才可以正確執(zhí)行Handler - 視圖解析器view resolver(一般不用程序員開發(fā))
作用:進(jìn)行視圖解析,根據(jù)邏輯視圖解析成真正的視圖(view) - 視圖view(需要開發(fā)jsp)
view是一個(gè)接口掰烟,實(shí)現(xiàn)類就是支持不同的view類型(jsp,freemarker,pdf……)
入門程序
- 配置前端控制器(web.xml下的<web-app內(nèi)>)
<!--配置springmvc前端控制器-->
<servlet>
<servlet-name>springMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--contextConfigLocation配置springmvc加載的配置文件(配置處理器映射器等等)
如果不配置contextConfigLocation默認(rèn)加載的是
/WBENB_INF/servlet名稱-servlet.xml(springmvc-servlet.xml)
-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/spring-web.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springMVC</servlet-name>
<!--第一種:*.action爽蝴,訪問以.action結(jié)尾由DispatcherServlet進(jìn)行解析
第二種:/ 所有訪問的地址都由DispatcherServlet進(jìn)行解析,
對于靜態(tài)文件的解析需要配置不讓DispatcherServlet進(jìn)行解析
使用此種方法可以實(shí)現(xiàn)RESTful風(fēng)格的url
-->
<url-pattern>/</url-pattern>
</servlet-mapping>
- 配置處理器映射器
在classpath下的springmvc.xml中配置處理器映射器
- 配置handler
在classpath下的springmvc.xml中配置Handler
將編寫的Handler在spring容器中加載
- 配置處理器適配器
在classpath下的springmvc.xml中配置處理器適配器
- 配置視圖解析器
在classpath下的springmvc.xml中配置視圖解析器
整合如下所示:
<!--配置Handler-->
<bean name="/queryItems.action" class="cn.persit.ssm.controller.ItemsController" />
<!--處理器映射器
將bean的name作為url進(jìn)行查找纫骑,需要在配置Handler時(shí)指定beanName(就是url)
-->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />
<!--處理器適配器
所有的處理器適配器都實(shí)現(xiàn)HandlerAdapter
-->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />
<!--視圖解析器
解析jsp視圖蝎亚,默認(rèn)使用jstl標(biāo)簽,故必須得有jstl包
viewClass:指定使用使用jstl標(biāo)簽
prefix:指定jsp路徑的前綴
suffix:指定jsp路徑的后綴
-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/web/" />
<property name="suffix" value=".jsp" />
</bean>
注解的映射器先馆、適配器
<!--注解適配器-->
<bean
class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" />
<!--注解映射器-->
<bean
class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" />
- 常用方式
<!--使用mvc的注解驅(qū)動(mvc:annotation-driven)代替注解驅(qū)動器和適配器的配置
mvc:annotation-driven默認(rèn)加載很多的參數(shù)綁定方法发框,
比如json轉(zhuǎn)換解析器就默認(rèn)加載了,
如果使用mvc:annotation-driven就不用配置驅(qū)動器和適配器
實(shí)際開發(fā)就是使用mvc:annotation-driven
-->
<mvc:annotation-driven>
</mvc:annotation-driven>
- 注解的Handler
盡量不使用繼承
@Controller
標(biāo)識它是一個(gè)控制器
成對出現(xiàn)(注解的映射器煤墙、注解的配置器)
@RequestMapping("/訪問名稱[url])
一般建議將url和方法名一致
<!--對于注解的Handler可以單個(gè)配置
實(shí)際開發(fā)中建議使用組件掃描
-->
<bean class="cn.persit.ssm.controller.ItemsController" />
<!--可以掃描controller梅惯、service……
這里讓其掃描Controller
-->
<context:component-scan base-package="cn.persit.ssm" >
</context:component-scan>