返回介绍

C.6 ServletConfig

发布于 2025-04-22 20:10:07 字数 3414 浏览 0 评论 0 收藏

当 Servlet 容器初始化 Servlet 时,Servlet 容器会给 Servlet 的 init 方法传入一个 ServletConfig。ServletConfig 封装可以通过 @WebServlet 或者部署描述符传给 Servlet 的配置信息。这样,传入的每一条信息就叫一个初始参数。一个初始参数有 key 和 value 两个元件。

为了从 Servlet 内部获取到初始参数的值,要在 Servlet 容器传给 Servlet 的 init 方法的 ServletConfig 中调用 getInitParameter 方法。getInitParameter 的方法签名如下:

java.lang.String getInitParameter(java.lang.String name)

此外,getInitParameterNames 方法则是返回所有初始参数名称的一个 Enumeration。

java.util.Enumeration<java.lang.String> getInitParameterNames()

例如,为了获取 contactName 参数值,要使用下面的方法签名:

String contactName = servletConfig.getInitParameter("contactName");

除 getInitParameter 和 getInitParameterNames 之外,ServletConfig 还提供了另一个很有用的方法:getServletContext。利用这个方法可以从 Servlet 内部获取 ServletContext。关于这个对象的深入探讨,请查阅 C.7 小节。

下面举一个 ServletConfig 的范例,在 servletapi1 中添加一个名为 ServletConfigDemoServlet 的 Servlet。这个新的 Servlet 如清单 C.2 所示。

清单 C.2 ServletConfigDemoServlet 类

package servletapi1;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;

@WebServlet(name = "ServletConfigDemoServlet",
  urlPatterns = { "/servletConfigDemo" },
  initParams = {
    @WebInitParam(name="admin", value="Harry Taciak"),
    @WebInitParam(name="email", value="admin@example.com")
  }
)
public class ServletConfigDemoServlet implements Servlet {
  private transient ServletConfig servletConfig;

  @Override
  public ServletConfig getServletConfig() {
    return servletConfig;
  }

  @Override
  public void init(ServletConfig servletConfig)
      throws ServletException {
    this.servletConfig = servletConfig;
  }

  @Override
  public void service(ServletRequest request,
      ServletResponse response)
      throws ServletException, IOException {
    ServletConfig servletConfig = getServletConfig();
    String admin = servletConfig.getInitParameter("admin");
    String email = servletConfig.getInitParameter("email");
    response.setContentType("text/html");
    PrintWriter writer = response.getWriter();
    writer.print("<!DOCTYPE html>"
        + "<html>"
        + "<body>"
        + "Admin:" + admin
        + "<br/>Email:" + email
        + "</body></html>");
  }

  @Override
  public String getServletInfo() {
    return "ServletConfig demo";
  }

  @Override
  public void destroy() {
  }
}

如清单 C.2 所示,在 @WebServlet 的 initParams 属性中,给 Servlet 传入了两个初始参数(admin 和 email)。

@WebServlet(name = "ServletConfigDemoServlet",
  urlPatterns = { "/servletConfigDemo" },
  initParams = { @WebInitParam(name="admin", value="Harry Taciak"), @WebInitParam(name="email", value="admin@example.com") } )

用下面这个 URL,可以调用 ServletConfigDemoServlet:

http://localhost:8080/servletapi1/servletConfigDemo

其结果类似于图 C.4。

图片 2

图 C.4 ServletConfigDemoServlet 效果展示

另一种方法是,在部署描述符中传入初始参数。在这里使用部署描述符,比使用 @WebServlet 更容易,因为部署描述符是一个文本文件,不需要重新编译 Servlet 类,就可以对它进行编辑。

部署描述符将在 C.11 节详细讲解。

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。