java--重定向/转发

本文对比了转发与重定向两种Web应用中常见的页面跳转方式。转发是在服务器端完成的,能够共享请求对象中的数据;而重定向则由浏览器发起新的请求,不共享数据。文章还介绍了具体的实现代码及配置。

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

转发:这里写图片描述
共用req,resp,所以可以在里面封装数据
只能站内实现,无法站外实现
通过req
请求的地址:/jsps/result.jsp

重定向:
这里写图片描述
浏览器请求两次,服务器应答两次,两次的req,resp不同,无法共享
通常站外实现(站内实现共享则需要传参)
通过resp:
请求的地址:/helloWeb/jsps/result.jsp

主页index.xml

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

<html>
  <head>

    <title>第一个web项目的主页</title>

  </head>

  <body>
    <h2>主页主页</h2>
    <h2>湖南长沙</h2>
    <h3>发布方式一......</h3>
    <br/>
        <h2>演示重定向/转发</h2>
    <a href="jsps/result.jsp">超链接</a><!-- 后台控制不了 --><br/><br/>
    <a href="redirect">重定向/转发</a><br/><br/>
    </body>
</html>

RedirectServlet .java

package cn.hncu.servlet;


import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class RedirectServlet extends HttpServlet {


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

//      req.getHeader("Referer");

        //转发--共享req,resp
        req.setAttribute("name", "jack");//getAttribute获取
        //重定向--两次的req不一样(用传参)用getParament获取
        //下面resp.sendRedirect( "/helloWeb/jsps/result.jsp?name=jack");

        //通过设置http协议的响应头实现重定向
        //由服务器找到/helloWeb/jsps/result.jsp的位置,返回给浏览器,浏览器再次拿着这个目录再次请求
        //方法一:底层的协议技术设置状态码
//      resp.setStatus(302);//HttpServletResponse.SC_FOUND
//      resp.setHeader("Location", "/helloWeb/jsps/result.jsp");

        //方法二:用函数内部设置状态码
//      resp.sendRedirect( "/helloWeb/jsps/result.jsp");
//      resp.sendRedirect( "/helloWeb/jsps/result.jsp?name=jack");





        //转发--分发器
        //由服务器在当前项目下找到/jsps/result.jsp,再响应
        RequestDispatcher rd=req.getRequestDispatcher("/jsps/result.jsp");
        rd.forward(req, resp);

    }


}

注意:转发是由servlet帮忙转发的,在项目内部,所以请求地址只需要”/jsps/result.jsp”就可以了
但是重定向是servlet响应浏览器,再由浏览器向拿着响应回来的地址信息去向服务器进行第二次请求,所以请求地址要详细,否则浏览器找不到想要的信息”/helloWeb/jsps/result.jsp”
可以看出重定向和转发相差一个项目根目录

配置文件web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
  <display-name></display-name>

  <servlet>
    <servlet-name>RedirectServlet</servlet-name>
    <servlet-class>cn.hncu.servlet.RedirectServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>RedirectServlet</servlet-name>
    <url-pattern>/redirect</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值