Java中如何使用Response重定向

作者:持续更新,2天一篇 时间:2023-08-03 07:41:07 

直接来,ResponseDemo1代码,get请求到post请求,重定向到ResponseDemo2

我的虚拟目录为

Java中如何使用Response重定向

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

浏览器访问,访问前

Java中如何使用Response重定向

浏览器访问,访问后

Java中如何使用Response重定向

控制台输出

Java中如何使用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);
}
}

启动,浏览器访问

Java中如何使用Response重定向

控制台输出

Java中如何使用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);
}
}

重启访问,就重定向到百度了

Java中如何使用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

重启,浏览器访问

Java中如何使用Response重定向

控制台输出:

Java中如何使用Response重定向

从上面的null可以看出,重定向不可以共享数据

重定向的特点总结:(与之对应的------请求转发详情与特点)

  • 浏览器地址栏路径发生变化,最终地址为最后转发的地址

  • 转发只是多次请求,转发几次就几次请求,不共享数据

  • 可以访问其他服务器的资源

来源:https://blog.csdn.net/lgl782519197/article/details/107251985

标签:Java,Response,重定向
0
投稿

猜你喜欢

  • Spring注解Autowired的底层实现原理详解

    2022-10-19 11:49:44
  • SpringBoot项目中如何访问HTML页面

    2021-08-09 11:19:07
  • 使用BufferedReader读取本地文件的操作

    2021-10-15 03:22:47
  • ViewPager顶部导航栏联动效果(标题栏条目多)

    2022-11-03 13:19:38
  • Android调用系统的发邮件功能的小例子

    2022-09-09 04:23:11
  • MyBatis-Plus解决逻辑删除与唯一索引的问题

    2022-09-09 00:17:03
  • SpringBoot集成SpringSecurity和JWT做登陆鉴权的实现

    2023-01-29 09:34:57
  • C# 对象持久化详解

    2023-06-24 10:21:47
  • Java Spring事务的隔离级别详解

    2022-04-25 23:07:52
  • Android打包上传AAR文件到Maven仓库的示例

    2023-07-02 15:14:14
  • Java集合系列之ArrayList源码分析

    2023-01-31 03:02:36
  • android实现图片橡皮擦和快速染色功能

    2023-09-08 01:30:02
  • android 实现类似微信缓存和即时更新好友头像示例

    2023-12-04 20:47:41
  • Treeview动态添加用户控件传值和取值的实例代码

    2021-07-20 11:20:07
  • C语言由浅入深讲解文件的操作下篇

    2022-12-05 21:21:54
  • spring-cloud-gateway动态路由的实现方法

    2021-07-25 15:24:37
  • Android App支付系列(二):支付宝SDK接入详细指南(附官方支付demo)

    2022-03-14 01:12:28
  • SpringBoot Schedule调度任务的动态管理

    2023-09-22 04:34:15
  • Android用户注册界面简单设计

    2023-07-13 02:59:50
  • Android Button 自带阴影效果另一种解决办法

    2021-06-07 04:23:02
  • asp之家 软件编程 m.aspxhome.com