java-Servlet请求转发(Forward)和重定向(Redirect)

请求转发(forward):
实现的方法是:
request.getRequestDispatcher(“转发的路径”).forward(request,response);
转发的路径必须是同一个web应用里
转发的源代码:

request.getRequestDispatcher("/test.jsp").forward(request, response);
或者
request.getRequestDispatcher("test.jsp").forward(request, response);

两个路径虽然访问的内容一样,但是概念是不一样的.不带 / 是直接从本地访问test.jsp这个网页
而带 / 是从TestForward服务器中跳转的去访问test.jsp这个网页
果需要给jsp带去一些参数,那必须使用从服务器中跳转过去的这种方式也就是请求转发.
下面是请求转发的例子:

package com.sunkang.req;

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

/**
*@Time:2020年1月11日上午10:14:29
*@Author:783344627@qq.com
*测试请求转发及特点
*/

public class TestForward extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		//测试
		System.out.println("TestForward.doGet()");
		//往request的map集合里存入一个属性
		request.setAttribute("name", "迪丽热巴");
		//将请求转发给test.jsp
		request.getRequestDispatcher("test.jsp").forward(request, response);
		//request对象中有map集合(不止一个) Map Map
		
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}
}

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>这是jsp</title>
</head>
<body>
	<h1>hehe </h1>
	<% 
		String name = (String)request.getAttribute("name");
		out.write("从request的map集合取出的数据  "+name);
	%>
</body>
</html>

重定向Redirect:
有三种形式:
一.同一个web应用里面定向
二.不同的web应用里面定向
三.外部web应用里面定向
一.实现方式:同一个web应用里面
直接指向路径.我们假设在同一个文件夹:day1 里面
response.sendRedirect(“http://localhost/day1/test.jsp”);
可以简写为:
response.sendRedirect("/day/test.jsp");
还可以进一步简写:
response.sendRedirect(" test.jsp");
二.实现方式:不同的web应用里面假设day1 day2
response.sendRedirect(“http://localhost/day2/test.jsp”);
可以简写为:
response.sendRedirect("/day2/test.jsp");
三.实现方式:外部web应用
response.sendRedirect(“http://www.baidu.com”);

扩展内容:forward只请求一次 而 Redirect是请求一次服务器再请求一次jsp
请求转发地址栏是不变的但是重定向地址栏是变化的
请求转发我们要注意转发的过程是:浏览器访问服务器,然后服务器根据请求包装request然后转发给jsp文件,此时的jsp文件就相当于一个响应的指令然后去返回给浏览器所需要的数据.从始至终,浏览器发过来的请求至转发给jsp的请求都是一个
request.

重定向:我们要主要定向的过程是浏览器发给服务器一个请求,服务器封装请求到request,当需要定向jsp等文件时我们会返回给浏览器一个响应这个响应是要告诉浏览器,你需要重新发送一个去访问jsp的请求.此时浏览器会再发送一个请求.这过程里包含了两个request.当服务器给浏览器返回时是响应的过程所有我们需要用
response去返回响应(Redirect).
在这里插入图片描述
因为重定向是执行的第二次的指向,所以第一次的设定的值会被pass.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值