1.什么是spring mvc?
在了解spring mvc之前先了解一下什么是mvc?
答:mvc是一种设计模式,分为三层,模型层(m)、视图层(v)、控制层(c)
控制层(controller):客户端向发起request请求,控制层接收,然后想模型层发起请求处理.
模型层(model):进行请求的处理,包括service、dao、pojo等,然后将处理结果返回给控制层
视图层(view):进行视图解析,并渲染然后填充到request域,返回到控制层
重复实现了松耦合,实现了解耦。
spring mvc是spring框架的一部分,它和spring框架无须中间层的过度,是基于mvc的一类框架。
2.spring mvc的原理?
客户端发送request请求(url),前段控制器接收请求,然后根据url去查找handler,但是它不知道去查找哪个handler,但是有人知道,谁知道呢?这时候handler映射器上场了,它知道去查找哪个handler,于是,前端控制器就根据url向handler映射器发送查找handler的请求,这个时候,handler映射器按理来说就会返回查找的handler,但是这里handler映射器会返回一个执行链,这个执行链当中有N多个拦截器和handler。返回给handler给前端控制器,这个时候要去 执行handler,但是谁去执行呢?又上场一个人 叫handler适配器,于是乎,前段控制器向handler适配器发送请求执行handler,那handler适配器就去根据特定的规则,去执行handler处理器(controller),然后返回给处理器适配器一个modelandview对象,处理器适配器将modelAndView对象返回给前端控制器,前端控制器向视图解析器发送请求视图解析的请求,然后它返回一个物理视图给前端控制器,前端控制器将这个物理视图交由试图进行渲染并填充到request域当中,然后响应页面。
3.spring mvc的配置
1. 必须注意的东西:项目中最好是在和src同级目录下建立一个config文件夹,里边可以根据不同的框架的配置文件设立不同的文件夹,里边放置相应的配置文件。例如spring mvc框架 就将spring-mvc.xml文件放在里边。这样便于统一管理框架的配置文件。
2.在eclipse工具当中建立项目的时候,会看到build/classess这个路径,最好改成/WEB-ROOT/WEB-INF/Classes ,因为改成这样的路径,项目可以导入到myeclipse工具当中。
3.项目是在tomcat里边运行的,最终运行的视乎也是在tomcat里边,所以整个项目的文件夹在tomcat的安装路径下的webapps里边
设计两个配置文件:web.xml,spring-mvc.xml
在web.xml当中配置前端控制器
在spring-mvc.xml当配置处理器映射器、处理器适配器和试图解析器
首先:非注解的配置:有2种方法
<!-- 配置处理器-->
<bean id="handler的id值1" class="自己写的controller的路径">
<!-- 配置处理器映射器第一种方式-->
<bean class="org.springframwork.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<!-- 配置处理器映射器第一种方式-->
<bean class="org.springframwork.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mapping">
<prop key="访问的url1" >handler的id值1</props>
<prop key="访问的url2" >handler的id值2</props>
</property>
</bean>
<!-- 配置处理器适配器第一种方式-->
<bean class="org.springframwork.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
<!-- 配置处理器适配器第二种方式-->
第一种配置方式:controller的写法1
实现controller接口,
第二种配置方式:controller的写法2
实现HttpRequestHandler接口
配置试图解析器:
注意: 在视图解析器配置前缀和后缀之后:转发的视图的地址可以简写为:
modelAndView.setViewName("/items/itemList")
request.getRequestDispatcher("/items/itemList")
注解的配置方式:注解也有2种方式
说明:注解开发不需要实现其他的接口,
第一种:
在spring-mvc配置文件当中配置bean
<!-- 配置处理器适配器-->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
<!-- 配置处理器映射器-->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
第二种:
<mvc-annotation-driven></mvc-annotation-driven> //注解驱动 代替了上边的两种配置
在controller当中 在controller类上加@controller("/xxxx") 标识它是一个控制器,
在方法上加@RequestMapping("/list")对该方法使用url映射。一个方法对应一个url,一般情况下,和方法名一致,主要原因是便于后期维护
对于一个注解的handler(controller),可以进行单个配置 <bean class="controller的路径">,但是实际开发过程中存在多个handler,这时候明显不能一一的去配置,于是就有了包扫描组件
<context:component-scan base-package="包路径"></context:component-scan>