Spring之SpringMVC(四)
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(四)相关推荐
- 框架:springboot组合spring、springmvc、mybatis的一个小demo
Spring+SpringMVC+Mybatis就是大名顶顶的SSM了. 这里我们使用IDEA的SpringBoot和版本控制器MAVEN构建一个SSM的demo. 介绍: 在搭建过程中spring整 ...
- Spring Boot(十四):spring boot整合shiro-登录认证和权限管理
Spring Boot(十四):spring boot整合shiro-登录认证和权限管理 使用Spring Boot集成Apache Shiro.安全应该是互联网公司的一道生命线,几乎任何的公司都会涉 ...
- Spring+Mybatis+SpringMVC+Maven+MySql(SSM框架)搭建实例
这篇文章我们来实现使用maven构建工具来搭建Spring+Mybatis+SpringMVC+MySql的框架搭建实例.工程下载 使用maven当然得配置有关环境了,不会配置的请看我前几篇文章,都有 ...
- 基于 Spring、SpringMVC、MyBatis 的熊猫书屋系统
开源项目:book-house-ssm 开发时间:2022.04.21 - 2022.05.13 文章目录 一.快速开始 二.背景调查 三.功能描述 3.1 用户功能 3.2 管理员功能 四.功能演示 ...
- SSM整合(1): spring 与 springmvc 整合
久没有写博客了, 今年事情太多了, 也没了心思. 去深圳出差, 更重要的结婚的事情, 一茬接一茬. 好在最近闲暇一些, 就想记录一些曾经困扰过我的问题(现在用spring boot真是太方便了, 很 ...
- Spring、SpringMVC、SpringBoot、SpringCloud的联系和区别
一. 上一篇文章刚刚简单介绍了spring框架,下面我将介绍一下Spring,SpringMVC,SpringBoot,SpringCloud的联系和区别. 首先先简单介绍一下各个框架. Spring ...
- 【Java Web开发指南】深入浅出Spring和SpringMVC
文章目录 1 spring 2 springmvc 3 AOP与IOC 1 spring spring是一个一站式的框架,提供了表现层(springmvc)到业务层(spring)再到数据层(spri ...
- spring怎么解耦_终于有人把Spring和SpringMvc讲透了!
Spring框架的介绍 Spring框架是由于软件开发的复杂性而创建的.Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情.然而,Spring的用途不仅仅限于服务器端的开发. ...
- 【面试题】Spring,SpringMVC,SpringBoot,SpringCloud有什么区别和联系?
介绍 Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架.基础版本只有 2 MB 左右的大小,Spring使你能够编写更干净.更可管理.并且更易于测试的代码. SpringMV ...
最新文章
- 她15岁,上海高一女生,也是顶尖科学家论坛最年轻嘉宾
- 让互联网更快的协议,QUIC在腾讯的实践及性能优化
- linux 内核模块太大,Linux内核模块文件大小
- 解决mysql的乱码问题_完美解决mysql中文乱码的问题
- python变量定义大全_详解python变量与数据类型
- 8.12模拟:dp递推
- mysql netcdf_Linux下用Intel编译器编译安装NetCDF-Fortan库(4.2以后版本)
- [视频教程]用Unity3d开发跳一跳小游戏
- 解决springmvc在multipart/form-data方式提交请求在过滤器Filter中获取不到参数的问题
- mysql中添加中文存储和显示功能
- mysql调用tag标签_DEDECMS5.5/5.6/5.7列表页调用TAG标签(热门标签)的两种方法
- 微信小程序、小游戏反编译获取源码
- Linux logviewer的功能,文本日志查看器(LogViewer Pro)
- 这么好用的两款文字转语音工具你知道吗?
- 【归档】Kata Containers 2.0 介绍
- 基于android的社团管理app
- 2022K班结对编程任务
- CIO必读:平常心走IT路 吴正宏经历的信息化三十年
- 标准CMOS 工艺流程
- ssm整合笔记(1)-curd