一、Servlet

Servlet是JavaWeb的核心接口,运行在web服务器中,负责接收来自web客户端的请求并作出响应。

spring mvc 和 servlet可以一起使用 springmvc中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。

spring mvc 和 servlet可以一起使用 springmvc中servlet_Servlet_02


共有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是应用级的。

spring mvc 和 servlet可以一起使用 springmvc中servlet_ServletContext_03


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进行日志记录。

等等。