后台学习之---ServletContext学习

来源:互联网 发布:淘宝c店手机端图片尺寸 编辑:程序博客网 时间:2024/06/05 11:10

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");
0 0
原创粉丝点击