ServletConfig和ServletContext都是在 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);
}
}
- 输出:在本地主机上部署应用程序并打开网址:
- /servlet1 :
- /servlet2 :
- /servlet1 :
- 如上所示,由于 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 |
Parameters of servletContext are present as name-value pair in |
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 |