八、JavaWeb之ServletContext、Request、Response

本文详细介绍了JavaWeb开发中的三个重要对象:ServletContext、Request和Response。ServletContext作为全局共享对象,可以获取初始化参数和资源路径,同时作为一个域对象用于存储数据。Response对象用于设置响应行、响应头和响应体,实现对浏览器的响应,包括字符流和字节流的处理。Request对象则用于获取请求行、请求头和请求参数,是客户端请求信息的封装。文章还探讨了请求转发和重定向的区别。
摘要由CSDN通过智能技术生成

1 ServletContext

1.1 ServletContext概述

在Tomcat服务器中的web的项目 也叫做WEB应用程序。在java中 万物皆对象,那么,应用程序也是对象。

在Java Web开发中,使用ServletContext对象表示WEB应用程序。

在这里插入图片描述

说明:
1. 在一个WEB应用程序中,只能存在一个ServletContext对象。
2. 每个应用程序,都有它自己所对应的一个ServletContext对象。
3. 在服务器启动的时候,为每个web应用程序创建一个单独的ServletContext对象。
4. ServletContext是接口, 此接口的实现类是tomcat引擎提供

1.2 ServletContext对象的作用

  • 获取WEB应用程序的初始化参数
  • 获取WEB应用程序下任意资源的绝对路径
  • ServletContext作为域对象,存储数据

1.3 获取ServletContext对象

 *  ServletContext对象 (Servlet上下文对象)
 *  就是Web应用程序对象,描述的是整个web程序
 *  每个应用程序只有一个对象
 * 
 *  接口: ServletContext
 *  接口实现类对象 Tomcat启动的时候,已经创建好了,获取使用
 *  获取方式简单:
 *    父类的父类中,定义方法  public ServletContext getServletContext()
 *    继承关系,直接调用即可
 * 
 *   原理: Tomcat服务器会在启动的时候扫描 webapps
 *   找所有的Web程序,每个web程序 ,创建对象ServletContext

实例:

public class Context1Servlet extends HttpServlet {
   
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
   
        ServletContext context =  getServletContext();
        System.out.println(context);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
   
        doGet(request, response);
    }
}

1.4 作用一:获取WEB应用程序的初始化参数(意义不大)

因为一个web应用程序只有一个ServletContext对象,所以这个对象对整个应用程序的相关内容都是了解的

  • web.xml 配置WEB应用程序的初始化参数

目前获取初始化参数意义不大
以前的时候,在配置文件中,配置数据库的连接信息
现在使用连接池技术

<!-- 配置的是WEB程序的初始化参数-->
<context-param>
    <param-name>heima</param-name>
    <param-value>java</param-value>
</context-param>
  • API操作
方法 返回值 描述
getInitParameter(String name) String 获取web应用程序的初始化参数
  • 代码演示:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
   
    /*
     * 获取ServletContext对象
     * 父类的方法
     * org.apache.catalina.core.ApplicationContextFacade实现接口ServletContext
     */
    ServletContext context = getServletContext();
    System.out.println(context);
    //context对象,获取配置文件中的初始化参数
    String value = context.getInitParameter("heima");
    System.out.println(value);
}

1.5 作用二:获取WEB应用程序下任意资源的绝对路

方法 返回值 描述
getRealPath(String path) String 接收一个资源的相对路径,返回真实路径(完整路径)的字符串
  • 获取web目录下的a.txt绝对路径
  • 获取web目下WEB-INF目录下的b.txt绝对路径
  • 获取src目录下的c.txt绝对路径
  • 获取web02 module下的d.txt绝对路径,获取不到

在这里插入图片描述
1 Tomcat的运行目录与我们的开发目录是不同的
2 Tomcat的运行目录只有两个东西:我们开发目录中的web目录下的文件src下文件,所以module下的文件路径是获取不到的

实例:

/**
 * ServletContext对象的方法:
 *    String getRealPath(String path)
 *    方法: 可以获取到Web应用程序下,任何资源的绝对路径
 *    参数传递的是相对路径,返回绝对路径
 *
 *   ServletContext对象:表示整个web应用程序
 */
public class Context3Servlet extends HttpServlet {
   
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
   
        ServletContext context = getServletContext();
        //获取到a.txt文件的绝对路径,参数写的是a.txt文件相对路径
        //怎么写相对路径, 相对的是谁
        //context对象相对的是web应用程序  web02
        String aPath = context.getRealPath("a.txt");
        System.out.println(aPath);

        //获取到b.txt的绝对路径
        String bPath = context.getRealPath("WEB-INF/b.txt");
        System.out.println(bPath);

        // 获取到c.txt的绝对路径
        String cPath = context.getRealPath("WEB-INF/classes/c.txt");
        System.out.println(cPath);

        // 获取到d.txt的绝对路径
        //IDEA工程下的文件,不会发布在Tomcat,获取不到
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
   
        doGet(request, response);
    }
}

1.6 作用三:ServletContext作为域对象

ServletContext是在服务器启动的时候为每个web项目 单独创建一个ServletContext对象。当web项目从服务器中移除,或者是关闭服务器的时候ServletContext对象会被销毁。向ServletContext中保存的数据一直存在(当服务器关闭的时候ServletContext对象被销毁,然后里面数据才会失效)。

 *  ServletContext对象,域对象
 *  是个容器,存储数据
 *  作用域:
 *    最大的一个作用域,在ServletContext对象中,存储的任何数据
 *    在整个Web应用程序中,全有效
  • ServletContext作用范围:整个web应用。
方法 返回值 描述
setAttribute(String key, Object value) void 向域对象存储数据
getAttribute(String key) Object 取出域对象数据
removeAttribute(String key) void 移除域对象数据

tips:域对象概念

可以在不同Servlet之间传递数据的对象,就是域对象

只要是域对象都有如下方法
    setAttribute(name,value);存储数据的方法
    getAttribute(name);根据name获取对应数据值
    removeAttribute(name);删除数据
public class Context4Servlet extends HttpServlet {
   
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
   
        ServletContext context = getServletContext();
        //域对象存储键值对
        context.setAttribute("java","heima");
        //取出域对象中的数据
        Object o = context.getAttribute("java");
        System.out.println(o);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
   
        doGet(request, response);
    }
}

2 Response

2.1 Response概述

方向: 服务器 -> 浏览器

负责对浏览器进行响应的对象

什么是响应: 服务器接收到请求需要进行处理,将处理以后的结果显示回浏览器端(将这个过程称为是响应Response)。

  • 查看Servlet中的service方 法得知, Servlet中使用的ServletResponse接口, 而我们使用的是ServletResponse的子接口HttpServletResponse, 它继承自ServletResponse, 是与HTTP协议相关的Response响应对象
  • 我们使用的子接口HttpServletResponse, 此接口对象由Tomcat引擎提供
  • 可以实现对客户端的响应, 响应内容包括: 响应行,响应头,响应体
 *  Response对象,负责向客户端响应数据的对象
 *  Sun接口:
 *    ServletResponse接口
 *    适用任何网络传输协议
 *
 *    目前传输协议都是HTTP协议,专门使用HTTP协议
 *    做了一个子接口HttpServletResponse
 *    使用的对象是子接口HttpServletResponse的实现类对象
 *    此实现类对象,是Tomcat引擎创建,调用方法doGet传递参数
 *
 *    客户端响应:
 *      响应行;  协议名 状态码
 *      响应头:  键值对格式 数据k:v的形式
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值