SpringMVC学习笔记——视频补充

Spring web mvc介绍

SpringMVC是一个表现层框架
作用:

  • 从请求中接收传入的参数
  • 将处理后的结果数据返回给页面展示
    技术选型:某个项目用啥框架;

入门程序

程序逻辑:
web程序执行后,加载web.xml文件;该文件中配置了前端控制器,相应的加载对应的springmvc.xml;Springmvc.xml中,定义扫描项目中含controller注解的类;
当浏览器请求访问时,前端控制器找到对应的controller。

Springmvc架构

HandlerMapping:实现url到请求方法的映射;根据url找到对应的方法;
key就是@RequestMapping中字符串的名字;value就是请求方法对象;
HandlerMapping返回给前端控制器一个处理器执行链,包含若干HanlerInterceptor,即拦截器;及一个Handler。若拦截器拦截不成功,则执行Handler(这里的Handler,就是Controller,就是请求方法)。
前端控制器,向HandlerAQdapter发送执行Handler的请求;
HandlerAdapter适配器:根据不同的Handler,找到对应的处理器适配器,去执行Handler;
适配器是啥:比如说超级本上只有usb接口,要连其他屏幕等设备,需要通过usb-其他接口的适配器进行连接;
这里使用适配器的原因:前端控制器由于功能庞大,如果再能处理controller,就太庞大了;
(又,可以使用注解@Controller,或者实现Controller接口,都可以)
适配器,有多种,比如说,注解适配器,实现接口的适配器
处理器适配器选择不同种的适配器,执行Handler,返回ModelAndView给处理器适配器。
ModelAndView,
包括两个东西,Model:包含返回给页面的数据;
View:标志返回到哪个页面;
处理器适配器将ModelAndView返回给前端控制器;
前端控制器请求视图解析器ViewResolver解析视图;
视图包括啥:jsp,word,pdf,freemaker等都算视图;
CMS系统:内容管理;freemaker,用于生成内容(???)
视图解析器,也有很多个,比如说解析jsp的,解析pdf的;视图解析器返回给前端控制器一个View对象;返回给前端控制器静态html标签;
View对象:(视图对象)
springmvc三大主件:处理器映射器,处理器适配器,视图解析器;
编程需要写的几个东西:Controller,视图(jsp),

三大主件

处理器适配器和处理器映射器

在对应包中,有个DispatcherServlet配置文件,里面映射器和适配器都有多个;
如果不在SpringMvc.xml中显式配置,springMvc回去默认的dispatcherServlet.xml中,查找对应的处理器映射器和处理器适配器去使用,这样每个请求都要扫描一次它的默认配置文件,效率非常低;所以要在SpringMvc.xml中显式的配置处理器映射器和处理器适配器。

    <!-- 已废止 -->
    <!-- 注解形式的处理器映射器 -->
    <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"></bean>
    <!-- 注解形式的处理器适配器 -->
    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"></bean>
    <!-- 配置最新版的注解的处理器映射器 -->
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"></bean>
    <!-- 配置最新版的注解的处理器适配器 -->
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"></bean>
    <!-- 问题:手动配置费时费力 -->
    <!-- 注解驱动:
    作用:替我们自动配置最新版的注解的处理器映射器和处理器适配器 -->
    <mvc:annotation-driver></mvc:annotation-driver>

Note:
注解扫描和注解驱动的区别:
注解扫描:扫描注解的,@Controller;
注解驱动:自动配置最新版的注解的处理器映射器和处理器适配器;
再解释:
注解驱动,是比如说,有多个处理器映射器,当前端控制器发送Handler过来时,根据Handler是注解形式的(写了@Controller)还是实现Controller接口的(或其他),来选择一个合适的处理器映射器;如果不手动配,则每次请求都要扫描默认配置文件(Dispatcherservlet)中的数据,找一个合适的;手动配置后,提高效率;
注解扫描:扫描@Controller的;瞎xx理解:不扫描不知道是是Controller啊,我猜;

视图解析器

默认使用jsp视图解析器,不在SpringMvc中配置也可以。但是在Controller中,返回ModelAndView时,setViewName中写的内容就很麻烦。

        ModelAndView modelAndView = new ModelAndView();
        //将返回给页面的数据放入模型和视图对象中
        //第一个参数是数据名,即:attributename,第二个参数是数据,即:attributevalue
        modelAndView.addObject("itemList", itemList);
        //指定返回的页面位置
        modelAndView.setViewName("/WEB-INF/itemList.jsp");
        return modelAndView;

配置视图解析器:
作用:
在controller中指定页面路径时就不用写完整的页面名称了,可以直接写页面去掉扩展名的名称

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- 真正的页面路径 = 前缀 + 去掉后缀名的页面名称 + 后缀 -->
        <!-- 前缀 -->
        <property name="prefix" value="/WEB-INF/jsp"></property>
        <!-- 后缀 -->
        <property name="suffix" value=".jsp"></property>
    </bean>

总结

核心配置文件中三个配置:

  • 注解扫描;
  • 注解驱动;
  • 视图解析器

猜你喜欢

转载自blog.csdn.net/shelly_Chestnut/article/details/81510601