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:[email protected]
*测试请求转发及特点
*/

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.

发布了20 篇原创文章 · 获赞 1 · 访问量 127

猜你喜欢

转载自blog.csdn.net/guangtouhenliang/article/details/103937481
今日推荐