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重定向内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • JavaEE通过response实现请求重定向

    请求重定向指的是一个web资源收到客户端请求后,通知客户端去访问另外一个web资源,这称之为请求重定向.302状态码和location头即可实现重定向. 请求重定向最常见的应用场景就是用户登录. 下面的示例代码从另一个页面重定向到用户登录页面: 复制代码 代码如下: package com.yyz.response;  import java.io.IOException;  import javax.servlet.ServletException;  import javax.servlet

  • JavaWeb response完成重定向实现过程详解

    这篇文章主要介绍了JavaWeb response完成重定向实现过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.重定向的理解 >客户端发送请求给服务器,服务器返回302并带一个地址给浏览器,让浏览器去请求这个地址,这个过程就是重定向 比如:有3个人分别为A,B,C:A去请求B帮忙做一件事,B无能为力,B把C的地址给A,让A去请求C做这件事.说简单点就是:找别人帮忙 二.重定向的注意事项 >服务器返回302给浏览器时,还会带一个地址

  • 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

  • java中response对象用法实例分析

    本文实例讲述了java中response对象用法.分享给大家供大家参考,具体如下: <jsp:forward>动作元素用于运行时在服务器端结束当前页面的执行,并从当前页面转向指定页面. 使用response对象的setHeader()方法可以设置页面的自动刷新时间间隔.实现每隔60秒重新加载本页面的语句为: 复制代码 代码如下: response.setHeader("refresh",60); 而实现3秒后浏览器加载新页面http://www.jb51.net的语句为:

  • JSP 中request与response的用法详解

    JSP 中request与response的用法详解 概要: 在学习这两个对象之前,我们应该已经有了http协议的基本了解了,如果不清楚http协议的可以看我的关于http协议的介绍.因为其实request和response的使用大部分都是对http协议的操作. request对象的介绍 我们先从request对象进行介绍: 我们知道http协议定义了请求服务器的格式: 请求行 请求头 空格 请求体(get请求没有请求体) 好了,这里我们就不详细介绍了,我们只看几个应用就可以了,没什么难度: 应

  • java中Cookie被禁用后Session追踪问题

    一.服务器端获取Session对象依赖于客户端携带的Cookie中的JSESSIONID数据.如果用户把浏览器的隐私级别调到最高,这时浏览器是不会接受Cookie.这样导致永远在服务器端都拿不到的JSESSIONID信息.这样就导致服务器端的Session使用不了. Java针对Cookie禁用,给出了解决方案,依然可以保证JSESSIONID的传输. Java中给出了再所有的路径的后面拼接JSESSIONID信息. 在 Session1Servlet中,使用response.encodeURL

  • java 中sendredirect()和forward()方法的区别

    HttpServletResponse.sendRedirect与RequestDispatcher.forward方法都可以实现获取相应URL资源. sendRedirect实现请求重定向,forward实现的是请求转发. 在web服务器内部的处理机制也是不一样的. 1. 跳转方式 运用forward方法只能重定向到同一个Web应用程序中的一个资源.而sendRedirect方法可以让你重定向到任何URL. 表单form的action= "/uu ";sendRedirect( &q

  • Java中filter用法完整代码示例

    本文研究的主要是Java中filter过滤器的相关用法,具体实现代码如下. filter过滤器主要使用于前台向后台传递数据是的过滤操作.程度很简单就不说明了,直接给几个已经写好的代码: 一.使浏览器不缓存页面的过滤器 import javax.servlet.*; import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** * 用于的使 Browser 不缓存页面的过滤器 */ public cla

  • Java中Request请求转发详解

    直接来,RequestDemo5代码,get请求和post请求都请求转发了,转发到RequestDemo6请求 RequestDemo5代码 package com.lingaolu.request; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.

  • Java中Process类的使用与注意事项说明

    目录 Process类的使用与注意事项说明 1.在项目开发中 2.在这里就需要认识一下process类 3.来说说今天业务需求[waitfor()]: 4.前不久遇到一个奇怪的问题就是ajax调用没有返回值 java的Process深入讲解 Process类的使用与注意事项说明 1.在项目开发中 经常会遇到调用其它程序功能的业务需求,在java中通常有两种实现方法 Runtime runtime = Runtime.getRuntime(); Process p = runtime.exec(c

  • Java中的 HTTP 协议原理详解

    目录 前言 1.HTTP 特点 2.HTTP 组成 2.1 请求对象 2.1.1 请求行 2.1.2 请求报头 2.1.3 空行 2.1.4 请求正文 2.2 响应对象 2.2.1 状态行 2.2.2 响应报头 2.2.3 空行 2.2.4 响应正文 总结 前言 HTTP(Hyper Text Transfer Protocol)超文本传输协议,下文简称 HTTP,它的作用是用于实现服务器端和客户端的数据传输的.它可以传输任意的数据类型,如文本.HTML.图片.文件.声音等类型. 简单来说,HT

  • Java请求转发和请求重定向区别详解

    目录 前言 1.定义不同 2.请求方不同 3.数据共享不同 4.最终 URL 地址不同 5.代码实现不同 总结 前言 在 Java 中,跳转的实现方式有两种:请求转发和请求重定向,但二者是完全不同的,所以我们今天就来盘它. 请求转发和请求重定向主要区别,包含以下 5 点: 定义不同 跳转方不同 数据共享不同 最终 URL 地址不同 代码实现不同 接下来,我们一个一个来看. 1.定义不同 请求转发(Forward):发生在服务端程序内部,当服务器端收到一个客户端的请求之后,会先将请求,转发给目标地

随机推荐