当前位置: 首页 > 编程笔记 >

Java中如何使用Response重定向

史修谨
2023-03-14
本文向大家介绍Java中如何使用Response重定向,包括了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可以看出,重定向不可以共享数据

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

  • 浏览器地址栏路径发生变化,最终地址为最后转发的地址
  • 转发只是多次请求,转发几次就几次请求,不共享数据
  • 可以访问其他服务器的资源

到此这篇关于Java中如何使用Response重定向的文章就介绍到这了,更多相关Java使用Response重定向内容请搜索小牛知识库以前的文章或继续浏览下面的相关文章希望大家以后多多支持小牛知识库!

 类似资料:
  • 我想将我的url重定向到http://localhost:8080/clickbuy/product/details到http://localhost:8080/clickbuy/home。 我已经定义了header.jsp,并将其包含在所有页面中。当我从其他任何地方单击home link url时,从当前url添加/home,因此显示404错误。 如何在ModelAndView返回类型方法中使用

  • 我想使用ProcessBuilder运行此命令: 我尝试了以下方法: 我使用的是如下:

  • 问题内容: 我正在尝试构建的超级简单AngularJS应用程序,用于将凭据接受到两个文本框中,然后使用双向绑定将按钮单击重定向到包含两个变量的URL。 我的问题是,我可以让它简单地工作 (或ng-href = …),但是由于某种原因,无论我做什么,我都无法使用 我尝试了很多变体,但这是我想要做的 如果我在控制器中调用一个函数,我可以使它正常工作,但这是一件很简单的事情,我希望在页面上尽可能完成它。

  • 所以我有一个org.springframework.stereoType.Controller,如果指定了HTTP头HA和HB,我想做的就是正常处理请求。但是,如果请求指定了查询参数QA和QB,我希望重定向请求而不使用QA或QB,而是使用HTTP头HA和HB,这样HA的值为QA,而HB的值为QB。 例如,如果传入的请求是HTTP GET~/REST/Mortgre,带有HTTP头X-NAME=Fo

  • 问题内容: 如何使用JavaScript从另一个页面重定向到页面? 问题答案: 要重定向到另一个页面,可以使用:

  • 问题内容: 我有一个验证并保存表单的视图。保存表单后,我想重定向回list_object视图,并显示一条成功消息“客户xyz的表单已成功更新…” HttpResponseRedirect似乎无法正常工作,因为它只为url提供一个参数,无法与之一起传递字典。 我已经尝试修改object_list的包装,以将dict作为具有必要上下文的参数。我从保存表单的视图内部返回对此包装的调用。但是,呈现页面时,

  • 本文向大家介绍JavaEE通过response实现请求重定向,包括了JavaEE通过response实现请求重定向的使用技巧和注意事项,需要的朋友参考一下  请求重定向指的是一个web资源收到客户端请求后,通知客户端去访问另外一个web资源,这称之为请求重定向。302状态码和location头即可实现重定向。   请求重定向最常见的应用场景就是用户登录。 下面的示例代码从另一个页面重定向到用户登录

  • 这是我从获取请求中获得的响应,如何将此响应转换为Java列表,以便我可以在列表上执行Stream(.)过滤器。