Tomcat中response功能

Response对象

Response功能
  • 设置响应行
    • 格式:HTTP/1.1 200 ok
    • 设置状态码:setStatus(int sc)
    • 设置响应头:setHeader(String name, String value)
    • 设置响应体:
      1. 获取输出流
        1.1 字符输出流:PrintWriter getWriter()
        1.2字节输出流:ServletOutputStream getOutputStream()
      2. 使用输出流,将数据输出到客户端浏览器:ServletOutputStream.write()

代码示例

package servlet.response;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet(urlPatterns = "/demo")
public class ResponseTest extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置响应编码
        resp.setCharacterEncoding("utf-8");
        //设置状态码
        resp.setStatus(300);
        //设置响应头
        resp.setHeader("content-type","text/html;charset=utf-8");
        /*
        * //获取输出流
        PrintWriter printWriter=resp.getWriter();
        //使用输出流,将数据输出到客户端浏览器
        printWriter.write("<h1>hello 你好</h1>");
        * */

        //获取字节输出流
        ServletOutputStream servletOutputStream = resp.getOutputStream();
        //输出数据,字符数据要转换为字节
        servletOutputStream.write("字节输出".getBytes("utf-8"));
    }
}

在这里插入图片描述

forward 和 redirect 区别
  1. 重定向的特点:redirect
    1. 地址栏发生变化
    2. 重定向可以访问其他站点(服务器)的资源
    3. 重定向是两次请求。不能使用request对象来共享数据
  2. 转发的特点:forward
    1. 转发地址栏路径不变
    2. 转发只能访问当前服务器下的资源
    3. 转发是一次请求,可以使用request对象来共享数据

重定向代码示例
demo资源

package servlet.response;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet(urlPatterns = "/demo")
public class ResponseTest extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("demo...");
        //动态获取虚拟目录
        String path=req.getContextPath();
        resp.sendRedirect(path+"/demo2");
        //resp.sendRedirect("http://www.baidu.com");
    }
}

demo2资源

package servlet.response;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet(urlPatterns = "/demo2")
public class ResponseDemo2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("demo2......");
    }
}

在这里插入图片描述

ServletContext对象

  • 获取方式:
    • 通过request对象获取
      • request.getServletContext();
    • 通过HttpServlet获取
      • this.getServletContext();

ServletContext功能

  1. 获取MIME类型:
    1. MIME类型:在互联网通信过程中定义的一种文件数据类型
    2. 格式: 大类型/小类型 text/html image/jpeg
  2. 域对象:共享数据
    1. setAttribute(String name,Object value)
    2. getAttribute(String name)
    3. removeAttribute(String name)
      ServletContext对象范围:所有的用户请求共享

代码示例
demo1

package servlet.response;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet(urlPatterns = "/demo1")
public class ResponseTest extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取ServletContext对象
        ServletContext servletContext = req.getServletContext();

        //获取MIME类型
        String img = "a.jpg";//image/jpeg
        String mimeType = servletContext.getMimeType(img);
        System.out.println(mimeType);

        //设置共享数据
        servletContext.setAttribute("msg", "hello");
    }

}

demo2

package servlet.response;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet(urlPatterns = "/demo2")
public class ResponseDemo2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取servletContext对象
        ServletContext servletContext=req.getServletContext();
        //demo2请求获取共享数据
        Object object=servletContext.getAttribute("msg");
        System.out.println(object);

    }
}

在这里插入图片描述

  1. 获取文件的真实(服务器)路径
    方法:String getRealPath(String path)

代码示例

package servlet.response;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet(urlPatterns = "/demo1")
public class ResponseTest extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取ServletContext对象
        ServletContext servletContext = req.getServletContext();
        //获取文件真实路径,一般文件放在web,web-inf,src三个目录下
        //web目录
        String path=servletContext.getRealPath("/web.txt");
        System.out.println(path);
        //web-inf目录
        path=servletContext.getRealPath("/WEB-INF/web_inf.txt");
        System.out.println(path);
        //src目录
        path=servletContext.getRealPath("/WEB-INF/classes/src.txt");
        System.out.println(path);
    }

}

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值