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 创建的对象,用于将初始参数或配置信息共享给整个应用程序。
  • 例子:一个工作门户的名称是yiibai.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

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/264457.html

(0)
上一篇 2022年6月7日 01:39
下一篇 2022年6月7日 01:39

相关推荐

发表回复

登录后才能评论