Response重定向

举报
兰舟千帆 发表于 2022/07/21 19:21:32 2022/07/21
【摘要】 Response重定向Request:使用request对象来获取请求数据Response:使用response对象来设置响应数据HTTP响应数据总共分为三部分内容,分别是响应行、响应头、响应体。设置响应状态码void setStatus(int sc);设置响应头键值对void setHeader(String name,String value);获取字符输出流PrintWriter ...

Response重定向

在这里插入图片描述

Request:使用request对象来获取请求数据Response:使用response对象来设置响应数据

在这里插入图片描述

HTTP响应数据总共分为三部分内容,分别是响应行、响应头、响应体。

设置响应状态码

void setStatus(int sc);

设置响应头键值对

void setHeader(String name,String value);

获取字符输出流

PrintWriter getWriter();

获取字节输出流

ServletOutputStream getOutputStream();

知道这几个方法后我们完成重定向

在这里插入图片描述

主要实现代码

1	resp.setStatus(302);
2	resp.setHeader("location","资源B的访问路径");

完成一次重定向

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");

    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }
}
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;

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

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

启动!
我们重定向后,地址栏连接也会变化。
在这里插入图片描述
在这里插入图片描述

相比较转发和重定向,我们发现重定向需要加虚拟目录,而转发是不需要加虚拟目录的。

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

对于转发来说,因为是在服务端进行的,所以不需要加虚拟目录
对于重定向来说,路径最终是由浏览器来发送请求,就需要添加虚拟目录。

Response响应字符数据

首先我们通过Response对选哪个获取字符输出流。

 PrintWriter writer = resp.getWriter();
 

然后通过字符输出流写数据

writer.write("aaa");

测试代码

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>");
        //细节:流不需要关闭

    }

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

在这里插入图片描述
==2 //content-type,告诉浏览器返回的数据类型是HTML类型数据,这样浏览器才会解析HTML标签==

==一次请求响应结束后,response对象就会被销毁掉,所以不要手动关闭流。==

推荐

华为开发者空间发布

让每位开发者拥有一台云主机

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。