1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Request请求转发和重定向

Request请求转发和重定向

时间:2023-12-19 18:23:19

相关推荐

Request请求转发和重定向

Request请求转发和重定向

一,Request请求转发

(一),请求转发:在服务器内部的资源跳转的方式

我们在实际开发中,需要写不同的servlet,每个人servlet完成不同的功能,当我们访问Aservlet的时候, Aservlet实现部分功能后需要跳转到一个新的Bservlet里面,这就是资源跳转的方式,就用到了请求转发。

(二),写法

1.通过request对象获取请求转发器对象

创建request的getRequsetDispatche对象,参数为转发的访问路径。

⒉.调用dispatcher对象的 forword(),参数为request和response

代码展示:

1,A servlet (关羽)

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;import java.io.IOException;@WebServlet("/test02")public class test02_Servlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println("我乃关二爷,需要找三弟借纹银五两,全是为了买破鞋的大哥");//1,获取request的请求转发器 内部参数为转发的路径RequestDispatcher dispatcher = request.getRequestDispatcher("/test03");//2,调用转发器对象 传入参数request和responsedispatcher.forward(request,response);}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request, response);}}

2,B servlet (张飞)

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("/test03")public class test03_Servlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println("我乃燕人张飞,借你五两");}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request, response);}}

运行结果:

(三)转发特点

1,浏览器地址栏不发生变化

2,只能转发到当前服务器的内部资源,不能转发至服务器外部资源

3,转发只是一次请求,多个资源之间使用同一个请求(可点开浏览器右键检查,查看network all查看请求)

二,数据共享

以上图为例,当A servlet工作了一部分后,需要转发至B servlet的时候,需要告诉B,A工作到了什么地步,这时就需要进行数据的传输。这即是数据共享。

数据共享,就用到了域对象。所谓域对象,就是一个有作用范围的对象,可以在范围呢共享数据。

1,Request数据的作用域:

一次请求的范围,数据可进行传输的范围,一般用于请求转发的多个资源中共享数据。

2,数据共享的方法:

void setAttribute(String name,Obj obj):存储数据

Obj getAttribute(String name):通过名字获取值

void removeAttribute(String name):通过键名来移除键值对

3,代码展示:

①,A servlet (关羽)

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;import java.io.IOException;@WebServlet("/test02")public class test02_Servlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println("我乃关二爷,需要找三弟借纹银五两,全是为了买破鞋的大哥");//域对象共享数据 request.setAttribute("键","值")request.setAttribute("money","5两");//1,获取request的请求转发器 内部参数为转发的路径RequestDispatcher dispatcher = request.getRequestDispatcher("/test03");//2,调用转发器对象 传入参数request和responsedispatcher.forward(request,response);}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request, response);}}

②,B servlet (张飞)

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("/test03")public class test03_Servlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//通过名字获取值 (通过money获取到五两)Object money = request.getAttribute("money");System.out.println("Money:"+money);System.out.println("我乃燕人张飞,借你五两");}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request, response);}}

运行结果:

注:数据共享的作用域是一次请求范围,所以A和B必须在同一个请求中。

三,重定向

(一),重定向就是资源跳转的一种方式

(二),写法

1,方法1:

通过设置状态码,设置请求路径

步骤:

①,新建两个servlet文件

②,设置响应头location 值为servlet2的路径

2,方法2:

(三)代码展示:

1, servlet1

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("/test04")public class test04_Servlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println("test04来了.....");//方法一response.setStatus(302);//设置状态码 302response.setHeader("location","/test05"); //设置location,值为servlet2路径//方法二// response.sendRedirect("/test05");//将状态码自动封装起来}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request, response);}}

2,servlet2

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("/test05")public class test05_Servlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println("重定向到了servlet05");}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request, response);}}

运行结果:

(四)重定向特点

通过和转发的特点进行对比

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。