重定向和转发的区别

重定向和转发的区别_第1张图片

重定向

1、定义

用户通过浏览器发送一个请求,Tomcat服务器接收这个请求,会给浏览器发送一个状态码302,并设置一个重定向的路径,浏览器如果接收到了这个302的状态码以后,就会去自动加载服务器设置的路径

一个页面跳转到另外一个页面(应用场景)、登录页面跳转到主页面: login.jsp====>LoginServlet====>main.jsp

2、特征

①重定向的过程是浏览器(客户端)的行为

②实际上浏览器做了2次请求(当点击登录按钮的时候做了两次请求)(分别是请求login和main.jsp)

③注意上一次请求的request对象会丢失

④重定向有一个非常明显的特征,即浏览器的url变化了

重定向和转发的区别_第2张图片

3、核心代码

重定向就一句核心代码

response.sendRedirect("main.jsp"); 
//就这一行代码,但是这一行代码必须写在doGet或者doPost方法中

4、测试

login.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title


<%--请求RedirectServlet--%>


RedirectServlet

package com.by.servlet;

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

public class RedirectServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置字符编码
        request.setCharacterEncoding("utf-8");

        String username = request.getParameter("username");
        String password = request.getParameter("password");
        request.setAttribute("username", username);
        request.setAttribute("password", password);

        //登录以后跳转到主页
        //重定向
        //这个TestLoginServlet里面的数据是不能传给target.html的
        response.sendRedirect("main.jsp");
    }
}

web.xml

 
        redirect
        com.by.servlet.RedirectServlet
    

    
        redirect
        /redirect
    

main.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title


这是main页面
<%-- <%=request.getAttribute("username")%> <%=request.getAttribute("password")%> --%> ${username} ${password}

测试

重定向和转发的区别_第3张图片

转发

1、定义

用户发送数据请求到服务器,服务器接收当前请求,会调用内部方式(转发)处理该请求,最终把响应给客户端

2、特征

①转发是服务器的行为

②浏览器在这个过程中只有一次行为

③转发可以带有数据 request对象中

④url不会发生任何的变化

重定向和转发的区别_第4张图片

3、核心代码

request.getRequestDispatcher(“main.jsp”).forward(request,response);
//这一行代码就表示进行了转发,url没有变,但是响应的结果却是一次请求干了两个活

4、测试

login.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title


<%--请求ForwardServlet--%>


ForwardServlet

package com.by.servlet;

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

public class ForwardServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置字符编码
        request.setCharacterEncoding("utf-8");

        String username = request.getParameter("username");
        String password = request.getParameter("password");
        request.setAttribute("username", username);
        request.setAttribute("password", password);

        //登录以后跳转到主页
        //重定向
        //这个TestLoginServlet里面的数据是不能传给target.html的
        request.getRequestDispatcher("main.jsp").forward(request, response);
    }
}

web.xml

  
        forward
        com.by.servlet.ForwardServlet
    

    
        forward
        /forward
    

main.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title


这是main页面
${username} ${password}

测试

重定向和转发的区别_第5张图片

总结

转发用forword  重定向用redirect

1.请求次数

	转发:只请求一次      重定向:请求两次

2.地址栏变化:

	转发:地址栏不发生变化     重定向:地址栏发生变化

3.发生位置

转发:发生在服务器而浏览器全然不知    重定向:发生在浏览器

4.访问资源

	转发:只能访问当前服务器的资源     重定向:可以访问其他服务器的资源

5.资源共享

转发:可以使用request对象来共享资源
重定向: 不能使用request对象共享资源

你可能感兴趣的:(java,开发语言)