重定向与请求转发的区别

重定向与请求转发是通过jsp内置对象进行的,分别是request对象,response对象

首先介绍重定向

首先我构建如下的项目结构

showUpOne.jsp中显示ShowUpOne

showUpTwo.jsp中显示ShowUpTwo

hidden.jsp显示hidden

index.jsp中的代码如下

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<title>Insert title here</title>
		<script type="text/javascript" src="js/jquery-3.3.1.js"></script>
	</head>
	<body>
		<a href="./ForwardServlet">请求转发</a>
		<a href="./RedirectServlet">重定向</a>
	</body>
</html>

ForwardServlet中的代码如下

package com.test;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class ForwardServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
    
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.getRequestDispatcher("showUpTwo.jsp").forward(request, response);
	}

}

RedirectServlet中的代码如下

package com.test;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class RedirectServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.sendRedirect("showUpOne.jsp");
	}

}

请求转发(Forward):这里的“请求”是名词,请求转发指客户端浏览器向Web服务器端发送请求,服务器端收到请求后进行相应处理后再将该请求转发到另外的资源(即这一“转发”操作是在Web服务器端执行的),服务器端对该资源进行处理后反馈给客户端。

重定向(Redirect):客户端浏览器向Web应用服务器端发送一个请求,Web服务器端使用HttpServletResponsesendRedirect()方法将结果(结果中头信息内HTTP状态码为302,Location响应报头域中保存响应回来的地址)返回客户端浏览器;客户端浏览器收到服务器端结果后解析其头部信息,然后自动按照头部指定地址以GET方式再次向Web应用服务器端发请求,此时地址栏URL发生变化,服务器端接收到新的请求再将结果返回至客户端浏览器,客户端浏览器解释执行返回结果并将执行结果显示给用户,至此该过程结束。

请求转发:

我们来观察两种访问方式浏览器中地址栏的变化。

访问ForwardServlet之前

访问之后

页面内容

浏览器访问到了servlet将页面转发到了ShowUpTwo.jsp(地址栏未变化到ShowUpTwo.jsp)

重定向:

而重定向访问之后:

浏览器访问到了servlet将页面重定向到了showUpOne.jsp;

这就是请求转发和重定向的区别,也即是上面绿字的具体表现。

此外请求转发还可以访问WEB—INF目录里的文件(重定向无法访问

将ForwardServle代码更改如下

package com.test;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class ForwardServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
    
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.getRequestDispatcher("WEB-INF/hidden.jsp").forward(request, response);
	}

}

此时页面表现为:

也就是说请求转发能够访问到WEB—INF里的文件。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值