欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringMVC中的ResourceUrlProviderExposingInterceptor詳解

 更新時間:2023年12月25日 10:12:07   作者:安迪源文  
這篇文章主要介紹了SpringMVC中的ResourceUrlProviderExposingInterceptor詳解,ResourceUrlProviderExposingInterceptor是Spring MVC的一個HandlerInterceptor,用于向請求添加一個屬性,需要的朋友可以參考下

ResourceUrlProviderExposingInterceptor詳解

概述

ResourceUrlProviderExposingInterceptor是Spring MVC的一個HandlerInterceptor,用于向請求添加一個屬性,屬性名稱為ResourceUrlProvider.class.getName(),值是Spring MVC配置定義的一個資源URL提供者對象ResourceUrlProvider。

缺省情況下,Spring MVC配置機制會主動構建一個ResourceUrlProviderExposingInterceptor應用于所有的請求。

關于應用

引入

缺省被WebMvcConfigurationSupport啟用:

// WebMvcConfigurationSupport 代碼片段
// 
	/**
	 * Provide access to the shared handler interceptors used to configure
	 * {@link HandlerMapping} instances with.
	 * <p>This method cannot be overridden; use {@link #addInterceptors} instead.
	 */
	protected final Object[] getInterceptors() {
		if (this.interceptors == null) {
			InterceptorRegistry registry = new InterceptorRegistry();
			addInterceptors(registry);
			registry.addInterceptor(new ConversionServiceExposingInterceptor(mvcConversionService()));
          // 這里創(chuàng)建  ResourceUrlProviderExposingInterceptor,使用的 ResourceUrlProvider
          // 由另外一個 bean 定義方法 #mvcResourceUrlProvider 提供
			registry.addInterceptor(new ResourceUrlProviderExposingInterceptor(mvcResourceUrlProvider()));
			this.interceptors = registry.getInterceptors();
		}
		return this.interceptors.toArray();
	}
// requestMappingHandlerMapping() bean 定義中使用所有 getInterceptors() 定義的通用攔截器
// 		mapping.setInterceptors(getInterceptors());
// viewControllerHandlerMapping() bean 定義中使用所有 getInterceptors() 定義的通用攔截器
// 		handlerMapping.setInterceptors(getInterceptors());
// beanNameHandlerMapping() bean 定義中使用所有 getInterceptors() 定義的通用攔截器
// 		mapping.setInterceptors(getInterceptors());
// resourceHandlerMapping() bean 定義中使用所有 getInterceptors() 定義的通用攔截器
// 		handlerMapping.setInterceptors(getInterceptors());

使用

DispatcherServlet#doDispatch請求處理主流程會先找到能處理該請求的Handler,以HandlerExecutionChain形式包裝存在。

這些HandlerExecutionChain來自某個HandlerMapping,而這些HandlerMapping就是Spring MVC配置中定義的那些HandlerMapping,它們在DispatcherServlet初始化階段#initHandlerMappings執(zhí)行時被從容器中獲取。

DispatcherServlet#doDispatch得到HandlerExecutionChain之后,會調用其方法applyPreHandle以應用各個HandlerInterceptor對請求的前置處理邏輯。

這其中就有ConversionServiceExposingInterceptor。

// HandlerExecutionChain 代碼片段
    /**
	 * Apply preHandle methods of registered interceptors.
	 * @return {@code true} if the execution chain should proceed with the
	 * next interceptor or the handler itself. Else, DispatcherServlet assumes
	 * that this interceptor has already dealt with the response itself.
	 */
	boolean applyPreHandle(HttpServletRequest request, HttpServletResponse response) throws Exception {
		HandlerInterceptor[] interceptors = getInterceptors();
		if (!ObjectUtils.isEmpty(interceptors)) {
			for (int i = 0; i < interceptors.length; i++) {
				HandlerInterceptor interceptor = interceptors[i];
				if (!interceptor.preHandle(request, response, this.handler)) {
					triggerAfterCompletion(request, response, null);
					return false;
				}
				this.interceptorIndex = i;
			}
		}
		return true;
	}

源代碼解析

源代碼版本 : spring-webmvc-5.1.5.RELEASE

package org.springframework.web.servlet.resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.util.Assert;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
/**
 * An interceptor that exposes the {@link ResourceUrlProvider} instance it
 * is configured with as a request attribute.
 *
 * @author Rossen Stoyanchev
 * @since 4.1
 */
public class ResourceUrlProviderExposingInterceptor extends HandlerInterceptorAdapter {
	/**
	 * Name of the request attribute that holds the {@link ResourceUrlProvider}.
	 */
	public static final String RESOURCE_URL_PROVIDER_ATTR = ResourceUrlProvider.class.getName();
	private final ResourceUrlProvider resourceUrlProvider;
	public ResourceUrlProviderExposingInterceptor(ResourceUrlProvider resourceUrlProvider) {
		Assert.notNull(resourceUrlProvider, "ResourceUrlProvider is required");
		this.resourceUrlProvider = resourceUrlProvider;
	}
	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		request.setAttribute(RESOURCE_URL_PROVIDER_ATTR, this.resourceUrlProvider);
		return true;
	}
}

到此這篇關于SpringMVC中的ResourceUrlProviderExposingInterceptor詳解的文章就介紹到這了,更多相關ResourceUrlProviderExposingInterceptor詳解內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java爬蟲范例之使用Htmlunit爬取學校教務網課程表信息

    Java爬蟲范例之使用Htmlunit爬取學校教務網課程表信息

    htmlunit 是一款開源的java 頁面分析工具,讀取頁面后,可以有效的使用htmlunit分析頁面上的內容。項目可以模擬瀏覽器運行,被譽為java瀏覽器的開源實現。今天我們用這款分析工具來爬取學校教務網課程表信息
    2021-11-11
  • JAVA實現基于Tcp協議的簡單Socket通信實例

    JAVA實現基于Tcp協議的簡單Socket通信實例

    本篇文章主要介紹了JAVA實現基于Tcp協議的簡單Socket通信實例,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • maven的settings.xml、pom.xml配置文件使用詳解

    maven的settings.xml、pom.xml配置文件使用詳解

    本文詳解了Maven中的配置文件settings.xml和pom.xml,闡述了它們的作用、配置項以及優(yōu)先級順序,settings.xml存在于Maven安裝目錄和用戶目錄下,分別作用于全局和當前用戶,pom.xml位于項目根路徑下
    2024-09-09
  • 如何利用Map與函數式接口來實現去除if else

    如何利用Map與函數式接口來實現去除if else

    這篇文章主要介紹了如何利用Map與函數式接口來實現去除if else問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Spring中自動裝配的4種方式

    Spring中自動裝配的4種方式

    今天小編就為大家分享一篇關于Spring中自動裝配的4種方式,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • Java8 Lambda表達式詳解及實例

    Java8 Lambda表達式詳解及實例

    這篇文章主要介紹了Java8 Lambda表達式詳解的相關資料,需要的朋友可以參考下
    2016-09-09
  • Spring Boot實現接口簽名驗證的過程

    Spring Boot實現接口簽名驗證的過程

    在Spring Boot中實現接口校驗簽名通常是為了保證接口請求的安全性和數據的完整性,這篇文章主要介紹了Spring Boot實現接口簽名驗證,需要的朋友可以參考下
    2024-04-04
  • JAVA 線程通信相關知識匯總

    JAVA 線程通信相關知識匯總

    這篇文章主要介紹了JAVA 線程通信相關知識,文中講解非常細致,代碼幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-06-06
  • springboot整合mybatis將sql打印到日志的實例詳解

    springboot整合mybatis將sql打印到日志的實例詳解

    這篇文章主要介紹了springboot整合mybatis將sql打印到日志的實例詳解,需要的朋友可以參考下
    2017-12-12
  • Java Mail郵件發(fā)送如何實現簡單封裝

    Java Mail郵件發(fā)送如何實現簡單封裝

    這篇文章主要介紹了Java Mail郵件發(fā)送如何實現簡單封裝,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-11-11

最新評論