response.sendRedirect()实现重定向(页面跳转)

 更新时间:2023年04月24日 16:09:06   作者:智慧浩海  
在Java web开发中,使用response.sendRedirect()可实现重定向功能。本文将介绍如何使用该方法进行页面跳转,以及该方法的使用场景和注意事项,感兴趣的可以了解一下

在某些情况下,针对客户端的请求,一个 Servlet 类可能无法完成全部工作。这时,可以使用请求重定向完成这一工作。

请求重定向指 Web 服务器接收到客户端的请求后,可能由于某些条件的限制,不能访问当前请求 URL 所指向的 Web 资源,而是指定了一个新的资源路径,让客户端重新发送请求。

为了实现请求重定向,HttpServletResponse 接口定义了一个 sendRedirect() 方法,该方法用于生成 302 响应码和 Location 响应头,从而通知客户端重新访问 Location 响应头中指定的 URL,sendRedirect() 方法的完整语法如下所示:

public void sendRedirect(java.lang.String location) throws java.io.IOException

在上述方法代码中,参数 location 可以使用相对 URL,Web 服务器会自动将相对 URL 翻译成绝对 URL,再生成 Location 头字段。

sendRedirect() 方法的工作原理如图 1 所示。

图 1 sendRedirect()方法的工作原理

在图 1 中,当客户端访问 Servlet1 时,由于在 Servlet1 中调用了 sendRedirect() 方法将请求重定向到 Servlet2,因此,浏览器收到 Servlet1 的响应消息后,立刻向 Servlet2 发送请求,Servlet2 对请求处理完毕后,再将响应消息回送给客户端浏览器并显示。

下面通过一个用户登录的案例分步骤讲解 sendRedirect() 方法的使用。

1)创建页面文件

在 servletDemo02 项目的 WebContent 目录下创建一个用户登录的页面 login.html 和登录成功的页面 welcome.html,编辑后如下所示。

① login.html文件

<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">
<title>用户登录</title>
</head>
<body>
<!-- 把表单内容提交到 servletDemo02 工程下的 LoginServlet -->
<form action="/servletDemo02/LoginServlet" method="POST">
用户名:<input type="text" name="username"><br/>
密&nbsp;&nbsp;&nbsp;码:<input type="password" name="password"/><br/>
<br/>
<input type="submit" value="登录"/>
</form>
</body>
</html>

② welcome.html文件

<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">
<title>欢迎页面</title>
</head>
<body>
欢迎你,登陆成功!
</body>
</html>

2)创建 Servlet

在 servletDemo02 项目的 com.mengma.response 包中创建一个名为 LoginServlet 的 Servlet 类,用于处理用户登录请求,如下所示。

package com.mengma.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LoginServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
// 用 HttpServletRequest 对象的 getParameter() 方法获取用户名和密码
String username = request.getParameter("username");
String password = request.getParameter("password");
// 假设用户名和密码分别为 admin 和 123456
if ("admin".equals(username) && ("123456").equals(password)) {
// 如果用户名和密码正确,重定向到 welcome.html
response.sendRedirect("/servletDemo02/welcome.html");
} else {
// 如果用户名和密码错误,重定向到 login.html
response.sendRedirect("/servletDemo02/login.html");
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
doGet(request, response);
}
}

在上述代码中,首先通过 getParameter() 方法分别获取用户名和密码,然后判断表单中输入的用户名和密码是否为指定的“admin”和“123456”,如果是,则将请求重定向到 welcome.html 页面,否则重定向到 login.html 页面。

3)运行项目并查看结果

启动 Tomcat 服务器,在浏览器的地址栏中输入地址 http://localhost:8080/servletDemo02/login.html 访问 login.html,浏览器的显示结果如图 2 所示。

图 2 运行结果

在图 2 所示的界面中填写用户名“admin”和密码“123456”,单击【登录】按钮,浏览器的显示结果如图 3 所示。

图 3 运行结果

从图 3 中可以看出,当用户名和密码输入正确后,浏览器跳转到了 welcome.html 页面。但是,如果用户名或者密码输入错误,则会跳转到图 2 所示的登录页面。

到此这篇关于response.sendRedirect()实现重定向(页面跳转)的文章就介绍到这了,更多相关response.sendRedirec 重定向内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java设计模式之策略模式示例详解

    Java设计模式之策略模式示例详解

    策略模式属于Java 23种设计模式中行为模式之一,该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。本文将通过示例详细讲解这一模式,需要的可以参考一下
    2022-03-03
  • Java使用阻塞队列BlockingQueue实现生产者消费者的方法

    Java使用阻塞队列BlockingQueue实现生产者消费者的方法

    BlockingQueue是一个支持阻塞插入和移除操作的队列,常用于多线程环境下的生产者和消费者场景,文章介绍了阻塞队列BlockingQueue的概念和其在生产者消费者模式中的应用,提供了一个简单的示例,展示了如何使用ArrayBlockingQueue来实现生产者消费者模式
    2024-11-11
  • java中使用url进行编码和解码

    java中使用url进行编码和解码

    这篇文章主要介绍了java中使用url进行编码和解码,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • SpringAOP切点函数实现原理详解

    SpringAOP切点函数实现原理详解

    这篇文章主要介绍了SpringAOP切点函数实现原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • 详解Java中常见语法糖的使用

    详解Java中常见语法糖的使用

    语法糖(Syntactic Sugar),也称糖衣语法,是由英国计算机学家 Peter.J.Landin 发明的一个术语,指在计算机语言中添加的某种语法,本文主要为大家分享了12个java中常见的语法糖,感兴趣的小伙伴可以了解下
    2023-11-11
  • IntelliJ IDEA2020.3详细安装教程

    IntelliJ IDEA2020.3详细安装教程

    这篇文章主要介绍了IntelliJ IDEA2020.3详细安装教程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • feign如何打印出http请求

    feign如何打印出http请求

    这篇文章主要介绍了feign如何打印出http请求,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • 解决接口调用报错newSocketStream(..)failed:Too many open files问题

    解决接口调用报错newSocketStream(..)failed:Too many open files问题

    这篇文章主要介绍了解决接口调用报错newSocketStream(..)failed:Too many open files问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • Spring中的@Autowired、@Qualifier和@Primary注解详解

    Spring中的@Autowired、@Qualifier和@Primary注解详解

    这篇文章主要介绍了Spring中的@Autowired、@Qualifier和@Primary注解详解,@Autowired 注解,可以对类成员变量、方法和构造函数进行标注,完成自动装配的工作,@Autowired 是默认根据 byType 进行自动装配的,需要的朋友可以参考下
    2023-11-11
  • SpringBoot自定义消息转换器的实现与应用

    SpringBoot自定义消息转换器的实现与应用

    Spring Boot 默认提供了多种消息转换器,如 Jackson 用于 JSON 格式转换、JAXB 用于 XML 格式转换等,然而,实际开发中往往需要根据业务需求进行自定义的消息转换器,文将详细介绍如何在 Spring Boot 中实现自定义消息转换器,探讨其工作原理、配置方式以及实际应用场景
    2025-01-01

最新评论