转发,重定向(forward,sendRedirect)传输数据

简介: 转发,重定向(forward,sendRedirect)传输数据

前言

我在学习jsp,servlet的时候研究forword,sendRedirect区别和传输数据,遇到了中文数据乱码。经过一番研究和查阅,总结了一些知识点。


一、转发操作

1.介绍

request.getRequestDispatcher("/目标URL").forward(request,response);

(1) forward表示一次请求,是在服务器内部跳转,可以共享同一次request作用域中的数据

  • request作用域:拥有存储数据空间的,作用范围是一次请求有效(一次请求可以经过多次转发)
    可以将数据存入request后,在一次请求过程中的任何位置进行获取
    可传递任何数据(基本数据类型、对象、数组、集合等)
  • 存数据:request.setAttribute(key,value);
    以键值对形式存储在request作用域中。key为String类型,value为Object类型
  • 取数据:request.getAttribute(key);
    通过String类型的key访问Object类型的value
    (2)特点
  • 转发是服务器行为
  • 转发是浏览器制作了一次访问请求
  • 转发浏览器地址不变
  • 转发两次跳转之间传输的信息不会丢失,所以可以通过request进行数据的传递

2.数据传递

这里以两个servlet类之间数据的传递举例。

//这是传递数据的servlet类(传递username="张三")的部分代码
      request.setAttribute("username","张三");
        request.getRequestDispatcher("/SecondServlet").forward(request,response);
   //这是接收数据的servlet类的部分代码
   response.setContentType("text/html;charset=utf-8");//要是在servlet调用时输出,需要设置一下编码
    Object s=request.getAttribute("username");

注意:如果你在页面上进行输出显示有乱码的话设置一下当前页面的编码

接收数据的方法是getAttribute()方法,注意与下面sendRedirect区分。

二、重定向操作

1.介绍

sendRedirect("目标URL")

(1)sendRedirect跳转时,地址栏改变,代表客户端重新发送的请求。属于两次请求

  • response没有作用域,两次request请求中的数据无法共享
  • 传递数据:通过URL的拼接进行数据传递(“/SendServlet/username=zhangsan”)
  • 获取数据:request.getParameter(“username”)
    (2)特点
  • 重定向是客户端行为
  • 重定向是浏览器做了至少两次的访问请求
  • 重定向浏览器地址改变
  • 重定向两次跳转之间传输的数据的信息会丢失(request范围)
  • 重定向可以指向任何资源,包括当前应用程序中的其他资源、同一个站点上的其他应用程序中的资源、其他站点的资源

2.数据传递

这里以两个servlet类为例子

如果传递的数据是英文字符串,数字,则不需要调用URLREcoder的encode方法,直接username=值

//这是传递数据的servlet类(传递username="张三")的部分代码
      response.sendRedirect("SecondServlet?username="+ URLEncoder.encode("张三","utf-8"));
   //这是接收数据的servlet类的部分代码
   response.setContentType("text/html;charset=utf-8");//要是在servlet调用时输出,需要设置一下编码
     String s=request.getParameter("username");

三、转发和重定向的区别

总结

以上就是我这次总结的问题,希望可以有所帮助。

相关文章
|
5天前
|
Java 数据安全/隐私保护
response对象的转发和重定向
response对象的转发和重定向
12 0
|
5天前
|
前端开发
请求转发和重定向的区别
请求转发和重定向的区别
39 0
|
5天前
|
存储 数据处理
Request请求转发与Respones请求重定向有什么区别?
Request请求转发与Respones请求重定向有什么区别?
|
5月前
|
Java Spring
SpringMVC中转发与重定向(redirect与forward)实践实例
SpringMVC中转发与重定向(redirect与forward)实践实例
57 0
|
11月前
重定向和请求转发的区别
重定向和请求转发的区别
65 0
|
11月前
|
存储 Java 应用服务中间件
一文了解转发与重定向
一文了解转发与重定向
79 0
QGS
|
容器
浅谈SpringMVC之转发与重定向
SpringMVC转发与重定向的使用 转发:由web服务器跳转(可携带数据集合)。 重定向:由浏览器跳转(跳转页面)。
QGS
84 0
|
前端开发
请求转发与请求重定向
请求转发与请求重定向
197 0
请求转发与请求重定向
|
前端开发 Java
重定向与请求转发
介绍JavaWeb中的实现页面跳转的同卵双胞胎兄弟—重定向与请求转发以及代码实现流程
重定向与请求转发