java 跳转虚拟目录_Java中如何使用Response重定向

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

我的虚拟目录为

8fe83b25009e7c0bcda451bfa9ab9cad.png

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

}

}

浏览器访问,访问前

6f039f21f4525f7e519008ce95ac1f9b.png

浏览器访问,访问后

0365938d24d1f597573292e01cb32cea.png

控制台输出

2b1444b41d77864fa038579c7c1fa05b.png

从以上结果可以看出:

浏览器上的请求地址变了

重定向是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);

}

}

启动,浏览器访问

b4977fdf73975d0dbb070f5a95aeeb14.png

控制台输出

63d393c8c79dffae399fcfb2cedc5844.png

我们把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);

}

}

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

576aecb1a08c36fa07e2b515af6c303a.png

从上面结果我们可以看出,重定向可以访问其他服务器的资源

我们写一个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

重启,浏览器访问

741b05b66125c9e7d2ead8a362bcd068.png

控制台输出:

76a9ac1d49e17bfec06a9133d2445e19.png

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

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

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

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值