请求转发(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.