📜  Java Servlet中ServletConfig和ServletContext的区别

📅  最后修改于: 2021-09-12 11:18:22             🧑  作者: Mango

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

Servlet 配置:

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

Servlet 上下文:

  • ServletContext 是 Servlet Container 创建的对象,用于向整个应用程序共享初始参数或配置信息。
  • 例子:
    假设一个人的工作门户的名称是“NewWebsite.tg”。在不同servlet下发的网页顶部显示网站名称,需要将网站名称存储在每个servlet中,从而引起冗余。由于 ServletContext 共享的信息可以被每个 Servlet 访问,因此最好使用 ServletContext 并在需要时使用 getServletContext.getInitParameter(“Name”) 检索网站名称。

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

web.xml

  

    recruiter
    Recruiter
    
      Email
      forRecruiter@xyz.com
    
  
  
  
    recruiter
    /servlet1
  
  
  
    applicant
    Applicant
    
      Email
      forApplicant@xyz.com
    
  
  
  
    applicant
    /servlet2
  
  
  
    Website-name
    NewWebsite.tg
  
  


Servlet for recruiter
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("

" + website                     + "


Contact us:"                     + email);     } }


Servlet for applicant
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("

" + website                     + "


Contact us:"                     + email);     } }


  • 输出:在本地主机上部署应用程序并打开网址:
    1. /servlet1
    2. /servlet2

  • 如上所示,由于 web.xml 中附加的值不同,不同的 servlet 获得具有相同参数名称“电子邮件”的不同电子邮件 ID。
    每个 servlet 在包含 email-id 的 中都有自己的
  • 两个 servlet 都可以访问 ServletContext 参数“Website-name”。因为 在 web.xml 中的 之外,因此它独立于 servlet 并且可以从整个应用程序访问。

下面是两者的对比表:

ServletConfig ServletContext
ServletConfig is servlet specific ServletContext is for whole application
Parameters of servletConfig are present as name-value pair in inside . Parameters of servletContext are present as name-value pair in which is outside of and inside
ServletConfig object is obtained by getServletConfig() method. ServletContext object is obtained by getServletContext() method.
Each servlet has got its own ServletConfig object. ServletContext object is only one and used by different servlets of the application.
Use ServletConfig when only one servlet needs information shared by it. Use ServletContext when whole application needs information shared by it