一、Servlet
Servlet是JavaWeb的核心接口,运行在web服务器中,负责接收来自web客户端的请求并作出响应。
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。
共有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作为容器的上下文,除了全局的配置参数以外,还有一些更多的功能,常见的作用如下:
(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进行日志记录。
等等。