设为首页 加入收藏

TOP

JavaWeb 中 “转发”与 “重定向”的区别(二)
2023-07-25 21:32:36 】 浏览:75
Tags:JavaWeb 转发
javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.Date; public class AServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 设置,在浏览器上响应的格式类型 Date nowTime = new Date(); // 创建当前时间的 Date 对象 // 将 nowTime 的数据存储(绑定)到请求域当中 request.setAttribute("sysTime",nowTime); // 第一步: 获取到转发对象,注意:/ 开始,不家项目名 , / + 对应跳转的 Servlet 当中的 web.xml 当中的url映射的路径 RequestDispatcher requestDispatcher = request.getRequestDispatcher("/B"); // 第二步: 调用转发器的forward方法完成跳转/转发 requestDispatcher.forward(request,response); } }
package com.RainbowSea.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.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();

        // 取出请求域当中的数据: 这里的name值与上面setAttribute(String name,Object obj) 保持一致。
        Object sysTime = request.getAttribute("sysTime");

        writer.println("sysTime = " + sysTime);  // 显示到浏览器页面当中的数据
    }
}

在这里插入图片描述

在这里插入图片描述

转发的下一个资源必须是一个Servlet吗 ?

不一定,只要是Tomcat服务器当中的合法资源,都是可以转发的。例如:html....

举例:转发一个html文件

注意: 如果对应的不是 Servlet ,默认是从项目的中的web目录开始的,如果是转发web的目录下的子目录的话,需要指定对应的子目录的文件。
在这里插入图片描述

package com.RainbowSea.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 TestServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,
            IOException {
        // 转发的下一个资源不一定是Servlet 资源,
        // 只要是Tomcat服务器当中合法的资源,都是可以转发的,例如: html...
        // 注意:转发的时候,路径的写法要注意,转发的路径以 “/” 开始,不加项目名
        // 默认是从项目的中的web目录开始的,如果是转发web的目录下的子目录的话,需要指定对应的子目录
        // 如下是含有子目录的 / 表示 web目录
        request.getRequestDispatcher("/test/test.html").forward(request,response);

    }
}

在这里插入图片描述

2. Redirect重定向

重定向: 是指当浏览器请求一个 URL时,服务器返回一个重定向指令,告诉浏览器地址已经变了,麻烦使用新的URL再重新发送新请求。

重定向有两种: 一种是302响应,称为临时重定向,一种是301响应,称为永久重定向。两者的区别是,如果服务器发送301永久重定向响应,浏览器会缓存/hi/hello这个重定向的关联,下次请求/hi的时候,浏览器就直接发送/hello请求了。

说明: 所谓的重定向是将新的路径交给浏览器的地址栏上,然后自动执行的,而前端的信息获取是需要指明项目名的,所以:注意:重定向 response.sendRedirect("/项目名/xxx/xx");的跳转路径是需要写明项目名的

// 下面这种是 302 响应,临时重定向
// 注意:路径上要加一个项目名。为什么?
// 浏览器发送请求,请求路径上是需要添加项目名的。
// 以下这一行代码会将请求路径“/oa/dept/list”发送给浏览器
// 浏览器会自发的向服务器发送一次全新的请求:/oa/dept/list
response.sendRedirect("/oa/dept/list");

HttpServletResponse提供了快捷的redirect()方法实现302重定向。如果要实现301永久重定向,可以这么写:

response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY); // 301
response.setHeader("Location", "/hello");

举例: 浏览器向 AServlet 发送请求,A

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

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目