设为首页 加入收藏

TOP

JavaWeb 中 “转发”与 “重定向”的区别(一)
2023-07-25 21:32:36 】 浏览:69
Tags:JavaWeb 转发

JavaWeb 中 “转发”与 “重定向”的区别

在这里插入图片描述

每博一文案

人生的常态,就是有聚有散,有得有失,就像山峰一样,总有高低,起伏不断。
曾经,我们是鲜衣怒马的少年,一日看尽长安花。
走着走着,渐渐明白生活并不都是尽心尽情的,万事万物都有力所不能及之处。此时我们能做的,就是看透,看清,看淡。
走着走着,愈发觉得孤独是人生的常态,能遇到一个懂你的固然好,没有也不必强求。
毕竟这个世界上,没有真正的感同身受。
每个人心中都有一个角落,你走不进来,我也走不出去,它的用处,是用来安放疲惫的心灵。
网上有一条教人快乐的微博,内容是这样的: "无法开心享受人生的人可以记下以下 4 点:"
第一,人生没办法取消。出生在人世之后就无法重来,不好好享受就亏大了。
第二,今天不快乐并不代表明天也不快乐。
第三,只要有享受人生的意志,做出行动的勇气,就一定可以好好的享受人生。若人生会因此变好的,没关系的。
第四,感到不安,就睡吧,睡得饱饱的。
你看,快乐说到底,是要自己给自己的,即使没有人陪,也要学会照顾好自己的心情。
毕竟人生这场迎来送往的修行,就是你送送别人,别人也送送你,大部分人只能陪你一程,不能陪你一生。

                              ——————   《一禅心灵庙语》

@


在一个web应用中通过两种方式,可以完成资源的跳转:

  • 第一种方式:转发
  • 第二种方式:重定向

1. Forward 转发

转发 :指内部转发。当一个Servlet处理请求的时候,它可以决定自己不继续处理,而是转发给另一个Servlet处理。

// 获取请求转发器对象
RequestDispatcher dispatcher = request.getRequestDispatcher("/dept/list");
// 调用请求转发器对象的forward方法完成转发
dispatcher.forward(request, response);

// 合并一行代码
request.getRequestDispatcher("/dept/list").forward(request, response);
// 转发的时候是一次请求,不管你转发了多少次。都是一次请求。
// AServlet转发到BServlet,再转发到CServlet,再转发到DServlet,不管转发了多少次,都在同一个request当中。
// 这是因为调用forward方法的时候,会将当前的request和response对象传递给下一个Servlet。

注意: 因为转发是服务器内部的进行的,所以 request.getRequestDispatcher(/不要项目名的).forward(request, response);编写的转发路径是不要加项目名的

举例: 浏览器向 AServlet 发送请求,AServlet 将该请求 “转发”给了 BServlet。但是前端的浏览器并不知道该请求被 BServlet 处理了,浏览器的地址栏上显示的还是发送给 AServlet 请求的路径信息。

package com.RainbowSea.servlet;

import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;

public class AServlet extends HttpServlet {
    // 地址栏上回车操作是 doGet()请求
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,
            IOException {

        // 转发到 BServlet,转发的路径不要加项目名
        request.getRequestDispatcher("/b").forward(request, response);

    }
}

package com.RainbowSea.servlet;

import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;
import java.io.PrintWriter;

public class BServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,
            IOException {

        // 设置浏览器端显示响应的,格式类型,以及字符集
        response.setContentType("text/html;charSet=UTF-8");
        PrintWriter writer = response.getWriter();

        writer.println("<h2> 这里是BServlet 的响应处理 </h2>");

    }
}

在这里插入图片描述
在这里插入图片描述

转发是由WEB服务器来控制的。A资源跳转到B资源,这个跳转动作是Tomcat服务器内部完成的而我们前端也就是浏览器端是不知道我们服务器端对这个请求内部转发处理了多少次。 并且无论我们服务器内部转发了多少次,前端浏览器都仅仅只会认为仅仅只转发了一次,也就是仅仅发送了一次请求因为我们服务器端虽然进行了转发但是,浏览器的地址栏上的请求路径的地址是没有改变的(还是初始的请求路径)

在这里插入图片描述

转发:是可以将 一个Servlet 类当中的信息转发到另一个 Servlet 当中去的,可以实现 Servlet 数据的共享,需要用到 请求域

注意: 请求域的作用域(请求域当中存储的信息),只在一次 请求 范围内有效。而转发机制的特点决定了可以实现请求域的共享:因为无论服务器内部转发了多少次,前端浏览器都只视为是一次请求。

转发机制,将AServlett 类当中的信息转发到 BServlet 当中去

package com.RainbowSea.servlet;

import javax.servlet.RequestDispatcher;
import
首页 上一页 1 2 3 4 5 6 7 下一页 尾页 1/7/7
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇集合 P3 Collection接口和常用方法 下一篇day06-SpringCloud Ribbon

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目