Servlet 中 ServletConfig 和 ServletContext 的区别

Servlet 中 ServletConfig 和 ServletContext 的区别

ServletConfig和ServletContext都是在servlet初始化时创建的对象,用来给servlet提供一些初始参数或者配置信息。但是,不同之处在于 ServletConfig 共享的信息是针对特定 servlet 的,而 ServletContext 共享的信息对 Web 应用程序中的所有 servlet 都可用。

ServletConfig:

  • ServletConfig 是一个对象,包含一些初始参数或配置信息,由 Servlet Container 创建并在初始化时传递给 servlet。
  • ServletConfig 用于特定的 servlet,这意味着应将特定于 servlet 的信息存储在 web.xml 中并使用此对象检索它们。
  • 例子:假设,一个人正在建立一个工作门户,并希望与招聘人员和求职者共享不同的电子邮件 ID(可能会随着时间的推移而改变)。需要编写两个 servlet,一个用于处理招聘人员的请求,另一个用于处理求职者。在哪里存储电子邮件 ID?将 email-id 作为不同 servlet 的名称-值对放在 web.xml 中,可以在 servlet 中使用 getServletConfig().getInitParameter("name") 进一步检索。

ServletContext:

  • ServletContext 是 Servlet Container 创建的对象,用于将初始参数或配置信息共享给整个应用程序。
  • 例子: 一个工作门户的名称是 geek-docs.com 。在不同 servlet 提供的网页顶部显示网站名称,需要将网站名称存储在每个 servlet 中,从而导致冗余。由于每个 Servlet 都可以访问 ServletContext 共享的信息,因此最好使用 ServletContext 并在需要时使用 getServletContext.getInitParameter("name") 检索网站名称。

ServletConfig 和 ServletContext 示例的实现如下所示:

web.xml

<web-app>

<servlet>
    <servlet-name>recruiter</servlet-name>
    <servlet-class>Recruiter</servlet-class>
    <init-param>
    <param-name>Email</param-name>
    <param-value>forRecruiter@xyz.com</param-value>
    </init-param>
</servlet>

<servlet-mapping>
    <servlet-name>recruiter</servlet-name>
    <url-pattern>/servlet1</url-pattern>
</servlet-mapping>

<servlet>
    <servlet-name>applicant</servlet-name>
    <servlet-class>Applicant</servlet-class>
    <init-param>
    <param-name>Email</param-name>
    <param-value>forApplicant@xyz.com</param-value>
    </init-param>
</servlet>

<servlet-mapping>
    <servlet-name>applicant</servlet-name>
    <url-pattern>/servlet2</url-pattern>
</servlet-mapping>

<context-param>
    <param-name>Website-name</param-name>
    <param-value>NewWebsite.tg</param-value>
</context-param>
</web-app>

servelet示例代码

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class Recruiter extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {
        String email = getServletConfig() .getInitParameter("Email");
        String website = getServletContext() .getInitParameter("Website-name");
        PrintWriter out = response.getWriter();
        out.println("<center><h1>" + website + "</h1></center><br><p>Contact us:" + email);
    }
}

servelet应用示例代码

import java.io.*;
import javax.servlet.ServletException;
import javax.servlet.http.*;

public class Applicant extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {

        String email = getServletConfig() .getInitParameter("Email");
        String website = getServletContext().getInitParameter("Website-name");
        PrintWriter out = response.getWriter();
        out.println("<center><h1>" + website
                    + "</h1></center><br><p>Contact us:"\n                    + email);
    }
}

下面是 ServletConfig 和 ServletContext 两者的对比区别表:

ServletConfig ServletContext
ServletConfig 是特定于 Servlet ServletContext 适用于整个应用程序
servletConfig 的参数在 <servlet> 内的 <init-param> 中以名称-值对的形式出现。 servletContext 的参数在 <servlet><web-app> 内部的 <context-param> 中作为名称-值对存在
ServletConfig 对象通过 getServletConfig() 方法获得。 ServletContext 对象是通过 getServletContext() 方法获得的。
每个 servlet 都有自己的 ServletConfig 对象。 ServletContext 对象只是一个对象,由应用程序的不同 servlet 使用。
当只有一个 servlet 需要它共享的信息时,使用 ServletConfig。 当整个应用程序需要共享信息时使用 ServletContext

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程