SpringMVC配置文件

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> SpringMVC配置文件

SpringMVC配置文件

Web.xml

核心拦截器以及配置文件的路径


!-- spring 核心转发器,拦截指定目录下的请求,分配到配置的拦截路径下处理 --
servlet
   servlet-namedispatcher/servlet-name
    servlet-classorg.springframework.web.servlet.DispatcherServlet/servlet-class
init-param
          !-- 指定springmvc配置文件的路径 
              如果不指定默认为:/WEB-INF/${servlet-name}-servlet.xml          --
          param-namecontextConfigLocation/param-name
          param-valueclasspath:springmvc.xml/param-value
      /init-param   load-on-startup1/load-on-startup
/servlet
servlet-mapping
   servlet-namedispatcher/servlet-name
   !-- --
   url-pattern//url-pattern
/servlet-mapping

加载spring容器


!-- 加载spring容器 --
    context-param
        param-namecontextConfigLocation/param-name
        param-valueclasspath:spring/applicationContext-*.xml/param-value
    /context-param
    listener
        listener-classorg.springframework.web.context.ContextLoaderListener/listener-class
    /listener

编码过滤器


!-- spring 编码过滤器 --
filter
   filter-namecharacterEncodingFilter/filter-name
   filter-classorg.springframework.web.filter.CharacterEncodingFilter/filter-class
   init-param
     param-nameencoding/param-name
     param-valueUTF-8/param-value
   /init-param
   init-param
     param-nameforceEncoding/param-name
     param-valuetrue/param-value
   /init-param
/filter
!-- 编码过滤器过滤的路径 --
filter-mapping
   filter-namecharacterEncodingFilter/filter-name
   url-pattern/*/url-pattern
/filter-mapping

url-pattern****配置讲解

在 servlet 和 filter 中我们都需要配置 url-pattern,但这个配置的解析规则有哪几种我们接下来就详细的说一下。

1、精确匹配:如 /xxx.html 就只会匹配 xxx.html。

2、路径匹配:如 /xxx/ 会匹配以 xxx 为前缀的 url。

3、后缀匹配:如 .html 会匹配所有以 html 为后缀的 url。

但是对于 url-pattern 的匹配来说可能会存在冲突的情况,这种情况下就需要排个优先级了,以上三者的优先级为 精确匹配 路径匹配 后缀匹配 。

Spring-MVC.xml

MVC的注解驱动

  • Bean模式 `上面源码的配置我们看到了,其中映射器和适配器的注解模式是过时的所以我们需要重新配置一下`
  • 上面源码的配置我们看到了,其中映射器和适配器的注解模式是过时的所以我们需要重新配置一下

    
    ?xml version="1.0" encoding="UTF-8"?
    beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:mvc="http://www.springframework.org/schema/mvc"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
            http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd"
    !-- 配置处理器映射器 --
    bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/
    !-- 配置处理器适配器 --
    bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/ 
    为什么这么配置spring就能用呢?因为spring对bean的加载有一个顺序,同名称的spring只会认第一次加载的bean,也就是配置文件最先配置的bean
    /beans
    
  • 标签模式 `**配置了这个上面俩个就不用配置了**mvc:annotation-driven会自动注册RequestMappingHandlerMapping与RequestMappingHandlerAdapter两个Bean,这是Spring MVC为@Controller分发请求所必需的,并且提供了数据绑定支持,@NumberFormatannotation支持,@DateTimeFormat支持,@Valid支持读写XML的支持(JAXB)和读写JSON的支持(默认Jackson)等功能`
  • **配置了这个上面俩个就不用配置了**mvc:annotation-driven会自动注册RequestMappingHandlerMapping与RequestMappingHandlerAdapter两个Bean,这是Spring MVC为@Controller分发请求所必需的,并且提供了数据绑定支持,@NumberFormatannotation支持,@DateTimeFormat支持,@Valid支持读写XML的支持(JAXB)和读写JSON的支持(默认Jackson)等功能

    
    ?xml version="1.0" encoding="UTF-8"?
    beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:mvc="http://www.springframework.org/schema/mvc"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
            http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd"
    mvc:annotation-driven
    /beans
    

    视图解析器

    原配的配置文件中我们可以看到,系统默认的视图解析器,以及视图解析器的种类。所以我们只需要重配默认的视图解析器就行了

  • 最简单的配置
  • 
    bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
            property name="viewClass"  value="org.springframework.web.servlet.view.JstlView" /
            property name="prefix" value="/WEB-INF/jsp/" /
            property name="suffix" value=".jsp" /
        /bean
    

    视图解析器详解https://blog.csdn.net/bingbeichen/article/details/65937526

    原理解析:

    概述

    装配: 无论请求处理方法的返回值类型是String、View或ModelMap,SpringMVC均会将其装配为ModelAndView对象,其包含逻辑视图的名称和模型对象信息。   

    解析: SpringMVC借助视图解析器(ViewResolver)获取最终的物理制图对象,其可以是JSP页面、Excel或JFreeChart等各种表现形式的视图。

    SpringMVC配置文件

    视图

    为了实现视图模型和具体实现技术的解耦,Spring在org.springframework.web.servlet包中定义高度抽象的View接口;其作用是渲染模型数据,即将模型数据以某种形式呈现给用户。其中,视图对象由视图解析器负责实例化,由于视图是无状态的,故其不会有线程安全的问题。

    SpringMVC配置文件

    其中,常用的视图实现类主要有:

    **大类****视图类型****说明**|------
  • **视图解析器** 视图解析器的主要作用是**将逻辑视图解析为具体的物理视图对象**,可以在Spring WEB上下文中配置一种或多种解析策略,并指定其先后顺序;所有的视图解析器都必须实现ViewResolver接口。 其中,常用的视图解析器实现类主要有:
    **大类** **视图类型** **说明**
    解析为Bean的名字 **BeanNameViewResolver** 将逻辑视图解析为一个Bean,其id对应于逻辑视图的名称
    解析为URL文件 **InternalResourceViewResolver** 将逻辑视图解析为一个URL文件,通常解析为一个保存在WEB-INF下的程序文件(如JSP页面)
    解析为URL文件 JasperResportsViewResolver 将逻辑视图解析为一个报表文件对应的URL
    模板文件视图 FreeMarkerViewResolver 解析为基于FreeMarker模板技术的模板文件
    模板文件视图 VelocityViewResolver 解析为基于Velocity模板技术的模板文件
    模板文件视图 VelocityLayoutViewResolver 解析为基于Velocity模板技术的模板文件
    说明:每个视图解析器均实现了Ordered接口,可通过其order属性指定解析器的优先顺序,order越小优先级越高;SpringMVC会按视图解析器的顺序对逻辑视图进行解析,直到解析成功并返回视图对象,否则将抛出ServletException异常。
  • **InternalResourceViewResolver** JSP是最常见的视图技术,可以使用InternalResourceViewResolver作为视图解析器,SpringMVC会将逻辑视图解析为InternalResourceView对象。
    !-- 配置视图解析器:将逻辑视图解析为物理视图 --
    bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
      property name="prefix" value="/WEB-INF/views/"/property
      property name="suffix" value=".jsp"/property
    /bean
    
  • **JstlView** 若在WEB-INF/lib目录下添加jstl.jar,则SpringMVC会自动将视图由InternalResourceView转为**JstlView**。其中,使用JSTL的fmt标签则需要在SpringMVC的配置文件中配置国际化资源文件:
  • 视图解析器的主要作用是将逻辑视图解析为具体的物理视图对象,可以在Spring WEB上下文中配置一种或多种解析策略,并指定其先后顺序;所有的视图解析器都必须实现ViewResolver接口。

    说明:每个视图解析器均实现了Ordered接口,可通过其order属性指定解析器的优先顺序,order越小优先级越高;SpringMVC会按视图解析器的顺序对逻辑视图进行解析,直到解析成功并返回视图对象,否则将抛出ServletException异常。

    JSP是最常见的视图技术,可以使用InternalResourceViewResolver作为视图解析器,SpringMVC会将逻辑视图解析为InternalResourceView对象。

    若在WEB-INF/lib目录下添加jstl.jar,则SpringMVC会自动将视图由InternalResourceView转为JstlView。其中,使用JSTL的fmt标签则需要在SpringMVC的配置文件中配置国际化资源文件:

    
      !-- springmvc.xml文件:配置国际化资源文件 --
      !-- 可以在success.jsp页面中导入fmt标签后,使用fmt:message显示对应信息 --
      bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"
          property name="basename" value="i18n"/property
      /bean
      如:
      i18n.properties:
      i18n.username=UserName
      i18n.password=Password
      i18n_zh_CN.properties:
      i18n.username=u7528u6237u540D
      i18n.password=u5BC6u7801
      i18n_en_US.properties
      i18n.username=UserName
      i18n.password=Password
    
  • **mvc_view-controller****标签** 若希望直接响应通过SpringMVC渲染的页面,而不经过目标方法,可以在Spring的Bean配置文件中使用mvc_view-controller标签来实现。
  • 若希望直接响应通过SpringMVC渲染的页面,而不经过目标方法,可以在Spring的Bean配置文件中使用mvc_view-controller标签来实现。

    
      !-- 配置直接转发的页面 : 可以直接转发到相应页面而无需经过Handler的处理方法 --
      mvc:view-controller path="springmvc/success" view-name="success"/
      !-- 在实际开发中通常都需要配置 mvc:annotation-driven 标签 --
      !-- 若配置mvc:view-controller时,务必要配置mvc:annotation-driven,否则易出错 --
      mvc:annotation-driven/mvc:annotation-driven
    
  • 自定义视图

    **第一步:**创建自定义视图类,继承于View,并将其配置到IoC容器中;
  • 
      package com.qiaobc.springmvc.view;
      import java.util.Date;
      import java.util.Map;
      import javax.servlet.http.HttpServletRequest;
      import javax.servlet.http.HttpServletResponse;
      import org.springframework.stereotype.Component;
      import org.springframework.web.servlet.View;
      @Component
      public class MyView implements View {
          @Override
          public String getContentType() {
              return "text/html";
          }
          @Override
          public void render(MapString, ? model, HttpServletRequest request,
                  HttpServletResponse response) throws Exception {
              response.getWriter().print("time : " + new Date());
          }
      }
    

    第二步:在SpringMVC的配置文件中,配置BeanNameViewResolver视图解析器,并配置其优先级;

    
      !-- 配置BeanNameViewResolver视图解析器 --
      bean class="org.springframework.web.servlet.view.BeanNameViewResolver"
          property name="order" value="1"/property
      /bean
      !-- 配置自动扫描的包 --
      context:component-scan base-package="com.qiaobc.springmvc"/context:component-scan
    

    第三步:在处理器中编写目标方法,其返回值对应自定义类的BeanName;

    
      @RequestMapping("/springmvc")
      @Controller
      public class TestViewAndViewResolver {
          @RequestMapping("/testView")
          public String testView() {
              System.out.println("testView...");
              return "myView";
          }
      }
    

    第四步:在index.jsp页面正常使用,即请求springmvc/testView即可。

  • **Excel****视图** 希望使用Excel展示数据列表,仅需要扩展SpringMVC提供的AbstractExcelView或AbstractJExcelView,实现其buildExcelDocument()方法,并在方法中使用模型数据对象构建Excel 文档即可。其中,AbstractExcelView是基于POI API的,而AbstractJExcelView是基于JExcel API的。   视图对象需要配置为IOC 容器中Bean,即需要使用BeanNameViewResolver作为视图解析器。若希望在浏览器中直接下载Excel文档,则可以设置其响应头Content-Disposition的值为attachment;filename=xxx.xls。
  • 重定向

    一般情况下,控制器目标方法返回字符串类型的值会被当成逻 辑视图名来处理;但如果返回的字符串中带“forward:”或“redirect:”前缀时,SpringMVC 会对其进行特殊处理,即将“forward:”或“redirect:”当成指示符,其后的字符串作为URL来处理。
    @RequestMapping("/springmvc")
    @Controller
    public class TestViewAndViewResolver {
      @RequestMapping("/testRedirect")
      public String testRedirect() {
          System.out.println("testRedirect");
          return "redirect:/index.jsp"; //重定向
      }
    }
    
    注意:SpringMVC的实现流程具体可参考UrlBasedViewResolver类的createView(String, Locale)方 h
  • 希望使用Excel展示数据列表,仅需要扩展SpringMVC提供的AbstractExcelView或AbstractJExcelView,实现其buildExcelDocument()方法,并在方法中使用模型数据对象构建Excel 文档即可。其中,AbstractExcelView是基于POI API的,而AbstractJExcelView是基于JExcel API的。   视图对象需要配置为IOC 容器中Bean,即需要使用BeanNameViewResolver作为视图解析器。若希望在浏览器中直接下载Excel文档,则可以设置其响应头Content-Disposition的值为attachment;filename=xxx.xls。

    注意:SpringMVC的实现流程具体可参考UrlBasedViewResolver类的createView(String, Locale)方 h

    类型转换

    转换器自主要用来定义一些 数据之间的转换,比如日期与字符串格式的日期之间的转换

  • 自定义Converter 1,创建爱你Converter
  • 1,创建爱你Converter

    
      public class DateConverter implements ConverterString, Date {
          @Override
          public Date convert(String source) {
              SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
              try {
                  return simpleDateFormat.parse(source);
              } catch (ParseException e) {
                  e.printStackTrace();
              }
              return null;
          }
      }
    

    2,配置Converter(第一种)

    
      !-- 加载注解驱动 --
          mvc:annotation-driven conversion-service="conversionService"/
          !-- 转换器配置 --
          bean id="conversionService"
              class="org.springframework.format.support.FormattingConversionServiceFactoryBean"
              property name="converters"
                  set
                      bean class="cn.itcast.springmvc.convert. DateConverter "/
                  /set
              /property
          /bean
    

    2,配置Converter(第二种,补偿用)

    
      ?xml version="1.0" encoding="UTF-8"?
      beans xmlns="http://www.springframework.org/schema/beans"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
          xmlns:context="http://www.springframework.org/schema/context"
          xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xmlns:mvc="http://www.springframework.org/schema/mvc"
          xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
              http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
              http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd
              http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd"
          !-- 扫描带Controller注解的类 --
          context:component-scan base-package="cn.itcast.springmvc.controller" /
          !-- 转换器配置 --
          bean id="conversionService"
              class="org.springframework.format.support.FormattingConversionServiceFactoryBean"
              property name="converters"
                  set
                      bean class="cn.itcast.springmvc.convert.DateConverter"/
                  /set
              /property
          /bean
          !-- 自定义webBinder --
          bean id="customBinder" class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer"
              property name="conversionService" ref="conversionService" /
          /bean
          !--注解适配器 --
          bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"
               property name="webBindingInitializer" ref="customBinder"/property 
          /bean
          !-- 注解处理器映射器 --
          bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/
          !-- 加载注解驱动 --
          !-- mvc:annotation-driven/ --
          !-- 视图解析器 --
          bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
              property name="viewClass"
                  value="org.springframework.web.servlet.view.JstlView" /
              !-- jsp前缀 --
              property name="prefix" value="/WEB-INF/jsp/" /
              !-- jsp后缀 --
              property name="suffix" value=".jsp" /
          /bean
      /beans
    

    校验器Validation

  • 配置
    ?xml version="1.0" encoding="UTF-8"?
    beans xmlns="http://www.springframework.org/schema/beans"
      xmlns:mvc="http://www.springframework.org/schema/mvc"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="
          http://www.springframework.org/schema/beans
          http://www.springframework.org/schema/beans/spring-beans.xsd
          http://www.springframework.org/schema/mvc
          http://www.springframework.org/schema/mvc/spring-mvc.xsd"
      mvc:annotation-driven validator="globalValidator"/
    /beans
    
  • 代码
    //配置局部校验器
    @Controller
    public class MyController {
      @InitBinder
      protected void initBinder(WebDataBinder binder) {
          binder.addValidators(new FooValidator());
      }
    }
    
  • 代码

    
    //配置局部校验器
    @Controller
    public class MyController {
      @InitBinder
      protected void initBinder(WebDataBinder binder) {
          binder.addValidators(new FooValidator());
      }
    }
    

    拦截器nterceptors

  • 配置
    mvc:interceptors
      bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"/
      mvc:interceptor
          mvc:mapping path="/**"/
          mvc:exclude-mapping path="/admin/**"/
          bean class="org.springframework.web.servlet.theme.ThemeChangeInterceptor"/
      /mvc:interceptor
      mvc:interceptor
          mvc:mapping path="/secure/*"/
          bean class="org.example.SecurityInterceptor"/
      /mvc:interceptor
    /mvc:interceptors
    
  • 代码
    package com.itheima.springmvc.interceptor;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import org.springframework.web.servlet.HandlerInterceptor;
    import org.springframework.web.servlet.ModelAndView;
    public class Interceptor2 implements HandlerInterceptor {
      @Override
      public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
              throws Exception {
          System.out.println("Interceptor2 preHandle......");
          // 在handle执行之前执行此方法。
          //返回值:如果返回true,放行
          //返回值:如果返回false,拦截
          return true;
      }
      @Override
      public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
              ModelAndView modelAndView) throws Exception {
          //handle执行之后,返回ModelAndView之前。
          System.out.println("Interceptor2 postHandle......");
      }
      @Override
      public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
              throws Exception {
          // 返回ModelAndView之后。
          //可以在此处理异常
          System.out.println("Interceptor2 afterCompletion......");
      }
    
  • 代码

    
    package com.itheima.springmvc.interceptor;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import org.springframework.web.servlet.HandlerInterceptor;
    import org.springframework.web.servlet.ModelAndView;
    public class Interceptor2 implements HandlerInterceptor {
      @Override
      public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
              throws Exception {
          System.out.println("Interceptor2 preHandle......");
          // 在handle执行之前执行此方法。
          //返回值:如果返回true,放行
          //返回值:如果返回false,拦截
          return true;
      }
      @Override
      public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
              ModelAndView modelAndView) throws Exception {
          //handle执行之后,返回ModelAndView之前。
          System.out.println("Interceptor2 postHandle......");
      }
      @Override
      public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
              throws Exception {
          // 返回ModelAndView之后。
          //可以在此处理异常
          System.out.println("Interceptor2 afterCompletion......");
      }
    

    视图解析器View Resolvers

    
    mvc:view-resolvers
        mvc:content-negotiation
            mvc:default-views
                bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView"/
            /mvc:default-views
        /mvc:content-negotiation
        mvc:jsp/
    /mvc:view-resolvers
    请注意, FreeMarker、平铺、Groovy 标记和脚本模板还需要配置基础视图技术‎.
    

    MVC 命名空间提供专用元素。例如与 FreeMarker:

    
    mvc:view-resolvers
        mvc:content-negotiation
            mvc:default-views
                bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView"/
            /mvc:default-views
        /mvc:content-negotiation
        mvc:freemarker cache="false"/
    /mvc:view-resolvers
    mvc:freemarker-configurer
        mvc:template-loader-path location="/freemarker"/
    /mvc:freemarker-configurer
    

    静态资源Static Resources

    
    mvc:resources mapping="/resources/**"  location="/public, classpath:/static/"cache-period="31556926" /
    
    SpringMVC配置文件

    默认的Servlet。静态资源处理

    在springMVC-servlet.xml中配置后,会在Spring MVC上下文中定义一个org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler,它会像一个检查员,对进入DispatcherServlet的URL进行筛查,如果发现是静态资源的请求,就将该请求转由Web应用服务器默认的Servlet处理,如果不是静态资源的请求,才由DispatcherServlet继续处理。

    一般Web应用服务器默认的Servlet名称是”default”,因此DefaultServletHttpRequestHandler可以找到它。如果你所有的Web应用服务器的默认Servlet名称不是”default”,则需要通过default-servlet-name属性显示指定:

    
    mvc:default-servlet-handler     default-servlet-name="所使用的Web服务器默认使用的Servlet名称" /
    

    混合视图Path maching

    可以根据不同的后缀 不同的结果,更详细的文章::https://blog.csdn.net/yingxiake/article/details/51150316

    文章如有错误,请您一定指出,感谢之至!
    如果你有不同的见解,欢迎留言,或者加我QQ986320270
    图片可能来源于网络,如有侵权请告知。
    最后:关注一下呗

    如果你有不同的见解,欢迎留言,或者加我QQ986320270

    最后:关注一下呗

    长按二维码识别关注

    本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

    本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

    原文链接:blog.ouyangsihai.cn >> SpringMVC配置文件


      转载请注明: 好好学java SpringMVC配置文件

     上一篇
    SpringMVC注解 SpringMVC注解
    SpringMVC注解注解概观来自知乎作者:一七三点八 Spring2.5引入注解式处理器 @Controller:用于标识是处理器类; @RequestMapping:请求到处理器功能方法的映射规则; @RequestParam:请求参数
    2021-04-05
    下一篇 
    Spring 重试机制实现原理 Spring 重试机制实现原理
    重试,我们都不陌生,是为了保障逻辑容错性和可用性的一种机制。一般在网络通信组件底层比较常见,比如网络连接操作,如果有网络中断时,一般需要重试几次。 在上层的业务代码里,如果我们需要对某个特定操作加入重试机制,可以硬编码,然后循环调
    2021-04-05