SpringMVC的架构(十七)

框架结构

对于SpringMVC的架构来说,可以归纳为“一个中心,三个基本点”,也就是一个中央控制器(前端控制器:DispatcherServlet),和三大组件(处理器映射器:HandlerMapping,处理器适配器:HandlerAdapter,视图解析器:ViewResolver

主要框架结构如图:

在这里插入图片描述

具体的架构流程

1、 用户发送请求至前端控制器DispatcherServlet

2、 DispatcherServlet收到请求调用HandlerMapping处理器映射器。

3、 处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。

4、 DispatcherServlet通过HandlerAdapter处理器适配器调用处理器

5、 执行处理器(Controller,也叫后端控制器)。

6、 Controller执行完成返回ModelAndView

7、 HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet

8、 DispatcherServlet将ModelAndView传给ViewReslover视图解析器

9、 ViewReslover解析后返回具体View

10、DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)。

11、 DispatcherServlet响应用户

组件说明

说明:在springmvc的各个组件中,处理器映射器、处理器适配器、视图解析器称为springmvc的三大组件。
需要用户开发的组件有handler、view

  • DispatcherServlet:前端控制器(控制中心)

    用户请求到达前端控制器,它就相当于mvc模式中的c,dispatcherServlet是整个流程控制的中心,由它调用其它组件处理用户的请求,dispatcherServlet的存在降低了组件之间的耦合性。

  • HandlerMapping:处理器映射器(将请求url映射到指定的处理器中的处理方法)

    HandlerMapping负责根据用户请求url找到Handler(处理器),springmvc提供了不同的映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等。

  • HandlAdapter:处理器适配器(调用相应处理器,并且返回结果)

    通过HandlerAdapter对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行。

  • ViewResolver:视图解析器

    View Resolver负责将处理结果生成View视图,View Resolver首先根据逻辑视图名解析成物理视图名(具体的页面地址),再生成View视图对象,最后对View进行渲染(填充数据)将处理结果通过页面展示给用户。

  • Handler:处理器(处理具体业务,由我们自己定义)

    Handler 是继DispatcherServlet前端控制器的后端控制器,在DispatcherServlet的控制下Handler对具体的用户请求进行处理。

  • View:视图(也就是html,jsp页面,由我们自己定义)

    springmvc框架提供了很多的View视图类型的支持,包括:jstlView、freemarkerView、pdfView等。我们最常用的视图就是jsp。

SpringMVC 配置三大组件
注解映射器和适配器
  • 配置处理器映射器

注解式处理器映射器,对类中标记了@ResquestMapping的方法进行映射。

根据@ResquestMapping定义的url匹配@ResquestMapping标记的方法,匹配成功返回HandlerMethod对象给前端控制器。

HandlerMethod对象中封装url对应的方法Method

注解描述:
@RequestMapping:定义请求url到处理器功能方法的映射

在dispatcher-servlet.xml中配置如下:

<!-- 配置处理器映射器 -->
<bean
	class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" />
  • 配置处理器适配器

注解式处理器适配器,对标记@ResquestMapping的方法进行适配。

在dispatcher-servlet.xml配置文件中配置如下:

<!-- 配置处理器适配器 -->
<bean
	class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" />
  • 注解驱动方式配置(常用)

手动直接配置处理器映射器和处理器适配器比较麻烦,可以使用注解驱动来加载。

SpringMVC使用< mvc:annotation-driven>自动加载RequestMappingHandlerMapping和RequestMappingHandlerAdapter

在dispatcher-servlet.xml配置文件中使用< mvc:annotation-driven>替代注解处理器和适配器的配置。

在dispatcher-servlet.xml中配置如下:

<!--<mvc:annotation-driven>会自动注册RequestMappingHandlerMapping与RequestMappingHandlerAdapter两个Bean,-->
<!--这是Spring MVC为@Controller分发请求所必需的,并且提供了数据绑定支持-->
<!--注解驱动,加载处理器映射器,处理器适配器-->
<mvc:annotation-driven/>
注册视图解析器

视图解析器使用SpringMVC框架默认的InternalResourceViewResolver,这个视图解析器支持JSP视图解析

在dispatcher-servlet.xml配置文件中配置如下:

<!--与controller注解类中的返回值相结合,组成完整的返回值路径,比如返回的字符串hello-->
<!--prefix前缀属性加在hello前面,suffix后缀属性加在hello后面-->
<!--完整的路径就是/WEB-INF/jsp/比如返回的字符串hello.jsp-->
<!--视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
      id="internalResourceViewResolver">
    <!--prefix前缀属性-->
    <property name="prefix" value="/WEB-INF/jsp/"/>
    <!--suffix后缀属性-->
    <property name="suffix" value=".jsp"/>
</bean>

逻辑视图名需要在controller中返回ModelAndView指定或者字符串,比如逻辑视图(jsp的名称)名为itemList,

配置好视图解析器前缀和后缀,只需要设置逻辑视图就可以了。

视图解析器根据前缀+逻辑视图名+后缀拼接出来物理路径

则最终返回的jsp视图地址:

“WEB-INF/jsp/itemList.jsp”

controller中的配置如下:

@Controller
@RequestMapping("/mvc")//里面放的是请求的url,和用户请求的url进行匹配
public class controllerDemo {

    @RequestMapping("/")
    public String hello(){
        //和dispatcher-servlet.xml中的prefix,suffix属性结合形成完整的页面路径
        //prefix前缀属性加在hello前面,suffix后缀属性加在hello后面
        // 完整的路径就是/WEB-INF/jsp/比如返回的字符串hello.jsp
        return "hello";
    }

	//方法上的@RequestMapping指的就是类上的url+方法上的url,更加细分的请求
    @RequestMapping("/list")
    public ModelAndView list(){
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("itemList");
        // 配置好视图解析器前缀和后缀,这里只需要设置逻辑视图就可以了。
	// 视图解析器根据前缀+逻辑视图名+后缀拼接出来物理路径
       //return WEB-INF/jsp/itemList.jsp
        return modelAndView;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值