概述
- Servlet在有些情况下可能需要访问Servlet容器或借助Servlet容器访问外部的资源,所以,Serlvet引擎需要将表示Servlet容器的对象传递给Servlet。另外,在web.xml文件中为某个Servlet设置的友好名称和初始化参数等信息也需要传递给该Servlet
- Servlet引擎将代表Servlet容器的对象(ServletContext)和Servlet的配置参数信息一并封装到一个称为ServletConfig的对象中,并在初始化Servlet实例对象时传递给该Servlet。ServletConfig接口则用于定义ServletConfig对象需要对外提供的方法,以便在Servlet程序中可以调用这些方法来获取有关信息。
- Servlet引擎调用Servlet的实例对象的init(ServletConfig config)方法将ServletConfig对象传递给Servlet。Servlet.getServletConfig()方法必须返回init(ServletConfig config)方法传递进来的这个ServletConfig对象的引用。
- ServletConfig接口的方法
- getInitParameterNames
- getInitParameter
- getServletName
- getServletContext
测试代码
package com.mac;
import java.io.IOException;
/*
* ServletConfig对象:
* 1.封装了Servlet的配置信息
* 2.可以获得ServletContext
* 3.方法:
* 3.1.public String getInitParameter(String name):获取指定参数名的参数值(init-param节点下面)
* 3.2.public java.util.Enumeration<E> getInitParameterNames():获取参数名组成的Enumeration对象
* 3.3.public ServletContext getServletContext()
* 3.4.public String getServletName():获取Servlet的配置名称
*/
public class HelloServlet implements Servlet{
@Override
public void destroy() {
System.out.println("销毁Servlet对象~~~~");
}
@Override
public ServletConfig getServletConfig() {
System.out.println("获取Servlet配置~~~~");
return null;
}
@Override
public String getServletInfo() {
System.out.println("获取Servlet信息~~~~");
return null;
}
/*
* public void init(ServletConfig config) throws ServletException:
* 由 servlet 容器调用,指示将该 servlet 放入服务。
* servlet 容器仅在实例化 servlet 之后调用 init 方法一次。在 servlet 可以接收任何请求之前,init 方法必须成功完成。
* servlet 容器无法将 servlet 放入服务,如果 init 方法:
* 抛出 ServletException
* 未在 Web 服务器定义的时间段内返回
* 参数
* config 包含 servlet 的配置和初始化参数的 ServletConfig 对象
* Throws ServletException:
* 如果发生妨碍 servlet 正常操作的异常
*/
@Override
public void init(ServletConfig config) throws ServletException {
/*
* ServletConfig:
* servlet 容器使用的 servlet 配置对象,该对象在初始化期间将信息传递给 servlet。
*/
/*
* public String getInitParameter(String name)
* 返回包含指定初始化参数的值的 String,如果参数不存在,则返回 null。
* name 指定初始化参数名称的 String
* return 包含初始化参数值的 String
*/
//1.获取web.xml中,指定参数名的参数值(init-param节点下面)
String user = config.getInitParameter("user");
String password = config.getInitParameter("password");
System.out.println("user: " + user);
System.out.println("password: " + password);
System.out.println("-------------------------------------");
/*
* public java.util.Enumeration<E> getInitParameterNames()
* 以 String 对象的 Enumeration 的形式返回 servlet 的初始化参数的名称,如果 servlet 没有初
* 始化参数,则返回一个空的 Enumeration。
* return 包含 servlet 初始化参数名称的 String 对象的 Enumeration
*/
//2.获取所有的param-name
Enumeration<String> initParameterNames = config.getInitParameterNames();
while( initParameterNames.hasMoreElements() ) {
System.out.println("names: " + initParameterNames.nextElement());
}
System.out.println("-------------------------------------");
/*
* public String getServletName()
* 返回此 servlet 实例的名称。该名称可能是通过服务器管理提供的,在 Web 应用程序部署描述符中分配,或者对于未注册(和未命名)
* 的 servlet 实例,该名称将是该 servlet 的类名称。
* return servlet 实例的名称
*/
//3.获取Servlet的名称
String servletName = config.getServletName();
System.out.println("servletName: " + servletName); //结果是web.xml中的servlet-name值
}
@Override
public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
System.out.println("Servlet服务~~~~");
}
public HelloServlet() {
System.out.println("构造器~~~~");
}
}
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" metadata-complete="true" version="3.0">
<servlet>
<servlet-name>helloServlet</servlet-name>
<servlet-class>com.mac.HelloServlet</servlet-class>
<init-param>
<param-name>user</param-name>
<param-value>root</param-value>
</init-param>
<init-param>
<param-name>password</param-name>
<param-value>123456</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>helloServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>
运行结果
信息: Starting Servlet Engine: Apache Tomcat/7.0.81
构造器~~~~
user: root
password: 123456
-------------------------------------
names: password
names: user
-------------------------------------
servletName: helloServlet
十月 14, 2017 12:25:11 下午 org.apache.catalina.startup.TldConfig execute
信息: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
构造器~~~~
Servlet初始化~~~~参数: org.apache.catalina.core.StandardWrapperFacade@70c3c787
十月 14, 2017 12:25:11 下午 org.apache.coyote.AbstractProtocol start
信息: Starting ProtocolHandler ["http-bio-8080"]
十月 14, 2017 12:25:11 下午 org.apache.coyote.AbstractProtocol start
信息: Starting ProtocolHandler ["ajp-bio-8009"]
十月 14, 2017 12:25:11 下午 org.apache.catalina.startup.Catalina start
信息: Server startup in 862 ms
Servlet服务~~~~
完整源码下载
欢迎加入交流群:451826376
更多信息:www.itcourse.top
完整教程PDF版本下载
网友评论