SpringMVC框架
JavaEE体系结构包括四层,从上到下分别是应用层、Web层、业务层、持久层。Struts和SpringMVC是Web层的框架,Spring是业务层的框架,Hibernate和MyBatis是持久层的框架。
为什么要使用SpringMVC?
很多应用程序的问题在于处理业务数据的对象和显示业务数据的视图之间存在紧密耦合,通常,更新业务对象的命令都是从视图本身发起的,使视图对任何业务对象更改都有高度敏感性。而且,当多个视图依赖于同一个业务对象时是没有灵活性的。
SpringMVC是一种基于Java,实现了Web MVC设计模式,请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将Web层进行职责解耦。基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,SpringMVC也是要简化我们日常Web开发。
MVC设计模式
MVC设计模式的任务是将包含业务数据的模块与显示模块的视图解耦。这是怎样发生的?在模型和视图之间引入重定向层可以解决问题。此重定向层是控制器,控制器将接收请求,执行更新模型的操作,然后通知视图关于模型更改的消息。
初始SpringMVC
在 Spring 的基本架构中,红色圈起来的 Spring Web MVC ,也就是本系列的主角 SpringMVC,它是属于Spring基本架构里面的一个组成部分,属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面,所以我们在后期和 Spring 进行整合的时候,几乎不需要别的什么配置。
Spring+MVC=SpringMVC : 在spring的基础上,对MVC思想的一个实现,是一个MVC框架
SpringMVC: 对servlet做的一个封装,换成controller层
相对于struts2,SpringMVC和Spring结合的更加完美
SpringMVC入门程序
(1)web.xml
(2)springmvc.xml
<!-- 配置处理器适配器来执行Controlelr ,springmvc默认的是
SimpleControllerHandlerAdapter
-->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean>
<!-- 配置自定义Controller -->
<bean id="myController" name="/hello.do" class="org.controller.MyController"></bean>
<!-- 配置sprigmvc视图解析器:解析逻辑试图;
后台返回逻辑试图:index
视图解析器解析出真正物理视图:前缀+逻辑试图+后缀====/WEB-INF/jsps/index.jsp
-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsps/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
(3)自定义处理器
public class MyController implements Controller{
public ModelAndView handleRequest(HttpServletRequest arg0,
HttpServletResponse arg1) throws Exception {
ModelAndView mv = new ModelAndView();
//设置页面回显数据
mv.addObject("hello", "欢迎学习springmvc!");
//返回物理视图
//mv.setViewName("/WEB-INF/jsps/index.jsp");
//返回逻辑视图
mv.setViewName("index");
return mv;
}
}
(4)index页面
${hello}
(5)测试地址
http://localhost:8080/springmvc/hello.do
1
HandlerMapping
处理器映射器将会把请求映射为 HandlerExecutionChain 对象(包含一个 Handler 处理器对象、多个 HandlerInterceptor 拦截器)对象,通过这种策略模式,很容易添加新的映射策略。
处理器映射器有三种,三种可以共存,相互不影响,分别是BeanNameUrlHandlerMapping、SimpleUrlHandlerMapping和ControllerClassNameHandlerMapping;
BeanNameUrlHandlerMapping
默认映射器,即使不配置,默认就使用这个来映射请求。
//映射器把hello.do请求映射到该处理器
SimpleUrlHandlerMapping
该处理器映射器可以配置多个映射对应一个处理器.
testController testController //上面的这个映射配置表示多个*.do文件可以访问同一个Controller。ControllerClassNameHandlerMapping
该处理器映射器可以不用手动配置映射, 通过[类名.do]来访问对应的处理器.
//这个Mapping一配置, 我们就可以使用Controller的 [类名.do]来访问这个Controller.