JavaWeb中请求转发和请求重定向的区别以及使用

 更新时间:2021年6月8日 15:00  点击:1579

什么是请求转发?

请求转发是指,服务器收到请求后,从一次资源跳转到另一个资源的操作。

在这里插入图片描述

请求转发的特点

1.浏览器地址栏不会发生变化

2.他们一次请求,服务器完成转发操作

3.共享Request域中的数据

4.可以转发到WEB-INF目录下

5.不可以访问工程以外的资源

举个例子:

1.一个公司有多个部门,其中部门1(Servlet1)向客户提供了自己能够提供的服务,但是还有一部分服务自己提供不了,需要其他部门的服务;

2.所以部门1(Servlet1)将客户的文件盖一个章,证明部门1已经提供了服务,然后将其转交(请求转发)到部门2(Servlet2);

3.部门2检查部门1是否盖过章了,如果盖过章就继续向客户提供服务…;

4.直到所有服务都处理完,将客户需要的数据提供给客户(即,将数据转发给客户端**[转发到某个页面]**);

package servlet;

import javax.servlet.RequestDispatcher;
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 Servlet1 extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
        //1.servlet1先获取请求参数,看看servlet1需要做的事
        String username = request.getParameter("username");
        System.out.println(username);
        
        //.....部门1提供自己的服务
        
        //2.servlet1设置一个参数证明servlet1转发的请求(部门1盖一个章)
        request.setAttribute("key1", "servlet1");

        //3.查询servlet2的路径,(部门1将其转交给部门1)
        RequestDispatcher dispatcher = request.getRequestDispatcher("/servlet2");
        
        //4.把请求和响应转发给servlet2
        dispatcher.forward(request, response);
    }
}

package 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 Servlet2 extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //部门2查看客户需要的服务
        System.out.println("Servlet2查看参数: "+request.getParameter("username"));
        //部门2查看部门1有没有盖章,判断是否继续服务
        System.out.println("Servlet2查看是否有Servlet1的证明: "+request.getAttribute("key1"));
        //部门2处理完自己的服务,
        System.out.println("Servlet处理自己的业务");
    }
}

在这里插入图片描述

注意

1.这时候如果我们将Servlet2放在WEB_INF下,那么我们就无法直接访问servlet2了;

2.但是我们可以通过请求转发来实现访问servlet2;

思考:登录功能和这种请求转发方法类似,我们无法跳过登录界面直接访问系统,所有我们可以用这种请求转发的方法来实现;

什么是请求重定向?

请求重定向:是指客户端发送请求,然后服务器告诉客户端,我给你一个地址,你去新的地址访问(之前的地址可能已经被废弃,或者之前的地址[Servlet]无法满足需求);

在这里插入图片描述

第一种方案

// 设置响应状态码 302 ,表示重定向,(已搬迁) 
resp.setStatus(302); 
// 设置响应头,说明 新的地址在哪里 
resp.setHeader("Location", http://localhost:8080);

第二种方案(推荐使用)

resp.sendRedirect(http://localhost:8080);

请求重定向的特点

1.浏览器的地址栏会发生变化

2.浏览器发送了两次请求,而不是像调用request的getRequestDispatcher("/a/b/c.html").forward(request, response)方法实现的;所以一共创建了两个request对象

3.两个request对象不能共享域数据

4.重定向不能访问WEB-INF里的资源,因为两次请求都是客户端发起的,客户端无法直接访问到WEB-INF里的资源

5.可以访问工程外的资源(比如说调转的百度等等)

什么时候使用请求重定向?

1.浏览会记录最后一次请求的所有数据,客户端可以通过刷新页面的方法,重新发起最后一次请求;

2.而我们在请求转发或请求重定向之前,总会处理一些业务;此时,如果当本次业务是对数据库,本地文件的增删改操作时,就需要使用请求重定向;

为什么呢?

因为,这时如果我们使用请求转发(整个处理业务过程就只是一次请求),浏览就会记录我们这次请求(操作数据库),一旦客户端刷新页面,就会执行(操作数据库)的请求,这时很严重的bug,我们要避免,所有就要用到请求重定向;

1.因为我们每次操作完数据库,都会跳转到首页,或者数据展示的页面,所以这时我们使用请求重定向跳转到这个页面(实际是跳转到某个Servlet查询数据库中的记录,这个Servlet再跳转到数据展示的页面);

2.此时浏览器记录的最后一次请求就是查询数据库中记录的请求了,这时我们刷新页面,也只是查询数据,不再是对数据库的增删改了;

总结:当我们修改数据库中的数据的之后,就需要使用请求重定向来避免上述的问题了;

到此这篇关于JavaWeb中请求转发和请求重定向的区别以及使用的文章就介绍到这了,更多相关请求转发和请求重定向内容请搜索猪先飞以前的文章或继续浏览下面的相关文章希望大家以后多多支持猪先飞!

[!--infotagslink--]

相关文章

  • JavaWeb实战之编写单元测试类测试数据库操作

    这篇文章主要介绍了JavaWeb实战之编写单元测试类测试数据库操作,文中有非常详细的代码示例,对正在学习javaweb的小伙伴们有很大的帮助,需要的朋友可以参考下...2021-04-22
  • JavaWeb表单及时验证功能在输入后立即验证(含用户类型,性别,爱好...的验证)

    最近做项目遇到表单在输入后立即验证,而不是提交后再验证,在网上找了下资料,没有合适的,于是我自己动手写了一个,分享到脚本之家平台,供大家参考...2017-06-15
  • JavaWeb实现学生信息管理系统(3)

    这篇文章主要为大家详细介绍了JavaWeb实现学生信息管理系统第三篇,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-08-15
  • javaweb开发提高效率利器JRebel详解

    这篇文章主要介绍了javaweb开发提高效率利器JRebel详解,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-04-18
  • JavaWeb之会话技术案例详解

    这篇文章主要介绍了JavaWeb之会话技术案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下...2021-07-28
  • javaWeb如何实现随机图片验证码详解

    这篇文章主要给大家介绍了关于javaWeb如何实现随机图片验证码的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-28
  • JavaWeb实现简单用户发送邮件

    这篇文章主要为大家详细介绍了JavaWeb实现简单用户发送邮件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-08-15
  • JavaWeb实现学生信息管理系统(2)

    这篇文章主要介绍了JavaWeb实现学生信息管理系统的第二篇,实现学生管理系统的查找和添加功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-08-15
  • JavaWeb实现学生信息管理系统(1)

    这篇文章主要为大家详细介绍了JavaWeb实现学生信息管理系统第一篇,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-08-15
  • JavaWeb实现简单的自动登录功能

    这篇文章主要为大家详细介绍了JavaWeb实现简单的自动登录功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-08-16
  • .NET Core如何进行请求转发的实现

    这篇文章主要介绍了.NET Core如何进行请求转发的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-09-22
  • JavaWeb Servlet实现网页登录功能

    这篇文章主要为大家详细介绍了JavaWeb Servlet实现网页登录功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-07-05
  • JavaWeb中请求转发和请求重定向的区别以及使用

    今天带大家学习JavaWeb的相关知识,文章围绕着JavaWeb中请求转发和请求重定向的区别以及使用展开,文中有非常详细的介绍,需要的朋友可以参考下...2021-06-08
  • JavaWeb实现文件的上传与下载

    这篇文章主要为大家详细介绍了JavaWeb实现文件的上传与下载,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-04-07
  • Eclipse开发JavaWeb项目配置Tomcat的方法步骤

    本文主要介绍了Eclipse开发JavaWeb项目配置Tomcat的方法步骤,首先介绍eclipse开发JavaWeb项目需要配置的相关环境,使用tomcat软件在本地搭建服务器,然后再在eclipse环境下配置tomcat,感兴趣的可以了解一下...2021-08-20
  • JavaWeb 入门:Hello Servlet

    这篇文章主要介绍了Servlet开发JavaWeb工程示例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-07-17
  • JavaWeb HttpServletResponse对象及常用方法

    这篇文章主要介绍了JavaWeb-HttpServletResponse对象,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2022-03-17
  • JavaWeb Maven详解相关配置

    这篇文章主要介绍了使用maven架构管理开发的相关配置,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2022-06-29
  • JavaWeb 使用DBUtils实现增删改查方式

    这篇文章主要介绍了JavaWeb 使用DBUtils实现增删改查方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-12-04
  • JavaWeb购物车项目开发实战指南

    之前没有接触过购物车的东东,也不知道购物车应该怎么做,所以在查询了很多资料,总结一下购物车的功能实现,下面这篇文章主要给大家介绍了关于JavaWeb购物车项目开发的相关资料,需要的朋友可以参考下...2022-06-16