NOTE_SpringMVC

介绍

README - 图1 【尚硅谷】SpringMVC教程丨一套快速上手spring mvc 学习笔记

更新

整理不易,还望各位看官一键三连 README - 图9 README - 图10 README - 图11

整理不易,还望各位看官一键三连 README - 图12 README - 图13 README - 图14

整理不易,还望各位看官一键三连 README - 图15 README - 图16 README - 图17

README - 图18下面开始吧~


一、目录

README - 图19

0、简介

README - 图20

1、@RequestMapping 注解

README - 图21

2、获取请求参数

README - 图22

3、域对象共享数据

README - 图23

4、视图

README - 图24

5、RESTful

README - 图25

6、HttpMessageConverter

README - 图26

7、拦截器和异常处理

README - 图27

8、完全注解开发

README - 图28

9、执行流程

README - 图29

二、配置文件

1、pom.xml

  1. <dependency>
  2. <groupId>org.springframework</groupId>
  3. <artifactId>spring-webmvc</artifactId>
  4. <version>5.3.16</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>ch.qos.logback</groupId>
  8. <artifactId>logback-classic</artifactId>
  9. <version>1.2.11</version>
  10. <scope>test</scope>
  11. </dependency>
  12. <dependency>
  13. <groupId>javax.servlet</groupId>
  14. <artifactId>javax.servlet-api</artifactId>
  15. <version>4.0.1</version>
  16. <scope>provided</scope>
  17. </dependency>
  18. <dependency>
  19. <groupId>org.thymeleaf</groupId>
  20. <artifactId>thymeleaf-spring5</artifactId>
  21. <version>3.0.15.RELEASE</version>
  22. </dependency>
  23. <dependency>
  24. <groupId>com.fasterxml.jackson.core</groupId>
  25. <artifactId>jackson-databind</artifactId>
  26. <version>2.13.2</version>
  27. </dependency>
  28. <dependency>
  29. <groupId>commons-fileupload</groupId>
  30. <artifactId>commons-fileupload</artifactId>
  31. <version>1.4</version>
  32. </dependency>

2、web.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
  5. version="4.0">
  6. <!--处理编码-->
  7. <filter>
  8. <filter-name>characterEncodingFilter</filter-name>
  9. <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  10. <init-param>
  11. <param-name>encoding</param-name>
  12. <param-value>UTF-8</param-value>
  13. </init-param>
  14. <init-param>
  15. <param-name>forceResponseEncoding</param-name>
  16. <param-value>true</param-value>
  17. </init-param>
  18. </filter>
  19. <filter-mapping>
  20. <filter-name>characterEncodingFilter</filter-name>
  21. <url-pattern>/*</url-pattern>
  22. </filter-mapping>
  23. <!--配置 org.springframework.web.filter.HiddenHttpMethodFilter: 可以把 POST 请求转为 DELETE 或 POST 请求 -->
  24. <filter>
  25. <filter-name>HiddenHttpMethodFilter</filter-name>
  26. <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
  27. </filter>
  28. <filter-mapping>
  29. <filter-name>HiddenHttpMethodFilter</filter-name>
  30. <url-pattern>/*</url-pattern>
  31. </filter-mapping>
  32. <!--配置 SpringMVC 的前端控制器,对浏览器发送的请求统一进行处理-->
  33. <servlet>
  34. <servlet-name>springMVC</servlet-name>
  35. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  36. <!--通过初始化参数指定 SpringMVC 配置文件的位置和名称-->
  37. <init-param>
  38. <!--contextConfigLocation 为固定值-->
  39. <param-name>contextConfigLocation</param-name>
  40. <!--使用 classpath: 表示从类路径查找配置文件,java 工程默认 src 下, Maven 工程默认 src/main/resources 下-->
  41. <param-value>classpath:springMVC.xml</param-value>
  42. </init-param>
  43. <!--
  44. 作为框架的核心组件,在启动过程中有大量的初始化操作要做
  45. 而这些操作放在第一次请求时才执行会严重影响访问速度
  46. 将前端控制器 DispatcherServlet 的初始化时间提前到服务启动时
  47. -->
  48. <load-on-startup>1</load-on-startup>
  49. </servlet>
  50. <servlet-mapping>
  51. <servlet-name>springMVC</servlet-name>
  52. <!--
  53. 设置 SpringMVC 的核心控制器所能处理的请求的请求路径
  54. / 所匹配的请求可以是 /login 或 .html 或 .js 或 .css 方式的请求路径
  55. 但是 / 不能匹配 .jsp 请求路径的请求
  56. -->
  57. <url-pattern>/</url-pattern>
  58. </servlet-mapping>
  59. </web-app>

3、springMVC.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xmlns:mvc="http://www.springframework.org/schema/mvc"
  6. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">
  7. <!--自动扫描包-->
  8. <context:component-scan base-package="com.vectorx.springmvc"></context:component-scan>
  9. <!--配置Thymeleaf视图解析器-->
  10. <bean id="viewResolver" class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
  11. <property name="order" value="1"/>
  12. <property name="characterEncoding" value="UTF-8"/>
  13. <property name="templateEngine">
  14. <bean class="org.thymeleaf.spring5.SpringTemplateEngine">
  15. <property name="templateResolver">
  16. <bean class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver">
  17. <!--视图前缀-->
  18. <property name="prefix" value="/WEB-INF/templates/"/>
  19. <!--视图后缀-->
  20. <property name="suffix" value=".html"/>
  21. <property name="templateMode" value="HTML5"/>
  22. <property name="characterEncoding" value="UTF-8"/>
  23. </bean>
  24. </property>
  25. </bean>
  26. </property>
  27. </bean>
  28. <!--InternalResourceViewResolver-->
  29. <!--<bean id="InternalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">-->
  30. <!-- <property name="prefix" value="/WEB-INF/templates/"/>-->
  31. <!-- <property name="suffix" value=".jsp"/>-->
  32. <!--</bean>-->
  33. <!--视图控制器:当前请求映射对应的控制器方法中没有其他请求过程的处理,只需设置一个视图名称时,就可以使用`view-controller`-->
  34. <mvc:view-controller path="/" view-name="index"></mvc:view-controller>
  35. <!--处理静态资源-->
  36. <mvc:default-servlet-handler/>
  37. <!--开启 MVC 的注解驱动-->
  38. <mvc:annotation-driven/>
  39. <!--配置文件上传解析器,将上传文件自动封装为MutilpartFile对象-->
  40. <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"></bean>
  41. <!--自定义拦截器-->
  42. <!--方式一-->
  43. <!--<mvc:interceptors>-->
  44. <!-- <bean id="myInterceptor" class="com.vectorx.springmvc.s00_helloworld.interceptor.MyInterceptor"></bean>-->
  45. <!--</mvc:interceptors>-->
  46. <!--方式二-->
  47. <!--<mvc:interceptors>-->
  48. <!-- <ref bean="myInterceptor"></ref>-->
  49. <!--</mvc:interceptors>-->
  50. <!--<mvc:interceptors>-->
  51. <!-- <ref bean="myInterceptor"></ref>-->
  52. <!-- <ref bean="myInterceptor2"></ref>-->
  53. <!--</mvc:interceptors>-->
  54. <!--方式三-->
  55. <!--<mvc:interceptors>-->
  56. <!-- <mvc:interceptor>-->
  57. <!-- <mvc:mapping path="/**"/>-->
  58. <!-- <mvc:exclude-mapping path="/"/>-->
  59. <!-- <ref bean="myInterceptor"></ref>-->
  60. <!-- </mvc:interceptor>-->
  61. <!--</mvc:interceptors>-->
  62. <!--异常处理解析器-->
  63. <!--<bean id="simpleMappingExceptionResolver"-->
  64. <!-- class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">-->
  65. <!-- <property name="exceptionMappings">-->
  66. <!-- <props>-->
  67. <!-- &lt;!&ndash;-->
  68. <!-- properties的键表示处理器方法执行过程中出现的异常-->
  69. <!-- properties的值表示若出现指定异常,设置一个新的视图名称,跳转到指定页面-->
  70. <!-- &ndash;&gt;-->
  71. <!-- <prop key="java.lang.ArithmeticException">error</prop>-->
  72. <!-- </props>-->
  73. <!-- </property>-->
  74. <!-- &lt;!&ndash;设置一个属性名,将出现的异常信息共享在请求域中&ndash;&gt;-->
  75. <!-- <property name="exceptionAttribute" value="ex"></property>-->
  76. <!--</bean>-->
  77. </beans>

三、完全注解开发

WebInit——web.xml

  1. /**
  2. * web工程的初始化类,代替web.xml
  3. */
  4. public class WebInit extends AbstractAnnotationConfigDispatcherServletInitializer {
  5. /**
  6. * 指定Spring配置类
  7. *
  8. * @return
  9. */
  10. @Override
  11. protected Class<?>[] getRootConfigClasses() {
  12. return new Class[]{SpringConfig.class};
  13. }
  14. /**
  15. * 指定SpringMVC配置类
  16. *
  17. * @return
  18. */
  19. @Override
  20. protected Class<?>[] getServletConfigClasses() {
  21. return new Class[]{WebConfig.class};
  22. }
  23. /**
  24. * 指定SpringMVC的映射规则,即url-pattern
  25. *
  26. * @return
  27. */
  28. @Override
  29. protected String[] getServletMappings() {
  30. return new String[]{"/"};
  31. }
  32. /**
  33. * 注册过滤器
  34. *
  35. * @return
  36. */
  37. @Override
  38. protected Filter[] getServletFilters() {
  39. CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
  40. characterEncodingFilter.setEncoding("UTF-8");
  41. characterEncodingFilter.setForceResponseEncoding(true);
  42. HiddenHttpMethodFilter hiddenHttpMethodFilter = new HiddenHttpMethodFilter();
  43. return new Filter[]{characterEncodingFilter, hiddenHttpMethodFilter};
  44. }
  45. }

WebConfig——springMVC.xml

  1. /**
  2. * SpringMVC的配置类清单
  3. * 1、扫描组件
  4. * 2、视图解析器
  5. * 3、view-controller
  6. * 4、default-servlet-handler
  7. * 5、MVC注解驱动
  8. * 6、文件上传解析器
  9. * 7、拦截器
  10. * 8、异常处理解析器
  11. */
  12. @Configuration
  13. // ========== 1、扫描组件 ==========
  14. @ComponentScan("com.vectorx.springmvc.controller")
  15. // ========== 5、MVC注解驱动 ==========
  16. @EnableWebMvc
  17. public class WebConfig implements WebMvcConfigurer {
  18. // ========== 2、视图解析器 ==========
  19. /**
  20. * 生成模板解析器
  21. *
  22. * @return
  23. */
  24. @Bean
  25. public ITemplateResolver templateResolver() {
  26. SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
  27. templateResolver.setPrefix("/WEB-INF/templates/");
  28. templateResolver.setSuffix(".html");
  29. templateResolver.setTemplateMode(TemplateMode.HTML);
  30. templateResolver.setCharacterEncoding("UTF-8");
  31. return templateResolver;
  32. }
  33. /**
  34. * 生成模板引擎并注入模板解析器
  35. *
  36. * @param templateResolver
  37. * @return
  38. */
  39. @Bean
  40. public ISpringTemplateEngine templateEngine(ITemplateResolver templateResolver) {
  41. SpringTemplateEngine templateEngine = new SpringTemplateEngine();
  42. templateEngine.setTemplateResolver(templateResolver);
  43. return templateEngine;
  44. }
  45. /**
  46. * 生成视图解析器并注入模板引擎
  47. *
  48. * @param templateEngine
  49. * @return
  50. */
  51. @Bean
  52. public ViewResolver viewResolver(ISpringTemplateEngine templateEngine) {
  53. ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
  54. viewResolver.setOrder(1);
  55. viewResolver.setCharacterEncoding("UTF-8");
  56. viewResolver.setTemplateEngine(templateEngine);
  57. return viewResolver;
  58. }
  59. // ========== 3、view-controller ==========
  60. @Override
  61. public void addViewControllers(ViewControllerRegistry registry) {
  62. registry.addViewController("/").setViewName("index");
  63. }
  64. // ========== 4、default-servlet-handler ==========
  65. @Override
  66. public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
  67. configurer.enable();
  68. }
  69. // ========== 6、文件上传解析器 ==========
  70. @Bean
  71. public MultipartResolver multipartResolver() {
  72. MultipartResolver multipartResolver = new CommonsMultipartResolver();
  73. return multipartResolver;
  74. }
  75. // ========== 7、拦截器 ==========
  76. @Override
  77. public void addInterceptors(InterceptorRegistry registry) {
  78. registry.addInterceptor(new TestInterceptor()).addPathPatterns("/**");
  79. }
  80. // ========== 8、异常处理解析器 ==========
  81. @Override
  82. public void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) {
  83. SimpleMappingExceptionResolver exceptionResolver = new SimpleMappingExceptionResolver();
  84. Properties properties = new Properties();
  85. properties.setProperty(ArithmeticException.class.getCanonicalName(), "error");
  86. exceptionResolver.setExceptionMappings(properties);
  87. exceptionResolver.setExceptionAttribute("ex");
  88. resolvers.add(exceptionResolver);
  89. }
  90. }

整理难免有误,欢迎大家批评指正!


署名 4.0 国际 (CC BY 4.0)。您可以自由地:共享 — 在任何媒介以任何形式复制、发行本作品;演绎 — 修改、转换或以本作品为基础进行创作;在任何用途下,甚至商业目的。只要你遵守许可协议条款,许可人就无法收回你的这些权利。惟须遵守下列条件:署名 — 您必须给出适当的署名,提供指向本许可协议的链接