servlet初始化参数

针对特定的servlet设置初始化参数

web.xml

<servlet>
    <servlet-name>myServletservlet-name>
    <servlet-class>TestInitParamsservlet-class>

    <init-param>
        <param-name>myEmailparam-name>
        <param-value>[email protected]param-value>
    init-param>
servlet>

servlet代码中

PrintWriter out = response.getWriter();
out.println(getServletConfig().getInitParameter("myEmail"));

每个servlet都继承了一个getServletConfig()方法,getServletConfig()方法返回一个ServletConfig。

在servlet初始化之前不能使用servle初始化参数

servlet初始化包括两个步骤,首先是执行构造函数,这时还没有servlet,在容器调用init()之前,它还不是一个完整的servlet,不具备servlet的特性。执行init()方法后,servlet此时会得到一个ServletConfig对象。

容器初始化一个servlet时,会为这个servlet创建一个唯一的ServletConfig。容器从部署描述文件(web.xml)读出servlet的初始化参数,并把这些参数交给ServletConfig,然后把ServletConfig传递给servlet的init方法

servlet初始化参数只能读一次,就是在容器初始化servlet的时候

针对web应用设置初始化参数,即上下文初始化参数

web.xml

<servlet>
    <servlet-name>myServletservlet-name>
    <servlet-class>TestInitParamsservlet-class>
servlet>
<context-param>
        <param-name>myEmailparam-name>
        <param-value>[email protected]param-value>
contextext-param>

servlet代码中

PrintWriter out = response.getWriter();
out.println(getServletContext().getInitParameter("myEmail"));

ServletContext context = getServletContext();
out.println(context.getInitParameter("myEmail"));

每个servlet有一个ServletConfig
每个web应用有一个ServletContext,如果你的应用分布在多个服务器上(可能在一个集群环境中),那么web应用实际上可以有多个ServletContext。
一个ServletContext确实只对应一个应用,但是前提是应用在一个JVM中

与特定于servlet的servlet初始化参数相比,应用范围的上下文初始化参数的作用更大。上下文参数最常见的用途可能就是存储数据库查找名。

初始化参数认为是部署时常量,部署时写入,运行时可以得到这些参数,但是不能再进行设置。

你可能感兴趣的:(servlet)