1.Spring MVC概述

Spring MVC基于MVC模式实现,能够构建一个像Spring一样的灵活和松耦合的web应用程序。

2.Spring的工作流程


上面是一个请求的流程:

  • 1.请求的第一站是DispatcherServlet,所以Spring容器首先必须先在配置中加载DispatcherServlet的bean。DispatcherServlet就是前端控制器。

  • 2.DispatcherServlet任务是将请求转发到HandlerAdapter(控制器)中,但是该转发到哪个控制器呢?它会根据它携带的url在HandlerMapping(处理器映射)中找到这个控制器。

  • 3.找到了这个控制器,于是DispatcherServlet携带请求和对应参数发给这个控制器,说:“交给你了,兄弟!”

  • 4.控制器进行处理。

  • 5.控制器处理完,把数据打包,连同模型和视图名一同发回给DispatcherServlet,就是说:“我搞定了,拿去!”

  • 6.上面说到返回一个视图名,但是怎么找到对应的页面呢?这时候就有了ViewResolver(试图解析器),例如视图名为‘login’,ViewResolver会把他解析成“localhost:8080/project/login.html”

  • 7.有了返回的数据模型和对应的解析视图,于是对应视图,也就是localhost:8080/project/login.html就能把数据渲染出来。

3.DispatcherServlet的配置

DispatcherServlet可以通过web.xml进行配置,但是,由于Spring3.1功能的增强,同时为了更好地了解DispatcherServlet,将采用java将DispatcherServlet配置到servlet容器中。
下面就是Java实现的配置DispatcherServlet

public class SpittrWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer{@Overrideprotected Class<?>[] getRootConfigClasses() {return new Class<?>[] {RootConfig.class};}@Overrideprotected Class<?>[] getServletConfigClasses() {return new Class<?>[] {WebConfig.class};}@Overrideprotected String[] getServletMappings() {return new String[] {"/"};}}
  • a protected String[] getServletMappings()这个方法会将一个或多个路径映射到DispatcherServlet上,他映射的是“/”,表示处理进入应用的所有请求。

剩下两个函数,需要了解两个“应用上下文”,SpringWeb中有两个应用上下文,DispatcherServlet和ContextLoaderListener加载的上下文。

DispatcherServlet加载控制器,视图解析器,以及处理器映射的bean。
ContextLoaderListener加载应用中的其他bean,例如后端的中间层和数据层。

  • b.protected Class<?>[] getServletConfigClasses()方法返回带有@Configuration注解的类用来定义DispatcherServlet应用上下文的bean。

  • c.protected Class<?>[] getRootConfigClasses()返回带有@Configuration注解的类用来定义ContextLoaderListener应用上下文的bean。

让我们来简单看一下RootConfig和WebConfig是什么?

@Configuration
@EnableWebMvc
@ComponentScan("spitter.web")
public class WebConfig extends WebMvcConfigurerAdapter{@Beanpublic ViewResolver viewResolver() {InternalResourceViewResolver resolver = new InternalResourceViewResolver();resolver.setPrefix("/WEB-INF/views");resolver.setSuffix(".jsp");resolver.setExposeContextBeanAsAttributes(true);return resolver;}@Overridepublic void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {configurer.enable();}
}
@Configuration
@ComponentScan(basePackages={"spittr"},excludeFilters= {@Filter(type = FilterType.ANNOTATION , value=EnableWebMvc.class)})
public class RootConfig {}

我们已经配置好了DispatcherServlet,启用了基本的SpringMVC组件,下面就是使用SpringMVC控制器去处理web请求。

@Controller
@RequestMapping(value = "/hello")
public class HelloController {@RequestMapping(value = "/show",method = RequestMethod.GET)public String showUser(@RequestParam("user_id") long user_id , Model model)model.addAttribute(userRespository.findOne(user_id));return "user";}
}

如图请求是xxxx/hello/show 参数是user_id
返回结果是model,储存user信息,渲染视图是user.jsp
当然,在控制器中,可以进行很复杂的处理操作,这些操作可以被一层层封装起来,达到良好的项目质量。

Spring之SpringMVC(四)相关推荐

  1. 框架:springboot组合spring、springmvc、mybatis的一个小demo

    Spring+SpringMVC+Mybatis就是大名顶顶的SSM了. 这里我们使用IDEA的SpringBoot和版本控制器MAVEN构建一个SSM的demo. 介绍: 在搭建过程中spring整 ...

  2. Spring Boot(十四):spring boot整合shiro-登录认证和权限管理

    Spring Boot(十四):spring boot整合shiro-登录认证和权限管理 使用Spring Boot集成Apache Shiro.安全应该是互联网公司的一道生命线,几乎任何的公司都会涉 ...

  3. Spring+Mybatis+SpringMVC+Maven+MySql(SSM框架)搭建实例

    这篇文章我们来实现使用maven构建工具来搭建Spring+Mybatis+SpringMVC+MySql的框架搭建实例.工程下载 使用maven当然得配置有关环境了,不会配置的请看我前几篇文章,都有 ...

  4. 基于 Spring、SpringMVC、MyBatis 的熊猫书屋系统

    开源项目:book-house-ssm 开发时间:2022.04.21 - 2022.05.13 文章目录 一.快速开始 二.背景调查 三.功能描述 3.1 用户功能 3.2 管理员功能 四.功能演示 ...

  5. SSM整合(1): spring 与 springmvc 整合

    久没有写博客了, 今年事情太多了, 也没了心思. 去深圳出差,  更重要的结婚的事情, 一茬接一茬. 好在最近闲暇一些, 就想记录一些曾经困扰过我的问题(现在用spring boot真是太方便了, 很 ...

  6. Spring、SpringMVC、SpringBoot、SpringCloud的联系和区别

    一. 上一篇文章刚刚简单介绍了spring框架,下面我将介绍一下Spring,SpringMVC,SpringBoot,SpringCloud的联系和区别. 首先先简单介绍一下各个框架. Spring ...

  7. 【Java Web开发指南】深入浅出Spring和SpringMVC

    文章目录 1 spring 2 springmvc 3 AOP与IOC 1 spring spring是一个一站式的框架,提供了表现层(springmvc)到业务层(spring)再到数据层(spri ...

  8. spring怎么解耦_终于有人把Spring和SpringMvc讲透了!

    Spring框架的介绍 Spring框架是由于软件开发的复杂性而创建的.Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情.然而,Spring的用途不仅仅限于服务器端的开发. ...

  9. 【面试题】Spring,SpringMVC,SpringBoot,SpringCloud有什么区别和联系?

    介绍 Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架.基础版本只有 2 MB 左右的大小,Spring使你能够编写更干净.更可管理.并且更易于测试的代码. SpringMV ...

最新文章

  1. 她15岁,上海高一女生,也是顶尖科学家论坛最年轻嘉宾
  2. 让互联网更快的协议,QUIC在腾讯的实践及性能优化
  3. linux 内核模块太大,Linux内核模块文件大小
  4. 解决mysql的乱码问题_完美解决mysql中文乱码的问题
  5. python变量定义大全_详解python变量与数据类型
  6. 8.12模拟:dp递推
  7. mysql netcdf_Linux下用Intel编译器编译安装NetCDF-Fortan库(4.2以后版本)
  8. [视频教程]用Unity3d开发跳一跳小游戏
  9. 解决springmvc在multipart/form-data方式提交请求在过滤器Filter中获取不到参数的问题
  10. mysql中添加中文存储和显示功能
  11. mysql调用tag标签_DEDECMS5.5/5.6/5.7列表页调用TAG标签(热门标签)的两种方法
  12. 微信小程序、小游戏反编译获取源码
  13. Linux logviewer的功能,文本日志查看器(LogViewer Pro)
  14. 这么好用的两款文字转语音工具你知道吗?
  15. 【归档】Kata Containers 2.0 介绍
  16. 基于android的社团管理app
  17. 2022K班结对编程任务
  18. CIO必读:平常心走IT路 吴正宏经历的信息化三十年
  19. 标准CMOS 工艺流程
  20. ssm整合笔记(1)-curd

热门文章

  1. 漫游Kafka实现篇之分布式
  2. docker下安装Pillow模块
  3. docker学习笔记(五)docker实战
  4. 顶级c程序员之路 选学篇-1 深入理解字节,字节序与字节对齐
  5. RabbitMQ之监控(1)
  6. Go 还是需要泛型的
  7. Linux中的基础IO(二)
  8. 【媒体服务质量监控与QoE】
  9. 实时音视频技术的演进与应用
  10. 剑指offer之36-40题解