9 ServletConfig和ServletContext

女爷i 2023-09-27 15:56 287阅读 0赞

ServletContext和ServletConfig

ServletContext对象

ServletContext对象介绍

ServletContext官方叫Servlet上下文。服务器会为每一个Web应用创建一个ServletContext对象。这个对象全局唯一,而且Web应用中的所有Servlet都共享这个对象。所以叫全局应用程序共享对象

b939c71f1460d9acb683ec9714d82e62.png

ServletContext对象的作用

Ø 相对路径转绝对路径

Ø 获取容器的附加信息

Ø 读取配置信息

Ø 全局容器

ServletContext对象的使用

获取项目的部署名

context.getContextPath()

相对路径转绝对路径(文件上传下载时需要注意)

context.getRealPath(“path”)

该方法可以将一个相对路径转换为绝对路径,在文件上传与下载时需要用到该方法做路径的转换。

获取容器的附加信息

servletContext.getServerInfo()

返回Servlet容器的名称和版本号

servletContext.getMajorVersion()

返回Servlet容器所支持Servlet的主版本号

servletContext.getMinorVersion()

返回Servlet容器所支持Servlet的副版本号。

获取web.xml文件中的信息

  1. <context-param>
  2. <param-name>key</param-name>
  3. <param-value>value</param-value>
  4. </context-param>

1e884b6a35ba44e8fdb5b6ef318a3757.gif

829bf830660ca1b8aa69f7f6ccd22932.gif

servletContext.getInitParameter(“key”)

该方法可以读取web.xml文件中标签中的配置信息。

servletContext.getInitParameterNames()

该方法可以读取web.xml文件中所有param-name标签中的值。

全局容器

servletContext.setAttribute(“key”,ObjectValue)

向全局容器中存放数据。

servletContext.getAttribute(“key”)

从全局容器中获取数据。

servletContext.removeAttribute(“key”)

根据key删除全局容器中的value。

ServletContext对象生命周期

当容器启动时会创建ServletContext对象并一直缓存该对象,直到容器关闭后该对象生命周期结束。ServletContext对象的生命周期非常长,所以在使用全局容器时不建议存放业务数据。

ServletConfig对象

ServletConfig对象对应web.xml文件中的节点。当Tomcat初始化一个Servlet时,会将该Servlet的配置信息,封装到一个ServletConfig对象中。我们可以通过该对象读取节点中的配置信息

  1. <servlet>
  2. <servlet-name>servletName</servlet-name>
  3. <servlet-class>servletClass</servlet-class>
  4. <init-param>
  5. <param-name>key</param-name>
  6. <param-value>value</param-value>
  7. </init-param>
  8. </servlet>

7890baf01723845ab981493921c32196.gif

0a02fbded7b750072995ef89a9f7a6a3.gif

servletConfig.getInitParameter(“key”);

该方法可以读取web.xml文件中标签中标签中的配置信息。

servletConfig.getInitParameterNames();

该方法可以读取web.xml文件中当前标签中所有标签中的值。

测试代码

Servlet1

package com.msb.testServlet; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.List; /** * @Author: Ma HaiYang * @Description: MircoMessage:Mark_7001 */ public class Servlet1 extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //获取Servlet对象的方式 // 通过req对象 ServletContext servletContext1 = req.getServletContext(); // 通过继承的方法 ServletContext servletContext2 = this.getServletContext(); System.out.println(servletContext1 == servletContext2); // 获取当前项目的部署名 String contextPath = servletContext1.getContextPath(); System.out.println(“contextPath”+contextPath); // 将一个相对路径转化为项目的绝对路径 String fileUpload = servletContext1.getRealPath(“fileUpload”); System.out.println(fileUpload); String serverInfo = servletContext1.getServerInfo(); System.out.println(“servletInfo”+serverInfo); int majorVersion = servletContext1.getMajorVersion(); int minorVersion = servletContext1.getMinorVersion(); System.out.println(majorVersion+”:”+minorVersion); // 获取web.xml中配置的全局的初始信息 String username = servletContext1.getInitParameter(“username”); String password = servletContext1.getInitParameter(“password”); System.out.println(username+”:”+password); //向ServletContext对象中增加数据 域对象 List data=new ArrayList<>(); Collections.addAll(data,”张三”,”李四”,”王五”); servletContext1.setAttribute(“list”,data); servletContext1.setAttribute(“gender”,”boy”); } }

Servlet2

  1. package com.msb.testServlet;
  2. import javax.servlet.ServletContext;
  3. import javax.servlet.ServletException;
  4. import javax.servlet.http.HttpServlet;
  5. import javax.servlet.http.HttpServletRequest;
  6. import javax.servlet.http.HttpServletResponse;
  7. import java.io.IOException;
  8. import java.util.Enumeration;
  9. import java.util.List;
  10. /**
  11. * @Author: Ma HaiYang
  12. * @Description: MircoMessage:Mark_7001
  13. */
  14. public class Servlet2 extends HttpServlet {
  15. @Override
  16. protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  17. ServletContext servletContext = this.getServletContext();
  18. // 获取web.xml中配置的全局的初始信息
  19. Enumeration<String> pnames = servletContext.getInitParameterNames();
  20. while(pnames.hasMoreElements()){
  21. String e = pnames.nextElement();
  22. System.out.println(e+":"+servletContext.getInitParameter(e));
  23. }
  24. List<String> list = (List<String>) servletContext.getAttribute("list");
  25. System.out.println(list);
  26. String gender = (String)servletContext.getAttribute("gender");
  27. System.out.println(gender);
  28. }
  29. }

d5d9535b6a7830e91814389d13e48507.gif

5067a186d8e7b4c74c03de637e6c93c2.gif

Servlet3

  1. package com.msb.testServlet;
  2. import javax.servlet.ServletConfig;
  3. import javax.servlet.ServletException;
  4. import javax.servlet.http.HttpServlet;
  5. import javax.servlet.http.HttpServletRequest;
  6. import javax.servlet.http.HttpServletResponse;
  7. import java.io.IOException;
  8. /**
  9. * @Author: Ma HaiYang
  10. * @Description: MircoMessage:Mark_7001
  11. */
  12. public class Servlet3 extends HttpServlet {
  13. @Override
  14. protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  15. ServletConfig servletConfig = this.getServletConfig();
  16. System.out.println(servletConfig.getInitParameter("brand"));
  17. System.out.println(servletConfig.getInitParameter("screen"));
  18. }
  19. }

2166e731d50f7d0e015002a1c3964957.gif

563aec6a4b19894a9574105d63a650b7.gif

Servlet4

  1. package com.msb.testServlet;
  2. import javax.servlet.ServletConfig;
  3. import javax.servlet.ServletException;
  4. import javax.servlet.http.HttpServlet;
  5. import javax.servlet.http.HttpServletRequest;
  6. import javax.servlet.http.HttpServletResponse;
  7. import java.io.IOException;
  8. /**
  9. * @Author: Ma HaiYang
  10. * @Description: MircoMessage:Mark_7001
  11. */
  12. public class Servlet4 extends HttpServlet {
  13. @Override
  14. protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  15. ServletConfig servletConfig = this.getServletConfig();
  16. System.out.println(servletConfig.getInitParameter("pinpai"));
  17. System.out.println(servletConfig.getInitParameter("pingmu"));
  18. }
  19. }

acb764ceb74518d4ce0e195763a90783.gif

ffa481aff80ce729ae85186c96a50bd7.gif

web.xml配置

<?xml version=”1.0” encoding=”UTF-8”?> username mashibing password 123456 servlet1 com.msb.testServlet.Servlet1 servlet2 com.msb.testServlet.Servlet2 servlet3 com.msb.testServlet.Servlet3 brand ASUS screen 三星 servlet4 com.msb.testServlet.Servlet4 pinpai 联想 pingmu 京东方 servlet1 /servlet1.do servlet2 /servlet2.do servlet3 /servlet3.do servlet4 /servlet4.do

发表评论

表情:
评论列表 (有 0 条评论,287人围观)

还没有评论,来说两句吧...

相关阅读