ServletContext用法

1. 简介

  1. ServletContext对象又叫全局上下文对象。Web服务器会为每一个工程创建一个ServletContext对象,这个对象全局唯一并且掌管当前项目下所有的Servlet、项目资源、项目配置…

在这里插入图片描述

  1. ServletContext对象也是当前Web项目下所有Servlet通信交互的桥梁,Servlet1写入ServletContext的数据,Servlet2通过ServletContext可以获取到数据。

    //设置一个key-value的键值对,向ServletContext中写入数据
    public void setAttribute(String name, Object object);
    
    //通过key取到value,注意类型转换
    public Object getAttribute(String name);
    
    //通过key删除一个键值对。
    public void removeAttribute(String name);
    
    //请求转发,传入一个地址进行页面的转发。(非重定向)
    public RequestDispatcher getRequestDispatcher(String path);
    
    //通过参数name,获取web.xml中的初始配置数据
    public String getInitParameter(String name);
    


2. ServletContext常见用法

  1. 使用ServletContext对象进行Serlvet之间的数据读取

    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.*;
    
    public class HelloServlet extends HttpServlet {
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            req.setCharacterEncoding("utf-8");
            resp.setCharacterEncoding("utf-8");
            resp.setContentType("text/html");           
            ServletContext servletContext = this.getServletContext();       //获得全局上下文对象
    
    
            servletContext.setAttribute("username","hello");      //写入数据
            System.out.println("HelloServlet请求成功, key = username, value = hello!");
            resp.getWriter().println("请求成功!");
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            doGet(req, resp);
        }
    }
    
    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;
    
    public class WorldServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            resp.setCharacterEncoding("utf-8");
            resp.setContentType("text/html");
    
            ServletContext servletContext = this.getServletContext();
            String user = (String)servletContext.getAttribute("username");
            System.out.println("WorldServlet请求成功, key = username, value = " + user + "!");
            resp.getWriter().println("WorldServlet取到数据: " + user);
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            doPost(req, resp);
        }
    }
    

    在这里插入图片描述

    在这里插入图片描述


  1. ServletContext获得配置文件中的数据资源。下面是写在web.xml配置文件中的数据

    <context-param>
         <param-name>path</param-name>
         <param-value>这是初始化配置中的数据</param-value>
    </context-param>
    
    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;
    
    public class ServletContext01 extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            /*
                通过参数name, 调用getInitParameter去请求xml中初始化的配置文件。
             */
            resp.setContentType("text/html");
            resp.setCharacterEncoding("utf-8");
            ServletContext context = this.getServletContext();
            String path = context.getInitParameter("path");
            System.out.println(path);
            resp.getWriter().println(path);
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            doGet(req, resp);
        }
    }
    
    

    在这里插入图片描述


  1. ServletContext对象对请求进行转发。注意转发是不会改变url地址的,依旧是最初请求的地址。但是重定向会。

    import javax.servlet.RequestDispatcher;
    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;
    
    public class ServletContext02 extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
            ServletContext context = this.getServletContext();
            //RequestDispatcher dispatcher = context.getRequestDispatcher("/hello");    //请求的地址
            //dispatcher.forward(req,resp);         //非重定向请求转发
            System.out.println("转发成功! 即将转到/hello页面");
            context.getRequestDispatcher("/hello").forward(req,resp);		//转发到/hello路径下
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            doGet(req, resp);
        }
    }
    

    在这里插入图片描述


  1. ServletContext对象对项目中的资源进行加载,这里需要使用Properties类,点击了解此类

    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.io.InputStream;
    import java.util.Properties;
    
    public class ServletContext03 extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            resp.setCharacterEncoding("utf-8");
            req.setCharacterEncoding("utf-8");
            resp.setContentType("text/html");
    
    
            ServletContext context = this.getServletContext();
            InputStream is = context.getResourceAsStream("/WEB-INF/classes/db.properties"); //加载一个资源转为流的形式
            Properties prop = new Properties();
            prop.load(is);              //从字节流中加载数据
            String user = prop.getProperty("username");     //获得key-value值
            String pwd  = prop.getProperty("password");     //获得key-value值
            resp.getWriter().println(user + ": " + pwd);
            System.out.println(user + ": " + pwd);
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            doGet(req, resp);
        }
    }
    
    

    在这里插入图片描述

ServletContext是Java Web中的一个重要对象,表示整个Web应用程序的上下文环境。它是一个接口,提供了许多方法,用于获取Web应用程序的相关信息,例如应用程序的名称、版本、servlet上下文参数、初始化参数等。 以下是ServletContext对象的一些常用方法和用法: 1. 获取应用程序的名称和版本: String appName = context.getServletContextName(); //获取应用程序名称 String appVersion = context.getMajorVersion() + "." + context.getMinorVersion(); //获取应用程序版本号 2. 获取servlet上下文参数: String paramValue = context.getInitParameter("paramName"); //获取指定参数的值 Enumeration<String> paramNames = context.getInitParameterNames(); //获取所有参数名称 3. 获取应用程序的真实路径: String realPath = context.getRealPath("/"); //获取应用程序的根目录真实路径 4. 获取应用程序的资源: InputStream input = context.getResourceAsStream("/path/to/resource"); //获取指定资源的输入流 URL resourceUrl = context.getResource("/path/to/resource"); //获取指定资源的URL 5. 获取应用程序的Servlet信息: ServletInfo info = context.getServletInfo(); //获取Servlet的信息 6. 获取应用程序的Session管理器: HttpSessionManager sessionMgr = context.getSessionManager(); //获取Session管理器 7. 获取应用程序的Mime类型: String mimeType = context.getMimeType("fileName"); //获取指定文件的Mime类型 8. 获取应用程序的Servlet上下文: ServletContext servletContext = context.getContext("/path/to/servlet"); //获取指定Servlet的上下文 总之,ServletContext对象提供了一种方便的方式来获取Web应用程序的各种信息和资源,使得开发人员可以更方便地开发和管理Web应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值