文章目录
1. 前言
在上一篇文章中,介绍了如何开发并部署一个Servlet。本文主要是分析Servlet中的一些方法及关联类。Servlet的方法有:init(),Service()和destory()。Servlet的核心类图如下所示:
2. Servlet的关联类
通过分析源码可知,Servlet的init函数的代码如下:
Servlet接口代码 | ServletConfig代码 |
---|---|
![]() | ![]() |
在进行初始化的时候,使用了ServletConfig类,而ServletConfig 类中,又包含了ServletContext。所以,本节主要介绍这两个类的含义及用途。
2.1 ServletConfig
Servlet引擎将Servlet的配置参数信息一并封装到一个称为ServletConfig的对象中,并在初始化Servlet实例对象时传递给该Servlet。ServletConfig封装了Servlet的配置信息,并且可以获取ServletContext对象。在具体开发中,可以通过web.xml文件中,标签下的来设置Servlet的初始化信息。
2.1.1 添加Servlet的初始化信息
使用在web.xml文件中配置如下:
1. <servlet>
2. <servlet-name>MainServlet</servlet-name>
3. <servlet-class>com.wes.controller.MainServlet</servlet-class>
4. <init-param>
5. <param-name>param1</param-name>
6. <param-value>avalible in servlet init()</param-value>
7. </init-param>
8. <load-on-startup>0</load-on-startup>
9. </servlet>
从代码中获取参数的代码为:
public class HelloServlet implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("init");
String user = servletConfig.getInitParameter("user");
System.out.println(user);
}
}
2.1.2 ServletConfig的常用接口函数
ServletConfig接口则用于定义ServletConfig对象需要对外提供的方法,以便在Servlet程序中可以调用这些方法来获取有关信息。常用的方法有:
- getInitParameterNames
- getInitParameter
- getServletName
- getServletContext
Servlet引擎调用Servlet的实例对象的init(ServletConfig config)方法将ServletConfig对象传递给Servlet。Servlet.getServletConfig()方法必须返回init(ServletConfig config)方法传递进来的这个ServletConfig对象的引用。
2.2 ServletContext
Servlet在有些情况下可能需要访问Servlet容器或借助Servlet容器访问外部的资源,所以,Serlvet引擎需要将表示Servlet容器的对象传递给Servlet,这个类就是ServletContext。
Servlet引擎为每个WEB应用程序都创建一个对应的ServletContext对象,ServletContext对象被包含在ServletConfig对象中,调用ServletConfig.getServletContext方法可以返回ServletContext对象的引用。
由于一个WEB应用程序中的所有Servlet都共享同一个ServletContext对象,所以,ServletContext对象被称之为 application 对象(Web应用程序对象)。
2.2.1添加web应用程序的初始化参数
在web.xml文件的根元素中增加子元素,可以添加对web程序的初始化参数。常见的web程序初始化参数包括数据库引擎、数据库地址等。代码如下所示:
<web-app>
<context-param>
<param-name>driver</param-name>
<param-value>com.mysql.jdbc.Driver</param-value>
</context-param>
<context-param>
<param-name>jdbcurl</param-name>
<param-value>jdbc:mysql:///</param-value>
</context-param>
</web-app>
从代码中获取参数的代码为
ServletContext context = servletConfig.getServletContext();
String driver = context.getInitParameter("driver");
System.out.println(driver);
2.2.2 ServletContext常用接口函数参数
- getInitParameterNames
- getInitParameter
- getRealPath(String path)
ServletContext.getInitParameterNames方法:用于返回一个包含WEB应用程序的所有初始化参数名称的Enumeration集合对象.
ServletContext.getInitParameter方法:用于返回某个指定名称的初始化参数值。
getRealPath(String path) 方法: 用于返回某个虚拟路径所映射的本地文件系统路径
2.2.3context-param标签 与 init-param标签的异同
标签下的context-param来配置信息,是webApp中的配置信息,能够给该应用中所有的Servlet用。
而init-param所配置的信息,是给init-param所属标签下的Servlet用。
从作用域的范围来看,前者是全局变量,后者是局部变量。
3.总结
本文从Servlet的核心类图出发,分析了与之相关的两个关联类ServletConfig和ServletContext。并介绍了相关用法和方法。并比较了两者的异同。