SpringMVC是比较常用的JavaWeb框架,非常轻便强悍,能简化Web开发,大大提高开发效率,在各种Web程序中广泛应用。本文采用Java Config的方式搭建SpringMVC项目,并对SpringMVC启动时加载顺序做简单的说明。

 1、SpringMVC启动流程图

2、SpringMVC项目启动流程介绍

SpringMVC 是Spring 框架的重要模块,借助于Spring 的容器技术,可以非常方面的搭建Web项目。

SpringMVC项目启动时要完成Spring 容器的初始化和SpringMVC配置的初始化。

2.1 Spring容器的初始化:

1、项目中需要配置ContextLoadListener监听器,它会监听项目的启动,在项目启动时调用容器初始化方法完成Spring容器的初始化

如果采用XML配置,通常需要在web.xml文件里面添加如下配置:

本文采用Java Config 实现,所以在配置中继承了AbstractAnnotationConfigDispatcherServletInitializer 这个抽象类,这个类的继承关系如下:

在父类AbstractContextLoaderInitializer中注册了ContextLoadListener监听器:

具体如下:

2、在需要在容器初始化时创建的类上面加上注解,就可以实现Bean的自动装配了。

@Controller @Service @Bean  @Conponent等注解都可以显示表明Bean需要自动装配

3、配置Bean初始化的范围

2.2 SpringMVC 的配置

1、配置SpringMVC需要添加DispatchServlet ,DispatcherServlet主要负责前端调用URL的分发,他在Web容器初始化的时候被注册。在2.1中,我们已经知道,本文配置中继承了DispatchServlet 的一个抽象类AbstractAnnotationConfigDispatcherServletInitializer ,此抽象类的父类在实例化的时候会注册一个DispatchServlet到容器中,方法名如下。

2、定义视图解析器

前端访问URL,DispatchServlet 会把URL 匹配到Controller中相应的@RequstMapper的方法上去,该方法处理完请求后返回需要的业务数据模型,然后会调用自己的视图解析器把数据渲染到前端页面中,渲染之后返回给浏览器。

视图解析器定义如下:

3、其实SpringMVC 项目启动时配置的东西还有很多,HandlerException 异常处理,数据校验等,这些Spring提供的抽象类WebMvcConfigurerAdapter中已经实现好了,我们在项目中直接继承就行了。

3、代码实现:

项目采用Maven管理:pom.xml如下:

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  3. <modelVersion>4.0.0</modelVersion>
  4. <groupId>com.beiyan</groupId>
  5. <artifactId>demo</artifactId>
  6. <packaging>war</packaging>
  7. <version>0.0.1-SNAPSHOT</version>
  8. <name>demo Maven Webapp</name>
  9. <url>http://maven.apache.org</url>
  10. <properties>
  11. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  12. <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  13. <java.version>1.8</java.version>
  14. </properties>
  15. <dependencies>
  16. <dependency>
  17. <!-- Test -->
  18. <groupId>junit</groupId>
  19. <artifactId>junit</artifactId>
  20. <version>4.10</version>
  21. <scope>test</scope>
  22. </dependency>
  23. <!-- Servlet -->
  24. <dependency>
  25. <groupId>javax.servlet</groupId>
  26. <artifactId>javax.servlet-api</artifactId>
  27. <version>3.1.0</version>
  28. </dependency>
  29. <!-- SpringMVC -->
  30. <dependency>
  31. <groupId>org.springframework</groupId>
  32. <artifactId>spring-webmvc</artifactId>
  33. <version>4.3.3.RELEASE</version>
  34. </dependency>
  35.  
  36. </dependencies>
  37. <build>
  38. <plugins>
  39. <plugin>
  40. <groupId>org.springframework.boot</groupId>
  41. <artifactId>spring-boot-maven-plugin</artifactId>
  42. </plugin>
  43. </plugins>
  44. </build>
  45.  
  46. </project>

项目结构如下:

RootConfig类中配置了包扫描的范围:

  1. package com.beiyan.demo.config;
  2.  
  3. import org.springframework.context.annotation.ComponentScan;
  4. import org.springframework.context.annotation.Configuration;
  5.  
  6. @Configuration
  7. @ComponentScan(basePackages = { "com.beiyan.demo" })
  8. public class RootConfig {
  9.  
  10. }

WebConfig 中配置了视图解析器以及RequestMapper的扫描范围

  1. package com.beiyan.demo.config;
  2.  
  3. import org.springframework.context.annotation.Bean;
  4. import org.springframework.context.annotation.ComponentScan;
  5. import org.springframework.context.annotation.Configuration;
  6. import org.springframework.web.servlet.ViewResolver;
  7. import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
  8. import org.springframework.web.servlet.config.annotation.EnableWebMvc;
  9. import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
  10. import org.springframework.web.servlet.view.InternalResourceViewResolver;
  11.  
  12. @Configuration
  13. @EnableWebMvc
  14. @ComponentScan("com.beiyan.demo.controller")
  15. public class WebConfig extends WebMvcConfigurerAdapter {
  16.  
  17. @Bean
  18. public ViewResolver viewResolver() {
  19. InternalResourceViewResolver resolver = new InternalResourceViewResolver();
  20. resolver.setPrefix("/WEB-INF/views/");
  21. resolver.setSuffix(".jsp");
  22. resolver.setExposeContextBeansAsAttributes(true);
  23. return resolver;
  24. }
  25.  
  26. /**
  27. * 启用spring mvc 的注解
  28. */
  29. public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
  30. configurer.enable();
  31. }
  32.  
  33. }

WebAppInitializer类配置了容器初始化时需要加载的配置类

  1. package com.beiyan.demo.config;
  2.  
  3. import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
  4.  
  5. public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
  6.  
  7. @Override
  8. protected Class<?>[] getRootConfigClasses() {
  9. return new Class<?>[] { RootConfig.class };
  10. }
  11.  
  12. @Override
  13. protected Class<?>[] getServletConfigClasses() {
  14. return new Class<?>[] { WebConfig.class };
  15. }
  16.  
  17. @Override
  18. protected String[] getServletMappings() {
  19. return new String[] { "/" };
  20. }
  21.  
  22. }

TestController中定义了测试用的URL:

  1. package com.beiyan.demo.controller;
  2.  
  3. import org.springframework.stereotype.Controller;
  4. import org.springframework.web.bind.annotation.RequestMapping;
  5. import org.springframework.web.bind.annotation.RequestMethod;
  6. import org.springframework.web.bind.annotation.ResponseBody;
  7.  
  8. @Controller
  9. public class TestController {
  10. @RequestMapping(value = "/test", method = RequestMethod.GET)
  11. public String test() {
  12. return "test";
  13. }
  14.  
  15. }

项目的Web 文件如下:

启动项目后,浏览器访问http://localhost:8080/SpringServlet/test 可以成功访问如下:

至此,SpringMVC项目配置成功了。

写在后面的话:

本项目只是简单搭建了SpringMVC项目,采用了最简配置,实际项目中可能会对Servlet,Filter进行自定义,还会添加Mybatis /hibernate, SpringSecurity等功能。关于JPA,SpringSecurity,Themeleaf 的集成将会在下一篇关于SpringBoot 的项目搭建中集成。

本项目完整代码已上传开源中国Git仓库:https://git.oschina.net/beiyan/mvc-config

零配置简单搭建SpringMVC 项目的更多相关文章

  1. maven -- 学习笔记(四)实现在Eclipse用maven搭建springmvc项目(附构建步骤和详细实现代码)

    Learn from:http://www.cnblogs.com/fangjins/archive/2012/05/06/2485459.html,感谢楼主的分享,才有下面的这篇学习小结 一.环境准 ...

  2. 创建一个可用的简单的SpringMVC项目,图文并茂

    转载麻烦注明下来源:http://www.cnblogs.com/silentdoer/articles/7134332.html,谢谢. 最近在自学SpringMVC,百度了很多资料都是比较老的,而 ...

  3. VSCode配置简单的vue项目

    VSCode配置简单的vue项目 https://www.cnblogs.com/wnxyz8023/p/9989447.html 由于最近要使用的项目框架为前后端分离的,采用的是vue.js+web ...

  4. 使用纯注解与配置类开发springMVC项目,去掉xml配置

    最近拜读了杨开振老师的书,深入浅出springBoot2.x,挖掘了很多以前被忽略的知识, 开发一年多,工作中一直用传统springmvc的开发,基本都还是用的传统的xml配置开发, 看到书里有提到, ...

  5. 项目搭建系列之一:使用Maven搭建SpringMVC项目

    约定电脑都安装了eclipse,且已配置好Maven以及eclipse插件. 1.Eclipse 2.maven 3.Eclipse 需要安装maven插件.url:maven - http://do ...

  6. 基于XML搭建SpringMVC项目

    *如果你需要将应用部署到不支持Servlet3.0容器中 或者 你只是对web.xml情有独钟,那我们只能按照传统的方式,通过web.xml来配置SpringMVC. *搭建SpringMVC需要在w ...

  7. 使用VSCode配置简单的vue项目

    由于最近要使用的项目框架为前后端分离的,采用的是vue.js+webAPI的形式进行开发的.因为之前我没有接触过vue.js,也只是通过视频文档做了一些简单的练习.今天技术主管说让大家熟悉下VSCod ...

  8. spirng: srping mvc配置(访问路径配置)搭建SpringMVC——最小化配置

    搭建SpringMVC——最小化配置 最开始接触网页的时候,是纯的html/css页面,那个时候还是用Dreamweaver来绘制页面. 随着网站开发的深入,开始学习servlet开发,记得最痛苦的就 ...

  9. 三、使用VSCode配置简单的vue项目

    由于最近要使用的项目框架为前后端分离的,采用的是vue.js+webAPI的形式进行开发的.因为之前我没有接触过vue.js,也只是通过视频文档做了一些简单的练习.今天技术主管说让大家熟悉下VSCod ...

随机推荐

  1. Sql Server海量数据插入

    目录 1.前言 2.BULK INSERT 3.简单示例 前言 由于昨天接到一个客户反馈导出数据卡死的问题,于是决定今天模拟一下千万级的数据,然后傻傻的等待插入数据了半天...... 对于海量数据,上 ...

  2. http协议中用于上传多个文件的 multipart 字段

    大家好,我是许飞,微软拼音的开发实习生.在网络编程中,经常用到从服务器上“下载”一些数据,有时却要向服务器“上传”数据.曾在一个原型中使用了“multipart/form-data”格式向Web服务器 ...

  3. exit和return的区别

     主要有几下几个不同点:     1. return返回函数值,是关键字:exit是一个函数.     2. return是语言级别的,它表示了调用堆栈的返回:而exit是系统调用级别的,它表示了一个 ...

  4. 移动应用抓包调试利器Charles

    转载:http://www.jianshu.com/p/68684780c1b0 一.Charles是什么? Charles是在 Mac或Windows下常用的http协议网络包截取工具,是一款屌的不 ...

  5. python pip安装问题

    scipy-0.18.1-cp34-cp34m-win32.whl is not a supported wheel on this platform. 遇到该问题需要更新pip版本 1.更新pip: ...

  6. Hibernate操作指南-搭建一个简单的示例(基于Java Persistence API JPA)

  7. 安装redis

    第一步 下载 第二步 解压 .tar.gz 第三步 make cd redis- make 第四步  启动试一下 src/redis-server 好了 :C Jan ::13.501 # Warni ...

  8. sp_helpdb

    语法 sp_helpdb [ [ @dbname= ] 'name' ] 参数 [@dbname=] 'name' 是要为其提供信息的数据库名称.name 的数据类型为 sysname,无默认值.如果 ...

  9. 基于Android的手机APP

    文档链接: https://coding.net/u/lingyu512/p/document/git/blob/master/%E7%AC%AC6%E7%BB%84_%E8%BF%9B%E5%87% ...

  10. 【转载】说说JSON和JSONP,也许你会豁然开朗,含jQuery用例

    前言: 说到AJAX就会不可避免的面临两个问题,第一个是AJAX以何种格式来交换数据?第二个是跨域的需求如何解决?这两个问题目前都有不同的解决方案,比如数据可以用自定义字符串或者用XML来描述,跨域可 ...