javaweb之请求转发与请求重定向

一:请求转发

1.1 要点

  • 格式:request.getRequestDispatcher(URL地址).forward(request, response)
  • 客户端发送请求,Servlet做出业务逻辑处理。
  • Servlet调用forword()方法,服务器Servlet把目标资源返回给客户端浏览器
  • 可以访问WEB-INF下的文件,WEB-INF的文件一般是需要一定的权限才可以访问
  • 例子:req.getRequestDispatcher(“/WEB-INF/admin.jsp”).forward(req,resp);
  • 注意点:在浏览器地址栏中不会显示出转发后的地址,属于服务器内部转发,整个过程处于同一个请求当中,所以转发中数据的存取可以用request作用域
    在这里插入图片描述

1.2案例实战

目录结构
在这里插入图片描述
index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>

<html>
<body>
    index.jsp

</body>
</html>

admin.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    admin.jsp
</head>
<body>

</body>
</html>

DispatchServlet.java

package net.xdclass.net;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/forward")
public class DispatchServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        System.out.println("DispatchServlet doGet");

        req.getRequestDispatcher("/WEB-INF/admin.jsp").forward(req,resp);

        //req.getRequestDispatcher("request").forward(req,resp);

    }
}

启动tomcat,访问网页
在这里插入图片描述
访问http://localhost:8080/forward查看跳转在这里插入图片描述

二:请求重定向sendRedirect

2.1 请求重定向定义

  • 客户端发送请求,Servlet做出业务逻辑处理
  • Servlet调用response.sendRedirect(“xxx.jsp”)方法,把要访问的目标资源作为response响应信息发给客户端浏览器
  • 客户端浏览器重新访问服务器资源xx.jsp,服务器再次对客户端浏览器做出响应
  • 请求重定向,不能访问WEB-INF下的文件,浏览器上的窗口地址会改版,可以用于跳转第三方地址或者应用里面的其他Servelt、jsp等
  • 例子: response.sendRedirect(“/WEB-INF/admin.jsp”);
    在这里插入图片描述

三:请求转发与请求重定向的区别

  • 重定向是取不到request中的存储的数据,如果当前servlet是重定向,浏览器可以看到两个请求
    案例测试:在reqeust中设置值,然后在请求转发到页面,使用EL表达式取值
  • 调用sendRedirect()方法,会在响应中设置Location响应报头,这个过程对于用户来说是透明的,浏览器会自动完成新的访问
  • 重定向路径问题:如果没有加 http 开头,则认为是当前应用里面的servlet重定向,默认加上应用上下文;如果有加http则会使用配置的全路径进行跳转
  • 如果请求转发可以满足需要时,尽量使用请求转发,而不是重定向,效率性能更好
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

竹意雅韵(马)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值