java转发和重定向取值_【JAVAEE】转发和重定向

首先,说一下转发和重定向的几个区别:

本质区别:请求的转发只发出了一次请求,而重定向则发出了两次请求。

具体几个就是:

1. 请求的转发:地址栏是初次发出请求的地址。

请求的重定向:地址栏不再是初次发出的请求地址。地址栏为最后响应的那个地址

2. 请求的转发:在最终的Servlet中,request对象和中转的那个request是用一个对象

请求的重定向:在最终的Servlet中,request对象和中转的那个request不是同一个对象

3. 请求的转发:只能转发给当前WEB应用的资源

请求的重定向 :可以重定向到任何资源

WEBRESOURCE257049477ae39c6b499f01c9fcf4c4c5

4. 请求的转发 :/ 代表的是当前WEB应用的根目录

请求的重定向:/ 代表的是当前WEB站点的根目录

跟着视频敲了两个小例子:

例子1:

首先我建立了一个简单的html页面,写了几个超链接

Insert title here

Test

Forward

Redirect

然后建了一个类,继承Servlet,重写doGet方法,这个类就是我最后要去的那个Servlets

package com.demoJavaWeb;

import java.io.IOException;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

@WebServlet("/testServlet")

public class TestServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

System.out.println("TestServlet's doGet");

response.getWriter().append("Served at: ").append(request.getContextPath());

}

}

首先来看转发,我写一个转发的Servlet, 利用request.getRequestDispatcher().forward(request, response)实现转发。

主要的过程就是我在html页面里,点击ForwardServlet,然后通过里边的转发方法,将页面跳转到TestServlet里边,但是观察可以发现,页面上方的地址栏的地址并没有发生改变,即现实的还是ForwardServlet。

package com.demoJavaWeb;

import java.io.IOException;

import javax.servlet.RequestDispatcher;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

@WebServlet("/forwardServlet")

public class ForwardServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

System.out.println("forwardServlet's doGet");

//请求的转发

//1.调用HttpServletRequest的getreQuestDispatcher()方法获取RequestDispatcher对象

//调用getRequestDispatcher()需要传入要转发的地址

String path = "testServlet";

RequestDispatcher requestDispatcher = request.getRequestDispatcher("/"+path);

//2.调用HttpServletRequest的forward(request,response);进行请求的转发

requestDispatcher.forward(request, response);

response.getWriter().append("Served at: ").append(request.getContextPath());

}

}

aef9b8eff9bc38c5fa33008680f72ee8.png

同时控制台会打印出来

14b0f8eb9dfe73098f854c337c4d4574.png

现在来说重定向

我建了一个RedirectServlet,同样继承Servlet,重写doGet()方法,利用response.sendRedirect(path);实现请求的重定向。

package com.demoJavaWeb;

import java.io.IOException;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

@WebServlet("/redirectServlet")

public class RedirectServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

System.out.println("RedirectServlet's doGet 方法。");

//执行请求的重定向,直接调用response.sendRedirect(path)方法

//path为要重定向的地址

String path = "testServlet";

response.sendRedirect(path);

response.getWriter().append("Served at: ").append(request.getContextPath());

}

}

可以看到地址栏变为

cba7f15071c3f908b5f73a940b594a42.png

同时下边打印的

bc26e54f195bb688dbbc50b90c576684.png

例子2

三个jsp文件,分别是a.jsp b.jsp c.jsp

现在想要实现的就是从a.jsp到b.jsp,然后b进行转发和重定向的操作到c,结果是和例子1结果一样的。

pageEncoding="UTF-8"%>

Insert title here

AAA Page

To B Page

pageEncoding="UTF-8"%>

Insert title here

BBB Page

//请求转发的代码

//request.getRequestDispatcher("c.jsp").forward(request,response);

//请求的重定向

response.sendRedirect("c.jsp");

%>

pageEncoding="UTF-8"%>

Insert title here

CCC Page

标签:重定向,request,JAVAEE,response,转发,import,servlet,javax

来源: https://blog.csdn.net/yangluxin763730141/article/details/95938606

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值