后台学习之---ServletContext学习

ServletContext五大作用

  • 获取web的上下文路径
    • java.lang.String getContextPath()
  • 获取全局参数
  • 和域对象相关
  • 请求转发
  • 读取web项目的资源文件

1. 获取web的上下文路径介绍

        /**
         *  java.lang.String getContextPath()  
         * 获取web上下文路径:项目在tomcat服务器中的运行路径
         */
        //1.1 获取servletContext对象
        ServletContext servletContext = this.getServletContext();
        //1.2 获取路径
        String path = servletContext.getContextPath();
        //1.3 打印出路径
        response.getWriter().write(path);
        //结果是 :/day09(项目在tomcat服务器中的运行路径,不是项目开发时的路径)

        //简单使用场景:避免硬编码,获取路径更加灵活,请求重定向:
        //response.sendRedirect("/day09/index.jsp");

        response.sendRedirect(servletContext.getContextPath()+"index.jsp");

2. 获取全局参数

首先在项目的WEB-INF的web.xml中配置全局参数
(是在servlet配置的外层,web-app的根目录下)
在该网站下所有的servlet都可以获得该参数,servletConfig则只能访问自己的,从参数配置的位置就可以看出来。

<!-- 全局参数配置 -->
    <context-param>
        <param-name>AAA</param-name>
        <param-value>aaa</param-value>
    </context-param>

    <context-param>
        <param-name>BBB</param-name>
        <param-value>bbb</param-value>
    </context-param>

参数加载过程:

  1. tomcat服务器会把整个web.xml文件信息封装到sevletContext中。
  2. 在init方法中会接收该对象
  3. 通过getServletContext()方法得到该对象

获取方法

//得到指定参数
    String initParameter = getServletContext().getInitParameter("AAA");
    System.out.println(initParameter);

    //得到所有参数
    Enumeration<String> initParameterNames = getServletContext().getInitParameterNames();
    while(initParameterNames.hasMoreElements()){
        String name = (String) initParameterNames.nextElement();
        String value = getServletContext().getInitParameter(name);
        System.out.println(name+"---"+value);
    }

域对象

什么是域对象:

域对象是用来共享数据,保存数据,获取数据用的

这里写图片描述

ServletContext就是一个域对象。
(servlet有三个域对象 HttpServletRequest,HttpSession)

/**
     * 把数据存到ServletContext域对象
     */
    ServletContext context = this.getServletContext();
    context.setAttribute("name", "yangqing");

    /**
     * 从ServletContext域对象中取出数据
     */
    ServletContext context = this.getServletContext();
    String name = (String) context.getAttribute("name");

    }

4. 请求转发


    ServletContext context = this.getServletContext();
    RequestDispatcher dispatcher = context.getRequestDispatcher("/index.jsp");
    dispatcher.forward(request, response);

Servlet中请求转发和重定向的区别:

* 请求转发   getRequestDispatcher("/index.jsp"); 
    * 1 地址栏地址不会发生改变
    * 2 只能转发到该项目的资源
    * 3 浏览器向服务器发出一次请求,可以使用请求作为域对象来进行数据传递。


*  重定向  response.sendRedirect("/day09/index.jsp");
    * 1 地址栏发生变化,变成重定向后的地址
    * 2 可以跳转到其他项目的资源
    * 3 浏览器想服务器发出两次请求,那么不能使用请求来作为域对象来传递数据。

Servlet中请求转发和重定向执行过程:

这里写图片描述

读取web项目的资源文件

第一种:
/**
         * getRealPath 获取资源文件的真是路径
         * 不能使用绝对路径
         */
        String realPath = this.getServletContext().getRealPath("/WEB-INF/classes/aa.properties");
        System.out.println(realPath);


第二种:
        /**
         * getResourceAsStream   获取资源文件的输入流
         */
        InputStream asStream = this.getServletContext().getResourceAsStream("/WEB-INF/classes/aa.properties");


第三种:
        /**
         * getResource(); 获取资源文件的URL
         */
        URL url = this.getServletContext().getResource("/WEB-INF/classes/aa.properties");
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值