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

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章中详细讲解。

时间: 2024-08-31 22:16:53

《Servlet、JSP和Spring MVC初学指南》——1.6 ServletConfig的相关文章

《Servlet、JSP和Spring MVC初学指南》——导读

前言 Java Servlet技术简称Servlet技术,是Java开发Web应用的底层技术.由Sun公司于1996年发布,用来代替CGI--当时生成Web动态内容的主流技术.CGI技术的主要问题是每个Web请求都需要新启动一个进程来处理.创建进程会消耗不少CPU周期,导致难以编写可扩展的CGI程序.而Servlet有着比CGI程序更好的性能,因为Servlet在创建后(处理第一个请求时)就一直保持在内存中.此后,SUN公司发布了JavaServer Pages(JSP)技术,以进一步简化ser

《Servlet、JSP和Spring MVC初学指南》——1.3 编写基础的Servlet应用程序

1.3 编写基础的Servlet应用程序 其实,编写Servlet应用程序出奇简单.只需要创建一个目录结构,并把Servlet类放在某个目录下.本节将教你如何编写一个名为app01a的Servlet应用程序.最初,它会包含一个Servlet,即MyServlet,其效果是向用户发出一条问候. 要运行Servlets,还需要一个Servlet容器.Tomcat是一个开源的Servlet容器,它是免费的,并且可以在任何能跑Java的平台上运行.如果你到现在都还没有安装Tomcat,就应该去看看附录A

《Servlet、JSP和Spring MVC初学指南》——2.4 HttpSession对象

2.4 HttpSession对象 在所有的会话跟踪技术中,HttpSession 对象是最强大和最通用的.一个用户可以有且最多有一个HttpSession,并且不会被其他用户访问到. HttpSession对象在用户第一次访问网站的时候自动被创建,你可以通过调用HttpServletRequest的getSession方法获取该对象.getSession有两个重载方法: HttpSession getSession() HttpSession getSession(boolean create

《Servlet、JSP和Spring MVC初学指南》——1.11 使用部署描述符

1.11 使用部署描述符 如在前面的例子中所见,编写和部署Servlet都是很容易的事情.部署的一个方面是用一个路径配置Servlet的映射.在这些范例中,是利用WebServlet标注类型,用一个路径映射了一个Servlet. 利用部署描述符是配置Servlet应用程序的另一种方法,部署描述符的详情将在第13章"部署描述符"中探讨.部署描述符总是命名为web.xml,并且放在WEB-INF目录下.本章介绍了如何创建一个名为app01c的Servlet应用程序,并为它编写了一个web.

《Servlet、JSP和Spring MVC初学指南》——2.3 Cookies

2.3 Cookies URL重写和隐藏域仅适合保存无须跨越太多页面的信息.如果需要在多个页面间传递信息,则以上两种技术实现成本高昂,因为你不得不在每个页面都进行相应处理.幸运的是,Cookies技术可以帮助我们. Cookies是一个很少的信息片段,可自动地在浏览器和Web服务器间交互,因此cookies可存储在多个页面间传递的信息.Cookie作为HTTP header的一部分,其传输由HTTP协议控制.此外,你可以控制cookies的有效时间.浏览器通常支持每个网站高达20个cookies

《Servlet、JSP和Spring MVC初学指南》——1.9 Http Servlets

1.9 Http Servlets 不说全部,至少大多数应用程序都要与HTTP结合起来使用.这意味着可以利用HTTP提供的特性.javax.servlet.http包是Servlet API中的第二个包,其中包含了用于编写Servlet应用程序的类和接口.javax.servlet.http中的许多类型都覆盖了javax.servlet中的类型. 图1.5展示了javax.servlet.http中的主要类型. 图1.5 javax.servlet.http中的主要类型 1.9.1 HttpSe

《Servlet、JSP和Spring MVC初学指南》——2.2 隐藏域

2.2 隐藏域 使用隐藏域来保持状态类似于URL重写技术,但不是将值附加到URL上,而是放到HTML表单的隐藏域中.当表单提交时,隐藏域的值也同时提交到服务器端.隐藏域技术仅当网页有表单时有效.该技术相对于URL重写的优势在于:没有字符数限制,同时无须额外的编码.但该技术同URL重写一样,不适合跨越多个界面. 清单2.3展示了如何通过隐藏域来更新客户信息.清单2.2的Customer类为客户对象模型. 清单2.2 Customer类 package app02a.hiddenfields; pu

《Servlet、JSP和Spring MVC初学指南》——1.4 ServletRequest

1.4 ServletRequest 对于每一个HTTP请求,Servlet容器都会创建一个ServletRequest实例,并将它传给Servlet的Service方法.ServletRequest封装了关于这个请求的信息. ServletRequest接口中有一些方法. public int getContentLength() 返回请求主体的字节数.如果不知道字节长度,这个方法就会返回−1. public java.lang.String getContentType() 返回请求主体的M

《Servlet、JSP和Spring MVC初学指南》——1.10 处理HTML表单

1.10 处理HTML表单 一个Web应用程序中几乎总会包含一个或者多个HTML表单,供用户输入值.你可以轻松地将一个HTML表单从一个Servlet发送到浏览器.当用户提交表单时,在表单元素中输入的值就会被当作请求参数发送到服务器. HTML输入域(文本域.隐藏域或者密码域)或者文本区的值,会被当作字符串发送到服务器.空的输入域或者文本区会发送空的字符串.因此,有输入域名称的,ServletRequest.getParameter绝对不会返回null. HTML的select元素也向heade