ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

SpringMVC的九大组件

2021-09-12 02:04:01  阅读:162  来源: 互联网

标签:初始化 String SpringMVC 九大 context 组件 public NAME


SpringMVC的九大组件

SpringMVC是Spring框架中的一个表现层框架,也称为控制层,SpringMVC中有很重要的九大组件

<!-- spring mvc的配置上下文 -->
    <servlet>
        <servlet-name>mvc-dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:mvc-dispatcher-servlet.xml</param-value>
        </init-param>

        <load-on-startup>1</load-on-startup>
    </servlet>

从上面的配置可以看出,SpringMVC与WEB项目集成的入口就是这个DispatcherServlet类,这个类会加载我们配置的spring-mvc.xml文件,源码如下:

public class DispatcherServlet extends FrameworkServlet {

	/** Well-known name for the MultipartResolver object in the bean factory for this namespace. */
	public static final String MULTIPART_RESOLVER_BEAN_NAME = "multipartResolver";

	/** Well-known name for the LocaleResolver object in the bean factory for this namespace. */
	public static final String LOCALE_RESOLVER_BEAN_NAME = "localeResolver";

	/** Well-known name for the ThemeResolver object in the bean factory for this namespace. */
	public static final String THEME_RESOLVER_BEAN_NAME = "themeResolver";

	/**
	 * Well-known name for the HandlerMapping object in the bean factory for this namespace.
	 * Only used when "detectAllHandlerMappings" is turned off.
	 * @see #setDetectAllHandlerMappings
	 */
	public static final String HANDLER_MAPPING_BEAN_NAME = "handlerMapping";

	/**
	 * Well-known name for the HandlerAdapter object in the bean factory for this namespace.
	 * Only used when "detectAllHandlerAdapters" is turned off.
	 * @see #setDetectAllHandlerAdapters
	 */
	public static final String HANDLER_ADAPTER_BEAN_NAME = "handlerAdapter";

	/**
	 * Well-known name for the HandlerExceptionResolver object in the bean factory for this namespace.
	 * Only used when "detectAllHandlerExceptionResolvers" is turned off.
	 * @see #setDetectAllHandlerExceptionResolvers
	 */
	public static final String HANDLER_EXCEPTION_RESOLVER_BEAN_NAME = "handlerExceptionResolver";

	/**
	 * Well-known name for the RequestToViewNameTranslator object in the bean factory for this namespace.
	 */
	public static final String REQUEST_TO_VIEW_NAME_TRANSLATOR_BEAN_NAME = "viewNameTranslator";

	/**
	 * Well-known name for the ViewResolver object in the bean factory for this namespace.
	 * Only used when "detectAllViewResolvers" is turned off.
	 * @see #setDetectAllViewResolvers
	 */
	public static final String VIEW_RESOLVER_BEAN_NAME = "viewResolver";

	/**
	 * Well-known name for the FlashMapManager object in the bean factory for this namespace.
	 */
	public static final String FLASH_MAP_MANAGER_BEAN_NAME = "flashMapManager";

一共是十个方法,其中有一个初始化策略的方法initStrategies

/**
	 * This implementation calls {@link #initStrategies}.
	 */
	@Override
	protected void onRefresh(ApplicationContext context) {
		initStrategies(context);
	}

	/**
	 * Initialize the strategy objects that this servlet uses.
	 * <p>May be overridden in subclasses in order to initialize further strategy objects.
	 */
	protected void initStrategies(ApplicationContext context) {
		initMultipartResolver(context);
		initLocaleResolver(context);
		initThemeResolver(context);
		initHandlerMappings(context);
		initHandlerAdapters(context);
		initHandlerExceptionResolvers(context);
		initRequestToViewNameTranslator(context);
		initViewResolvers(context);
		initFlashMapManager(context);
	}

可看出,初始化策略是其他九个初始化方法的概括,而其他九个初始化方法就是我们要介绍的九大组件

  • 1、MultipartResolver(文件处理器)
    • 对应的初始化方法是initMultipartResolver(context),用于处理上传请求。
    • 处理方法是将普通的request包装成MultipartHttpServletRequest,后者可以直接调用getFile方法获取File。
  • 2、LocaleResolver(当前环境处理器)
    • 对应的初始化方法是initLocaleResolver(context),这就相当于配置数据库的方言一样,有了这个就可以对不同区域的用户显示不同的结果。
    • SpringMVC主要有两个地方用到了Locale:
      • 一是ViewResolver视图解析的时候;
      • 二是用到国际化资源或者主题的时候。
  • 3、ThemeResolver(主题处理器)
    • 对应的初始化方法是initThemeResolver(context),用于解析主题。
    • SpringMVC中一个主题对应一个properties文件,里面存放着跟当前主题相关的所有资源,如图片、css样式等。
    • SpringMVC的主题也支持国际化。
  • 4、HandlerMapping(处理器映射器)
    • 对应的初始化方法是initHandlerMappings(context),这就是根据用户请求的资源uri来查找Handler的。
    • 在SpringMVC中会有很多请求,每个请求都需要一个Handler处理,具体接收到一个请求之后使用哪个Handler进行处理呢?这就是HandlerMapping需要做的事。
  • 5、HandlerAdapters(处理器适配器)
    • 对应的初始化方法是initHandlerAdapters(context),从名字上看,它就是一个适配器。
    • Servlet需要的处理方法的结构却是固定的,都是以request和response为参数的方法。
    • 如何让固定的Servlet处理方法调用灵活的Handler来进行处理呢?这就是HandlerAdapters要做的事情。
  • 6、HandlerExceptionResolvers(异常处理器)
    • 对应的初始化方法是initHandlerExceptionResolvers(context),其它组件都是用来干活的。
    • 在干活的过程中难免会出现问题,出问题后怎么办呢?这就要有一个专门的角色对异常情况进行处理,在SpringMVC中就是HandlerExceptionResolver。
  • 7、RequestToViewNameTranslator(视图名称翻译器),
    • 对应的初始化方法是initRequestToViewNameTranslator(context),有的Handler处理完后并没有设置View也没有设置ViewName,这时就需要从request获取ViewName了,如何从request中获取ViewName就是RequestToViewNameTranslator要做的事情了。
  • 8、ViewResolvers(页面渲染处理器)
    • 对应的初始化方法是initViewResolvers(context),ViewResolver用来将String类型的视图名和Locale解析为View类型的视图。
    • View是用来渲染页面的,也就是将程序返回的参数填入模板里,生成html(也可能是其它类型)文件。
  • 9、FlashMapManager(参数传递管理器)
    • 对应的初始化方法是initFlashMapManager(context),用来管理FlashMap的,FlashMap主要用在redirect重定向中传递参数。

标签:初始化,String,SpringMVC,九大,context,组件,public,NAME
来源: https://www.cnblogs.com/d534/p/15257237.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有