飞道的博客

ServletConfig与ServletContext

477人阅读  评论(0)

目录

ServletConfig

ServletConfig的介绍

ServletConfig配置方式

ServletConfig的常用方法

ServletContext

ServletContext的介绍

ServletContext配置方式

ServletContext常用方法


  • ServletConfig

  • ServletConfig的介绍

  • ServletConfig是Servlet的配置参数对象
  • 在Servlet的规范中,允许为每一个Servlet都提供一些初始化的配置
  • 所以,每个Servlet都有一个自己的ServletConfig
  • 作用:
  • 在Servlet初始化时,把一些配置信息传递给Servlet
  • 生命周期:和Servlet相同
  • ServletConfig配置方式

  • 在<servlet>标签中,通过<init-param>标签来配置;
  • 有两个子标签
  • 前面介绍也提到过,这些配置信息都是以键值对进行体现的
  • 所以这两子标签分别是:
  • <param-name>:代表初始化参数的key
  • <param-value>:代表初始化参数的value
  • 
        
    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    3. xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
    4. xsi:schemaLocation= "http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
    5. version= "4.0">
    6. <servlet>
    7. <servlet-name>cpc </servlet-name>
    8. <servlet-class>com.example.servletdemo1.HelloServlet </servlet-class>
    9. <init-param>
    10. <param-name>tjrac </param-name>
    11. <param-value>2021tj </param-value>
    12. </init-param>
    13. <init-param>
    14. <param-name>hdu </param-name>
    15. <param-value>2022tj </param-value>
    16. </init-param>
    17. </servlet>
    18. <servlet-mapping>
    19. <servlet-name>cpc </servlet-name>
    20. <url-pattern>/cpc/* </url-pattern>
    21. </servlet-mapping>
    22. </web-app>
  • ServletConfig的常用方法

  • 常用方法
  • getInitParameter(String name)
  • 根据参数名称获取参数的值
  • 返回值:String
  • getInitParameterNames()
  • 获取所有参数名称的枚举
  • 返回值:Enumeration<String>
  • getServletName()
  • 获取Servlet的名称
  • 返回值:String
  • getServletContext()
  • 获取ServletContext对象
  • 返回值:ServletContext
  • 使用示例
  • 第一步:声明ServletConfig
  • 第二步:通过重写init方法,来对ServletConfig对象进行赋值
  • 第三步:演示ServletConfig常用方法
  • 
        
    1. package com.example.servletdemo1;
    2. import java.io.*;
    3. import java.util.Enumeration;
    4. import javax.servlet.ServletConfig;
    5. import javax.servlet.ServletContext;
    6. import javax.servlet.http.HttpServlet;
    7. import javax.servlet.ServletException;
    8. import javax.servlet.http.HttpServletRequest;
    9. import javax.servlet.http.HttpServletResponse;
    10. public class HelloServlet extends HttpServlet {
    11. private ServletConfig config;
    12. public void init (ServletConfig config) throws ServletException {
    13. this.config = config;
    14. }
    15. protected void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    16. //根据key获取value
    17. String hduvalue = config.getInitParameter( "hdu");
    18. System.out.println(hduvalue);
    19. //获取所有的key
    20. Enumeration<String> keys= config.getInitParameterNames();
    21. while(keys.hasMoreElements()){
    22. //获取每一个key
    23. String key= keys.nextElement();
    24. //根据key获取value
    25. String value = config.getInitParameter(key);
    26. System.out.println(key+ ","+value);
    27. }
    28. //获取Servlet的名称
    29. String servletName = config.getServletName();
    30. System.out.println(servletName);
    31. //获取ServletContext对象
    32. ServletContext servletContext = config.getServletContext();
    33. System.out.println(servletContext);
    34. }
    35. protected void doPost (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    36. doGet(request, response);
    37. }
    38. }
  • ServletContext

  • ServletContext的介绍

  • 域对象
  • 域对象指的是对象有作用域
  • 也就是有作用范围
  • 域对象可以实现数据的共享
  • 不同作用范围的域对象,共享数据的能力也不一样
  • 在Servlet规范中,一共有4个域对象
  • ServletContext就是其中的一个
  • 它也是web应用中最大的作用域,也叫application域
  • 它可以实现整个应用之间的数据共享
  • ServletContext
  • ServletContext是应用上下文对象(应用域对象)
  • 每一个应用中只有一个ServletContext对象
  • 并不是服务于某一Servlet
  • 作用:
  • 可以配置和获得应用的全局初始化参数,可以实现Servlet之间的数据共享
  • 生命周期:应用一加载则创建,应用被停止则销毁
  • ServletContext配置方式

  • <web-app>就是配置文件中的根标签
  • 在<web-app>标签中,通过<context-param>标签来配置
  • 有两个子标签
  • <param-name>:代表全局初始化参数的key
  • <param-value>:代表全局初始化参数的value
  • 
        
    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    3. xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
    4. xsi:schemaLocation= "http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
    5. version= "4.0">
    6. <servlet>
    7. <servlet-name>cpc </servlet-name>
    8. <servlet-class>com.example.servletdemo1.HelloServlet </servlet-class>
    9. <init-param>
    10. <param-name>tjrac </param-name>
    11. <param-value>2021tj </param-value>
    12. </init-param>
    13. <init-param>
    14. <param-name>hdu </param-name>
    15. <param-value>2022tj </param-value>
    16. </init-param>
    17. </servlet>
    18. <servlet-mapping>
    19. <servlet-name>cpc </servlet-name>
    20. <url-pattern>/cpc/* </url-pattern>
    21. </servlet-mapping>
    22. <context-param>
    23. <param-name>globalhdu </param-name>
    24. <param-value>global2022tj </param-value>
    25. </context-param>
    26. <context-param>
    27. <param-name>globaltjrac </param-name>
    28. <param-value>global2021tj </param-value>
    29. </context-param>
    30. </web-app>
  • ServletContext常用方法

  • 常用方法
  • getInitParameter(String name)
  • 根据名称获取全局配置的参数
  • 返回值:String
  • getContextPath()
  • 获取当前应用的访问虚拟目录
  • 返回值:String
  • getRealPath(String path)
  • 根据虚拟目录来获取应用部署的磁盘绝对路径
  • 返回值:String
  • 使用示例
  • 第一步:获取ServletContext对象
  • 第二步:常用方法演示
  • 
        
    1. package com.example.servletdemo1;
    2. import java.io.*;
    3. import javax.servlet.ServletContext;
    4. import javax.servlet.http.HttpServlet;
    5. import javax.servlet.ServletException;
    6. import javax.servlet.http.HttpServletRequest;
    7. import javax.servlet.http.HttpServletResponse;
    8. public class HelloServlet extends HttpServlet {
    9. protected void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    10. //1.获取ServletContext对象
    11. ServletContext context = getServletContext();
    12. //2.常用方法演示
    13. //获取全局配置参数
    14. String value = context.getInitParameter( "globalhdu");
    15. System.out.println(value);
    16. //获取应用的虚拟目录
    17. String contextPath = context.getContextPath();
    18. System.out.println(contextPath);
    19. //根据虚拟目录获取绝对路径
    20. String realPath = context.getRealPath( "/");
    21. System.out.println(realPath);
    22. String realPath1 = context.getRealPath( "WEB-INF");
    23. System.out.println(realPath1);
    24. }
    25. protected void doPost (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    26. doGet(request, response);
    27. }
    28. }
  • 常用方法2
  • setAttribute(String name, Object value)
  • 向应用域对象中存储数据
  • 返回值:void
  • getAttribute(String name)
  • 通过名称获取应用域对象中的数据
  • 返回值:Object
  • removeAttribute(String name)
  • 通过名称移除应用域对象中的数据
  • 返回值:void
  • 使用示例2
  • 在ServletContext里设置共享数据
  • 在ServletConfig里获取共享数据
  • 配置:
  • 
        
    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    3. xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
    4. xsi:schemaLocation= "http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
    5. version= "4.0">
    6. <servlet>
    7. <servlet-name>cpc </servlet-name>
    8. <servlet-class>com.example.servletdemo1.HelloServlet </servlet-class>
    9. <init-param>
    10. <param-name>tjrac </param-name>
    11. <param-value>2021tj </param-value>
    12. </init-param>
    13. <init-param>
    14. <param-name>hdu </param-name>
    15. <param-value>2022tj </param-value>
    16. </init-param>
    17. </servlet>
    18. <servlet-mapping>
    19. <servlet-name>cpc </servlet-name>
    20. <url-pattern>/cpc/* </url-pattern>
    21. </servlet-mapping>
    22. <servlet>
    23. <servlet-name>cpcc </servlet-name>
    24. <servlet-class>com.example.servletdemo1.config </servlet-class>
    25. </servlet>
    26. <servlet-mapping>
    27. <servlet-name>cpcc </servlet-name>
    28. <url-pattern>/cpcc </url-pattern>
    29. </servlet-mapping>
    30. <context-param>
    31. <param-name>globalhdu </param-name>
    32. <param-value>global2022tj </param-value>
    33. </context-param>
    34. <context-param>
    35. <param-name>globaltjrac </param-name>
    36. <param-value>global2021tj </param-value>
    37. </context-param>
    38. </web-app>
  • 使用:
  • 
        
    1. public class HelloServlet extends HttpServlet {
    2. protected void doGet( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    3. ServletContext context = getServletContext();
    4. context.setAttribute( "love", "daan");
    5. }
    6. protected void doPost( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    7. doGet(request, response);
    8. }
    9. }
  • 
        
    1. public class config extends HttpServlet {
    2. protected void doGet( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    3. ServletContext context = getServletContext();
    4. Object love = context.getAttribute( "love");
    5. System.out.println(love);
    6. }
    7. protected void doPost( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    8. doGet(request, response);
    9. }
    10. }
  • 启动服务器后,分别使用完成测试
  • http://localhost:8080/demo2/cpc
  • http://localhost:8080/demo2/cpcc

转载:https://blog.csdn.net/weixin_59624686/article/details/125456078
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场