Java中如何使用Response重定向
作者:持续更新,2天一篇 发布时间:2023-08-03 07:41:07
标签:Java,Response,重定向
直接来,ResponseDemo1代码,get请求到post请求,重定向到ResponseDemo2
我的虚拟目录为
ResponseDemo1代码,302是重定向状态码,Http状态码大全
package com.lingaolu.response;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;
/**
* @author 林高禄
* @create 2020-07-10-15:24
*/
@WebServlet("/responseDemo1")
public class ResponseDemo1 extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("responseDemo1进来了......");
// 设置状态码为302
response.setStatus(302);
// 动态获取虚拟目录,以后修改虚拟目录的时候就不用了修改代码
String contextPath = request.getContextPath();
// 设置响应头location
response.setHeader("location",contextPath+"/responseDemo2");
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}
ResponseDemo2代码
package com.lingaolu.response;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;
/**
* @author 林高禄
* @create 2020-07-10-15:24
*/
@WebServlet("/responseDemo2")
public class ResponseDemo2 extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("responseDemo2进来了......");
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}
浏览器访问,访问前
浏览器访问,访问后
控制台输出
从以上结果可以看出:
浏览器上的请求地址变了
重定向是2次请求,一次是responseDemo1请求,一次是responseDemo2请求
由于状态码固定是302,响应头固定是location,所以请求转发提供了更方便的方式
void sendRedirect(String var1)
ResponseDemo3代码
package com.lingaolu.response;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;
/**
* @author 林高禄
* @create 2020-07-10-15:24
*/
@WebServlet("/responseDemo3")
public class ResponseDemo3 extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("responseDemo3进来了......");;
// 动态获取虚拟目录,以后修改虚拟目录的时候就不用了修改代码
String contextPath = request.getContextPath();
response.sendRedirect(contextPath+"/responseDemo2");
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}
启动,浏览器访问
控制台输出
我们把ResponseDemo3代码改一下,重定向到百度
package com.lingaolu.response;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;
/**
* @author 林高禄
* @create 2020-07-10-15:24
*/
@WebServlet("/responseDemo3")
public class ResponseDemo3 extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("responseDemo3进来了......");;
response.sendRedirect("http://www.baidu.com");
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}
重启访问,就重定向到百度了
从上面结果我们可以看出,重定向可以访问其他服务器的资源
我们写一个ResponseDemo4,探索一下共享数据情况,ResponseDemo4里请求写进了一个数据name
package com.lingaolu.response;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;
/**
* @author 林高禄
* @create 2020-07-10-15:24
*/
@WebServlet("/responseDemo4")
public class ResponseDemo4 extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("responseDemo4进来了......");
request.setAttribute("name","林大帅");
String contextPath = request.getContextPath();
response.sendRedirect(contextPath+"/responseDemo2");
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}
同时ResponseDemo2改一下,获取数据name
重启,浏览器访问
控制台输出:
从上面的null可以看出,重定向不可以共享数据
重定向的特点总结:(与之对应的------请求转发详情与特点)
浏览器地址栏路径发生变化,最终地址为最后转发的地址
转发只是多次请求,转发几次就几次请求,不共享数据
可以访问其他服务器的资源
来源:https://blog.csdn.net/lgl782519197/article/details/107251985


猜你喜欢
- 具体代码如下所示:public class Parent { public static int a = parentStati
- 在AccessibilityService中我们可以做模拟操作,下面记述下通过AccessibilityService实现微信发红包的功能1
- 前言:根据ThreadPoolExecutor的构造方法,JDK提供了很多工厂方法来创建各种用途的线程池.1 newFixedThreadP
- 本文实例讲述了android从资源文件中读取文件流并显示的方法。分享给大家供大家参考。具体如下:在android中,假如有的文本文件,比如T
- 今天遇到文件上传的问题,使用Ajax方式进行提交,服务器一直报错The current request is not a multipart
- poi导入纯数字等问题用poi导出excel时候,如果单元格设置纯数字,输入的数据一旦过大就是自动显示成科学记数法,导致导入后的数据出错,解
- 说明:基于atguigu学习笔记。简介Webflux是 Spring5 添加新的模块,用于 web 开发的,功能和 SpringMVC 类似
- java 抛出异常处理的方法为了避免调用的人不知道有异常,才抛出异常的,所以是谁掉用的久在哪里处理。说的对吗对.1、throws关键字通常被
- 在模板文件的表达式中,可以使用“${T(全限定类名).方法名(参数)}”这种格式来调用Java类的静态方法。开发环境:IntelliJ ID
- 一、mybatis-plus简介:Mybatis-Plus(简称MP)是一个 Mybatis 的增强工具,在 Mybatis 的基础上只做增
- 一、前言spring cloud大行其道的当下,如果不了解基本原理那么是很纠结的(看见的都是 约定大于配置 ,但是原理呢?为什么要这么做?)
- 本文实例讲述了Android编程实现状态保存的方法。分享给大家供大家参考,具体如下:1、当我们正在发短信的时候,已经写了几百字了,这时突然来
- 环境:主机:WIN10开发环境:Android Studio 2.2 Preview 3说明:两种方法实现底部弹出的对话框:DialogDi
- 首先引入pom <!--SpringBoot 2.1.0--> <parent>  
- 本文基于GP58系列,它可以兼容ESC/POS指令集,对EPSON的打印机通用.Android下的设备调试,如果设备提供了驱动,按照厂家的驱
- 如果我们遇到把excel表格中的数据导入到数据库,首先我们要做的是:将excel中的数据先读取出来。因此,今天就给大家分享一个读取Excel
- 示例代码:<%@ Page Language="C#" AutoEventWireup="true&qu
- C#连接本地.mdf文件:项目中右键点击,新增——数据——基于服务的数据库,项目下直接生成.mdf数据库文件,后台(数据库的写入用参数传递)
- 前言最近我在项目写了几万行代码,小伙伴担心会让程序启动速度变慢,所以本渣就来做测试。 本渣使用了代码创建器,创建了 1000 个垃圾文件,这
- 题目要求思路一:暴力模拟由于数据范围不算离谱,所以直接遍历解决可行。Javaclass Solution { pu