SpringMVC源码解析之Servlet

一、Servlet

Servlet是JavaWeb的核心接口,运行在web服务器中,负责接收来自web客户端的请求并作出响应。
Servlet接口
Servlet接口定义了5个方法。
(1)init方法
负责Servlet的初始化,在servlet被加入到web容器时由容器调用,只会被调用一次。如tomcat容器会在StandardWrapper#initServlet(Servlet)中调用该初始化方法。
(2)getServletConfig方法
负责返回该Servlet的ServletConfig对象,ServletConfig保存了该Servlet相关的配置。
(3)getServletInfo方法
用于返回servlet相关的信息,如作者、版权等等。
(4)service方法
具体处理一个请求的逻辑
(5)destroyfan方法
在servlet销毁(一般是关闭服务器)时的处理,主要是释放资源,只会被调用一次。

二、配置文件

一个简单的SpringMVC的配置文件如下,我们将在后面简单介绍每个配置项的作用。

<display-name>SpringMVC xml demo</display-name>
<context-param>
	<param-name>contextConfigLocation</param-name>
	<param-value>application.xml</param-value>
</context-param>
<servlet>
	<servlet-name>dispatcherServlet</servlet-name>
	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
	<init-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>dispatcher.xml</param-value>
	</init-param>
	<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
	<servlet-name>dispatcherServlet</servlet-name>
	<url-pattern>/</url-pattern>
</servlet-mapping>

三、ServletConfig

ServletConfig是Servlet的配置内容,在容器初始化Servlet时作为参数传递。一个Servlet对应一个ServletConfig。
ServletConfig接口
共有4个方法。
getServletName方法返回servlet的名称,与配置文件中的servlet-name对应。
getInitParameterNames方法用于返回所有<init-param>配置项下的<param-name>集合。
getInitParameterName方法用于根据<param-name>获取<param-value>值。
getServletContext方法用于获取ServletContext对象。

四、ServletContext

ServletContext是web应用的上下文,用于servlet与容器之间的交流。与ServletConfig与Servlet一一对应不同,ServletContext被容器内的所有servlet共享。也就是说,ServletConfig是Servlet级的,ServletContext是应用级的。
ServletContext
ServletContext作为容器的上下文,除了全局的配置参数以外,还有一些更多的功能,常见的作用如下:
(1)传递配置参数
和ServletConfig一样,保存并传递配置参数是ServletContext最常见的使用方式之一。
如:getInitParameterName,getInitParameterNames获取初始化参数(对应context-param),getServletContextName获取应用名称(对应display-name)
(2)获取容器信息
可以通过ServletContext获取容器的信息。
如getServerInfo返回容器的名称、版本等信息,getMajorVersion和getMinorVersion返回容器支持的Servlet的最大和最小版本。
(3)配置应用级属性
通过getAttribute、getAttributeNames、setAttribute、removeAttribute方法获取和配置应用级别的属性。
attribute属性和parameter参数是彼此独立的两套数据,即使同名也不会互相覆盖。
(4)站点级的操作
站点级是比Context更高一层的级别(Tomcat的Host级),通过public ServletContext getContext(String uripath)可以根据路径获取同一个站点下的其它应用的ServletContext,从而进行站点级的操作。不过出于安全的考虑,一般该方法都是返回null值。
(5)Servlet管理
通过getServlets、getServlet、getServletNames获取并管理应用下的Servlet。
(6)资源文件解析
通过getResourcePaths、getResource、getResourceAsStream、getRequestDispatcher等方法对资源文件进行处理。
(7)日志功能
通过log进行日志记录。
等等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring MVC 是一个基于 Servlet API 构建的 Web 框架,它是 Spring Framework 的一部分,提供了 Model-View-Controller(MVC)架构模式的实现。Spring MVC 的核心思想是将应用程序的业务逻辑与视图分离,使应用程序更容易维护和扩展。 Spring MVC 的源码涉及到很多模块,比如 DispatcherServlet、HandlerMapping、HandlerAdapter、ViewResolver 等等。下面我们从 DispatcherServlet 入手,深度解析 Spring MVC 的源码。 1. DispatcherServlet DispatcherServlet 是整个 Spring MVC 框架的核心,它是一个 Servlet,所有的请求都会经过它。DispatcherServlet 的主要作用是将请求分派给相应的 HandlerMapping,然后将处理结果返回给客户端。DispatcherServlet 在初始化时会加载一些配置文件,比如 applicationContext.xml、spring-mvc.xml 等等。这些配置文件定义了 Spring MVC 的各个组件,包括 HandlerMapping、HandlerAdapter、ViewResolver 等等。 2. HandlerMapping HandlerMapping 用来映射请求到相应的处理器,它根据请求的 URL 和其他条件来确定最终的处理器。Spring MVC 提供了多种 HandlerMapping 实现,比如 BeanNameUrlHandlerMapping、RequestMappingHandlerMapping、SimpleUrlHandlerMapping 等等。其,RequestMappingHandlerMapping 是最常用的 HandlerMapping 实现,它会扫描应用程序所有带有 @Controller 注解的类,并将其所有带有 @RequestMapping 注解的方法注册为处理器。 3. HandlerAdapter HandlerAdapter 用来确定请求处理器的类型,并调用相应的方法来处理请求。Spring MVC 提供了多种 HandlerAdapter 实现,比如 HttpRequestHandlerAdapter、SimpleControllerHandlerAdapter、AnnotationMethodHandlerAdapter 等等。其,AnnotationMethodHandlerAdapter 是最常用的 HandlerAdapter 实现,它会根据方法的参数类型和返回值类型动态地确定请求处理器的类型,并调用相应的方法来处理请求。 4. ViewResolver ViewResolver 用来将逻辑视图名解析为实际的视图对象,它根据逻辑视图名和其他条件来确定最终的视图对象。Spring MVC 提供了多种 ViewResolver 实现,比如 InternalResourceViewResolver、FreeMarkerViewResolver、VelocityViewResolver 等等。其,InternalResourceViewResolver 是最常用的 ViewResolver 实现,它会将逻辑视图名解析为 JSP 文件名,并返回一个 InternalResourceView 对象。 5. ModelAndView ModelAndView 是 Spring MVC 最常用的视图模型对象,它包含了视图名称和模型数据。在处理请求时,请求处理器将模型数据填充到 ModelAndView 对象,并返回一个 ModelAndView 对象作为处理结果。DispatcherServlet 会将 ModelAndView 对象传递给 ViewResolver,ViewResolver 会使用视图名称和模型数据来渲染响应结果。 以上就是 Spring MVC 源码深度解析的简要介绍,需要注意的是,Spring MVC 的源码非常庞大,涉及到很多细节问题。如果需要深入研究 Spring MVC 的源码,需要花费大量的时间和精力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值