Spring之SpringMVC(四)
来源:互联网 发布:java数据字典怎么写 编辑:程序博客网 时间:2024/06/07 15:40
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{ @Override protected Class<?>[] getRootConfigClasses() { return new Class<?>[] {RootConfig.class}; } @Override protected Class<?>[] getServletConfigClasses() { return new Class<?>[] {WebConfig.class}; } @Override protected 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{ @Bean public ViewResolver viewResolver() { InternalResourceViewResolver resolver = new InternalResourceViewResolver(); resolver.setPrefix("/WEB-INF/views"); resolver.setSuffix(".jsp"); resolver.setExposeContextBeanAsAttributes(true); return resolver; } @Override public 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(四)
- SpringMvc (四) 集成 spring/springMvc/hibernateValidator
- springMVC系列之(四) spring+springMVC+hibernate 三大框架整合
- springMVC系列之(四) spring+springMVC+hibernate 三大框架整合
- springMVC系列之(四) spring+springMVC+hibernate 三大框架整合
- springMVC系列之(四) spring+springMVC+hibernate 三大框架整合
- 待看-springMVC系列之(四) spring+springMVC+hibernate 三大框架整合
- springMVC系列之(四) spring+springMVC+hibernate 三大框架整合
- Spring记录之SpringMVC
- 四、初学SpringMVC+Mybatis之Spring基于注解的组件扫描
- Spring+hibernate+springmvc 整合(四)
- spring 之 springMVC 学习1
- spring 之 springMVC 学习2
- spring 之 springMVC 学习1
- Spring MVC 自学杂记(四) -- Spring+SpringMVC+WebSocket
- SpringMVC 之 Spring 整合 Spring MVC
- SpringMVC学习笔记四之文件上传
- Springmvc基础四之上传文件
- Dubbo分布式日志追踪,多线程不能获取窜ID和IP问题
- PKU 1016 Numbers That Count
- ROS学习笔记5 启动文件
- 使用至多4种颜色给多区域着色问题
- FFmpeg swr_convert 音频重采样,编码的噪音问题
- Spring之SpringMVC(四)
- python try...except....else...finally处理异常
- 远程登录工具----telnet、openssh
- 队列知识点详解(数据结构,严慧敏版)
- pandas快速入门
- 6.18
- 阿里巴巴Java开发规约插件的使用
- 【C语言】图_数据结构_练习
- pandas使用read_csv()读取文件遇到的问题