- 内容提要
- 作者简介
- 译者简介
- 前言
- HTTP
- Servlet 和 JSP
- 下载 Spring 或使用 STS 与 Maven/Gradle
- 手动下载 Spring
- 使用 STS 和 Maven/Gradle
- 下载 Spring 源码
- 本书内容简介
- 下载示例应用
- 第 1 章Spring 框架
- 第 2 章模型 2 和 MVC 模式
- 第 3 章Spring MVC 介绍
- 第 4 章基于注解的控制器
- 第 5 章数据绑定和表单标签库
- 第 6 章转换器和格式化
- 第 7 章验证器
- 第 8 章表达式语言
- 第 9 章JSTL
- 第 10 章国际化
- 第 11 章上传文件
- 第 12 章下载文件
- 第 13 章应用测试
- 附录 A Tomcat
- 附录 B Spring Tool Suite 和 Maven
- 附录 C Servlet
- 附录 D JavaServer Pages
- 附录 E 部署描述符
C.6 ServletConfig
当 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。

图 C.4 ServletConfigDemoServlet 效果展示
另一种方法是,在部署描述符中传入初始参数。在这里使用部署描述符,比使用 @WebServlet 更容易,因为部署描述符是一个文本文件,不需要重新编译 Servlet 类,就可以对它进行编辑。
部署描述符将在 C.11 节详细讲解。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论