Response 设置响应数据功能及路径问题

  • Post author:
  • Post category:其他


1.Response 设置响应数据功能介绍

1.响应行:HTTP/1.1 200 OK

void setStatus(int sc) :设置响应状态

2.响应头:Content-Type: text/html

void setHeader(String name, String value) :设置响应头键值对

3. 响应体:<html><head>head><body></body></html>

PrintWriter getWriter():获取字符输出流

ServletOutputStream getOutputStream():获取字节输出流

2. Response 完成重定向

2.1 实现方式:

resp.setStatus(302);

resp.setHeader(“location”,“资源B的路径”);

简化:

resp.sendRedirect(“资源B的路径”);

2.2 特点

  1. 浏览器地址栏

    路径发生变化
  2. 可以重定向到

    任意位置的资源

    (服务器内部、外部均可)
  3. 两次请求,

    不能在多个资源使用

    request共享数据

与请求转发(forward)的特点

完全相反



2.3 代码实现功能

package com.itheima.web.response;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;

@WebServlet("/resp1")
public class ResponseDemo1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("resp1....");

        //重定向
        /*//1.设置响应状态码 302
        response.setStatus(302);
        //2. 设置响应头 Location
        response.setHeader("Location","/request-demo/resp2");*/

        //简化方式完成重定向
        //动态获取虚拟目录
        String contextPath = request.getContextPath();

        response.sendRedirect(contextPath+"/resp2");
        //response.sendRedirect("https://www.itcast.cn");
    }

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

3.路径问题

3.1 两种使用路径

浏览器使用:需要加虚拟目录(项目访问路径)

服务端使用:不需要加虚拟目录

4.Response 响应字符数据

4.1 使用

1.通过Response对象获取字符输出流

PrintWriter writer = resp.getWriter();

2.写数据

writer.write(“aaa”);

注意:

  1. 该流

    不需要关闭

    ,随着响应结束,response对象销毁,由服务器关闭
  2. 中文数据乱码:原因通过Response获取的字符输出流默认编码:ISO-8859-1

解决:

resp.setContentType(“text/html;charset=utf-8”);

4.2 代码方面的实现

response.setHeader("content-type","text/html"); 原始的解决方法

resp.setContentType(“text/html;charset=utf-8”);  //升级

package com.itheima.web.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;
import java.io.PrintWriter;

/**
 * 响应字符数据:设置字符数据的响应体
 */
@WebServlet("/resp3")
public class ResponseDemo3 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        //1. 获取字符输出流
        PrintWriter writer = response.getWriter();
        //content-type :响应对应的头信息
        //response.setHeader("content-type","text/html");

        writer.write("你好");
        writer.write("<h1>aaa</h1>");
        //细节:流不需要关闭   原因:伴随着运行 response调用完会自动销毁 ,流也就不需要关闭

    }

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

5.Response 响应字节数据

5.1使用:

1.通过Response对象获取字节输出流

ServletOutputStream outputStream = resp.getOutputStream();

2.写数据

outputStream.write(字节数据);

5.2 copy读取数据的两种方式

1.老版经典方式

2.使用IOUtils工具类

1.在pom.xml文件中

  • <dependency>
  • <groupId>commons-io</groupId>
  • <artifactId>commons-io</artifactId>
  • <version>2.6</version> </dependency>

2.IOUtils.copy(输入流,输出流);

5.3 代码演示运行

package com.itheima.web.response;


import org.apache.commons.io.IOUtils;

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.FileInputStream;
import java.io.IOException;
import java.io.PrintWriter;

/**
 * 响应字节数据:设置字节数据的响应体
 */
@WebServlet("/resp4")
public class ResponseDemo4 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //1. 读取文件
        FileInputStream fis = new FileInputStream("E://javaziliao//彼岸壁纸//女孩 手机 红裙子 白裤袜 好看的腿 二次元高清壁纸.jpg");

        //2. 获取response字节输出流
        ServletOutputStream os = response.getOutputStream();

        //3. 完成流的copy
       /* byte[] buff = new byte[1024];
        int len = 0;
        while ((len = fis.read(buff))!= -1){
            os.write(buff,0,len);
        }*/

        IOUtils.copy(fis,os);

        fis.close();



    }

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



版权声明:本文为yiqieanhaowzq原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。