重定向与请求转发的区别

13 篇文章 0 订阅

重定向与请求转发的区别

首先要知道,什么是重写向,什么是请求转发!

重定向

浏览器发起:两次请求,两次响应

浏览器先访问servlet1,没有想要的资源,再返回了302重定向码,和location(另一个servlet地址)

浏览器拿到这两个参数后,再访问servlet2。

且地址栏会变化。

图解:

在这里插入图片描述

代码如下:

package com.lbl.servlet;

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

@WebServlet("/SendRedirect01Servlet")
public class SendRedirect01Servlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.sendRedirect("/Day04_war_exploded/SendRedirect02Servlet");
    }
}
package com.lbl.servlet;

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

@WebServlet("/SendRedirect02Servlet")
public class SendRedirect02Servlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.getWriter().println("success");
    }
}

效果图:

在这里插入图片描述

请求转发

浏览器发起:一次请求,一次响应

浏览器访问servlet1,然后servlet1请求转发到servlet2,此时requst和response域会传给servlet2,最后由servlet2响应浏览器。

地址栏不变化

图解:

在这里插入图片描述

代码如下:

package com.lbl.servlet;

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

@WebServlet("/dispatcher01Servlet")
public class Dispatcher01Servlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //将游戏本添加到requst域中
        request.setAttribute("name","游戏本");
        request.getRequestDispatcher("/dispatcher02Servlet").forward(request,response);
    }
}
package com.lbl.servlet;

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

@WebServlet("/dispatcher02Servlet")
public class Dispatcher02Servlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.获取值
        String name = (String) request.getAttribute("name");
        //2.组装标签后,响应给浏览器
        response.setContentType("text/html;charset=utf-8");
        response.getWriter().println("<font color='red'>"+name+"</font>");
    }
}

效果图:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值