《Servlet、JSP和Spring MVC初学指南》——1.6 ServletConfig

    xiaoxiao2024-03-18  17

    本节书摘来自异步社区《Servlet、JSP和Spring MVC初学指南》一书中的第1章,第1.6节,作者:【加】Budi Kurniawan(克尼亚万) , 【美】Paul Deck著,更多章节内容可以访问云栖社区“异步社区”公众号查看

    1.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。关于这个对象的深入探讨,请查阅本章1.7节。

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

    清单1.2 ServletConfigDemoServlet类

    package app01a; 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("<html><head></head><body>" + "Admin:" + admin + "<br/>Email:" + email + "</body></html>"); } @Override public String getServletInfo() { return "ServletConfig demo"; } @Override public void destroy() { } }

    如清单1.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/app01a/servletConfigDemo其结果类似于图1.4。

    图1.4 ServletConfigDemoServlet效果展示

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

    部署描述符将在本章后续“使用部署描述符”小节以及第13章中详细讲解。

    最新回复(0)