Spring–Spring Mvc --Mybatis(SSM框架)的配置(一)
MVC思想
在开始是ssm框架的建立前,先要了解mvc的思想。什么是mvc?
简要说明即-M-model模型层,V-view视图层,C-control控制层
MVC要实现的目标是将软件用户界面和业务逻辑分离以使代码可扩展性、可复用性、可维护性、灵活性加强。
Model(模型) - 模型代表一个存取数据的对象或 JAVA POJO。它也可以带有逻辑,在数据变化时更新控制器。
View(视图) - 视图代表模型包含的数据的可视化。
Controller(控制器) - 控制器作用于模型和视图上。它控制数据流向模型对象,并在数据变化时更新视图。它使视图与模型分离开。
MVC思想把程序强制性的分成三层,把应用程序的输入、处理和输出分开,各自执行自己的任务。用户在视图层发送请求到控制层,控制层接受请求向模型层请求数据,模型层返回数据到控制层,控制层承载数据响应视图层请求,最终在视图层渲染数据。
Spring MVC
Spring MVC是Spring的一个模块,提供web层解决方案(基于MVC设计架构)
spring-mvc流程图:
步骤:
第一步:用户发起request请求,请求至DispatcherServlet前端控制器。
第二步:DispatcherServlet前端控制器请求HandlerMapping处理器映射器查找Handler, DispatcherServlet前端控制器,相当于中央调度器,各各组件都和前端控制器进行。交互,降低了各各组件之间耦合度。
第三步:HandlerMapping处理器映射器,根据url及一些配置规则(xml配置、注解配置)查找Handler,将Handler返回给DispatcherServlet前端控制器。
第四步:DispatcherServlet前端控制器调用适配器执行Handler,有了适配器通过适配器去扩展对不同Handler执行方式(比如:原始servlet开发,注解开发)。
第五步:适配器执行Handler,Handler是后端控制器,当成模型。
第六步:Handler执行完成返回ModelAndView,ModelAndView:springmvc的一个对象,对Model和view进行封装。
第七步:适配器将ModelAndView返回给DispatcherServlet。
第八步:DispatcherServlet调用视图解析器进行视图解析,解析后生成view,视图解析器根据逻辑视图名解析出真正的视图。View:springmvc视图封装对象。
第九步:ViewResolver视图解析器给前端控制器返回view。
第十步:DispatcherServlet调用view的渲染视图的方法,将模型数据填充到request域。
第十一步:DispatcherServlet向用户响应结果返回JSP页面或者Json数据。
Spring MVC接口
DispatcherServlet:
前端控制器(也称总控制器),把请求给转发到具体的控制类
HandlerMapping:
映射处理器,负责映射中央处理器转发给controller时的映射策略,一共三种:
BeanNameUrlHandlerMapping:
按着controller的name来映射寻找。
SimpleUrlHandlerMapping: :
按着简单url来映射寻找。
ControllerClassNameHandlerMapping:
控制类的类名控制器,访问时类名首字母需要小写。
Controller
具体处理请求的控制器。
ModelAndView
服务层返回的数据和视图层的封装类。
ViewResolver
视图解析器,解析具体的视图
Interceptors(根据具体的业务)
拦截器,负责拦截我们定义的请求然后做处理工作
spring-mvc配置文件
在WEB.xml文件中配置前端控制器(分发DispatcherServlet):
<!-- 1、前端控制器 -->
<servlet>
<servlet-name>springMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 加载springMVC配置 -->
<init-param>
<!-- 配置文件地址配置 -->
<!-- 如果不配置contextConfigLocation,默认查找的配置文件名称classpath下的:
servlet名称+"-servlvet.xml",即springmvc-servlvet.xml -->
<param-name>contextConfigLocation</param-name>
<param-value>springMVC.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springMVC</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
创建springmvc.xml文件
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.2.xsd ">
<!-- 1.配置处理映射器 -->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />
<!-- 2.配置Handler 由于使用了BeanNameUrlHandlerMapping处理映射器,name配置为url -->
<bean id="userController" name="/userList.do" class="com.lp.controller.UserController" />
<bean id="LoginController" name="/login.do" class="com.lp.controller.LoginController" />
<!-- 3.处理器适配器 -->
<!--简单url映射 集中配置bean的id对应 的url -->
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/userList.do">userController</prop>
<prop key="/login.do">LoginController</prop>
</props>
</property>
</bean>
<!-- 4.配置视图解析器 -->
<!-- 配置视图解析器 要求将jstl的包加到classpath -->
<!-- ViewResolver -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
升级版(配置注解开发):
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.2.xsd ">
<!-- 1.配置注解开发Handler -->
<context:component-scan base-package="控制层地址"></context:component-scan>
<!-- 2.注解映射器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" />
<!-- 3.注解适配器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" />
<!-- 4.配置视图解析器 -->
<!-- 配置视图解析器 要求将jstl的包加到classpath -->
<!-- ViewResolver -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
在springmvc.xml文件中优化注解扫描
<!-- 1.配置注解开发Handler -->
<!-- <bean class="需要加载注解包地址" /> -->
<!-- 1+.注解扫描 -->
<!-- 使用spring组件扫描 -->
<context:component-scan base-package="扫描注解包地址" />