JavaWeb-04 JSP内置对象--response对象 (addCookie(),setHeader(),sendRedirect())

本文介绍了JavaWeb中JSP的Response内置对象,重点讲解了如何使用`addCookie()`, `setHeader()`, `sendRedirect()`方法。通过登录示例,对比了使用重定向和请求转发两种页面跳转方式的不同,重定向会导致数据丢失,而请求转发则能保留数据。" 55805427,5824105,PAT甲级题目1087:罗马之路(Dijkstra/DFS回溯剪枝),"['PAT甲级', '算法', 'Dijkstra', 'DFS', '图论']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

response

服务器接收客户端请求:request
服务器对客户端的回应:response

javax.servlet.http的接口HttpServletResponse extends ServletResponse

重要方法:

  • void addCookie(Cookie cookie):向客户端增加cookie
  • void setHeader(java.lang.String name,java.lang.String value):设置回应的头信息
  • void sendRedirect(java.lang.String location) throws java.io.IOException:页面跳转的一种方式(重定向)
  • void setContentType(String type): 设置服务端的contentType类型(设置服务端响应的编码)

1. 示例:登录

login.jsp -> check.jsp -> success.jsp

  • 重定向是response提供
  • 转发是request提供

方式一:通过重定向跳转方式 sendRedirect

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

login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html"; charset="UTF-8">
    <title>register.jsp--response</title>
</head>
<body>
    <form action="check.jsp" method="POST">
        用户名:<input type="text" name="uname" id=""><br>
        密码:<input type="password" name="upwd" id=""><br>
        <input type="submit" value="提交">
    </form>
</body>
</html>

check.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html"; charset="UTF-8">
    <title>show.jsp--request</title>
</head>
<body>
    <%
        request.setCharacterEncoding("UTF-8");
        String name = request.getParameter("uname");
        String pwd = request.getParameter("upwd");

        if (name.equals("zs") && pwd.equals("abc")) { //假设zs abc
            response.sendRedirect("success.jsp");//相对路径
        } else {
            //登录失败
            out.print("用户名或密码有误!")
        }
    %>

    注册成功,信息如下:<br>
    姓名:<%=name %> <br>
    年龄:<%=age %> <br>
    密码:<%=pwd %> <br>
    爱好:<br>
    <%
        if (hobbies != null) {
            for (String hobby: hobbies) {
                out.print(hobby + "&nbsp;");
            }
        }
    %>
</body>
</html>

success.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html"; charset="UTF-8">
    <title>register.jsp--response</title>
</head>
<body>
    登录成功!<br>
    欢迎你:
    <%
        String name = request.getParameter("uname");
        out.print(name); 
    %>
</body>
</html>

结果

  • 页面实现跳转
  • 但是用户名没有拿到
    即重定向实现了跳转,但数据丢失了
    在这里插入图片描述

方式二:通过请求转发方式 sendRedirect

check.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html"; charset="UTF-8">
    <title>show.jsp--request</title>
</head>
<body>
    <%
        request.setCharacterEncoding("UTF-8");
        String name = request.getParameter("uname");
        String pwd = request.getParameter("upwd");

        if (name.equals("zs") && pwd.equals("abc")) { //假设zs abc
            //response.sendRedirect("success.jsp"); 页面跳转:重定向,导致数据丢失
            //页面跳转:请求转发
            request.getRequestDispatcher("success.jsp").forward(request, response);
        } else {
            //登录失败
            out.print("用户名或密码有误!")
        }
    %>

    注册成功,信息如下:<br>
    姓名:<%=name %> <br>
    年龄:<%=age %> <br>
    密码:<%=pwd %> <br>
    爱好:<br>
    <%
        if (hobbies != null) {
            for (String hobby: hobbies) {
                out.print(hobby + "&nbsp;");
            }
        }
    %>
</body>
</html>

结果

  • 页面没有跳转
  • 可以获取数据
    在这里插入图片描述

index.jsp->register.jsp->success.jsp

----------请求转发重定向
地址栏是否改变
是否保留第一次
不变register.jsp改变success.jsp
请求时的数据保留不保留
请求的次数12
跳转发生的位置服务端客户端发出的第二次跳转

重定向:

  • 服务端从客户端拿到数据,第一次响应给客户端,客户端指向新的跳转地址success.jsp
  • 客户端发出第二次请求request,success.jsp响应给客户端

请求转发:

  • 客户端第一次请求request,服务端拿到数据,请求转发给success.jsp,success.jsp响应给客户端

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值