前言

html ,js 可以实现页面跳转。

jsp , asp, php 也有各自页面跳转与重定向的方式。

下文针对js 和jsp 的页面跳转实现方式进行一个总结。

html 页面跳转方式

可以使用html 的meta 标签实现页面的跳转。

<!--Add by oscar999-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Author" CONTENT="oscar999">
<meta http-equiv="refresh" content="0; URL=http://www.csdn.net">
<script>
</script>
</HEAD><BODY>
This is Test Page
</BODY>
</HTML>

这种用法比较常使用在:

新旧系统升级的状况下, 暂时保留旧系统,通过域名进入时自动转到新系统中。

JS 页面跳转方式

1. 使用window.location = "newurl"

<!--Add by oscar999-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Author" CONTENT="oscar999"></HEAD><BODY>
This is Test Page.
<script>
window.location="http://www.csdn.net";
</script>
</BODY>
</HTML>

也可以使用 window.location.href = "http://www.csdn.net";

2. 使用 window.navigate

<script>
window.navigate("http://www.csdn.net");
</script>

3.  window.loction.replace方式实现页面跳转

<script language="javascript">
    window.location.replace("target.aspx");
</script>
有3个jsp页面(1.aspx, 2.aspx, 3.aspx),进系统默认的是1.aspx,当我进入2.aspx的时候, 2.aspx里面用window.location.replace("3.aspx");

与用window.location.href ("3.aspx");

从用户界面来看是没有什么区别的,但是当3.aspx页面有一个"返回"按钮,调用window.history.go(-1); wondow.history.back();方法的时候,一点这个返回按钮就要返回2.aspx页面的话,区别就出来了,当用 window.location.replace("3.aspx");连到3.aspx页面的话,3.aspx页面中的调用 window.history.go(-1);wondow.history.back();方法是不好用的,会返回到1.aspx。

JSP跳转方式

JSP 跳转方式大约有三种:

1. response.sendRedirect(“newurl”);

-- 此语句前不允许有out.flush(),如果有,会有异常:
java.lang.IllegalStateException: Can't sendRedirect() after data has committed to the client.
at com.caucho.server.connection.AbstractHttpResponse.sendRedirect(AbstractHttpResponse.java:558)

--跳转后浏览器地址栏变化

--如果要跳到不同主机下,跳转后,此语句后面的语句会继续执行,如同新开了线程,但是对response的操作已经无意义了

如果要跳到相同主机下,此语句后面的语句执行完成后才会跳转;

2. response.setHeader("Location","newurl");

    response.setStatus(302);response.setHeader("location","newurl");

这种使用方式要结合 setStatus(302),  302 这个状态码就是告诉浏览器要重定向了。

  1. 此语句前不允许有out.flush(),如果有,页面不会跳转。
  2. 跳转后浏览器地址栏变化
  3. 此语句后面的语句执行完成后才会跳转


3. <jsp:forward page="newurl" />

此语句前不允许有out.flush(),如果有,会有异常:

跳转后浏览器地址栏不变,但是只能跳到当前主机下

此语句后面的语句执行完成后才会跳转

跳转后得路径变为当前路径,图片不是绝对路径将无法显示

例子:

整个简单的例子:  两个文件 a.jsp 和 b.jsp .

<!-- by oscar999 -->
<!-- This is a.jsp -->
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
Before: This is a.jsp! <br>
<%//response.sendRedirect("b.jsp");//response.setStatus(302);//response.setHeader("location","b.jsp");%><jsp:forward page="b.jsp"/>
After: This is a.jsp!
</body>
</html>

对于jsp 而言, 就需要嚼一嚼Redirect 和 forward 的差别了。

就字面意思而已: Redirect 翻译成重定向, forward翻译成转发。

两者的区别是:

重定向是客户端行为,转发是服务器行为

重定向过程:客户浏览器发送http请求——》web服务器接受后发送302状态码响应及对应新的location给客户浏览器——》客户浏览器发现是302响应,则自动再发送一个新的http请求,请求url是新的location地址——》服务器根据此请求寻找资源并发送给客户。在这里location可以重定向到任意URL,既然是浏览器重新发出了请求,则就没有什么request传递的概念了。在客户浏览器路径栏显示的是其重定向的路径,客户可以观察到地址的变化的。重定向行为是浏览器做了至少两次的访问请求的。

转发过程:客户浏览器发送http请求——》web服务器接受此请求——》调用内部的一个方法在容器内部完成请求处理和转发动作——》将目标资源发送给客户;在这里,转发的路径必须是同一个web容器下的url,其不能转向到其他的web路径上去,中间传递的是自己的容器内的request。在客户浏览器路径栏显示的仍然是其第一次访问的路径,也就是说客户是感觉不到服务器做了转发的。转发行为是浏览器只做了一次访问请求。

类别
概念
共享数据
应用
Redirect
URL重新定向:可以是任意的URL
不能共享request里面的数据
一般用于用户注销登录时返回主页面和跳转到其它的网站等等
Forward
页面的转发:只能是同一个Web应用程序的其他Web组件
转发页面和转发到的页面可以共性request里面的数据
一般用于用户登录的时候根据角色转发到相应的模块等等

有个例子说明两者的区别很生动:

假设你去办理某个执照

重定向:你先去了A局,A局的人说:“这个事情不归我们管,去B局”,然后,你就从A退了出来,自己乘车去了B局。

转发:你先去了A局,A局看了以后,知道这个事情其实应该B局来管,但是他没有把你退回来,而是让你坐一会儿,自己到后面办公室联系了B的人,让他们办好后,送了过来。

页面跳转与重定向(之一)相关推荐

  1. 页面跳转与重定向(之二)

    前言 这一篇是接着上一篇的继续 页面跳转与重定向(之一) 在上一篇中, 介绍了在html,js 和JSP中如何跳转和重定向. 基本是在页面层级进行页面的跳转, 进入一个页面后跳入另一个页面. 这一篇将 ...

  2. springboot 直接转发调用_springboot-过滤器的页面跳转【重定向与请求转发】-异常报错...

    springboot中,增加过滤器后,页面重定向跳转与请求转发跳转,都出现报错. 求大佬帮忙解答,谢谢! 一.页面跳转代码: 1.重定向代码: response.sendRedirect(" ...

  3. TP5的页面跳转与重定向

    1.页面跳转的目标有哪些? 调用方法: $this->success('提示','地址'); $this->error('提示','地址'); index.php文件内容: <?ph ...

  4. js页面跳转或重定向

    微信小程序开发交流qq群   173683895    承接微信小程序开发.扫码加微信. 正文: 页面重定向推荐的4种方式: <!DOCTYPE html> <html>< ...

  5. flask重定向生成html,Flask实战第5天:页面跳转和重定向

    GET和POST请求 在网络请求中有许多请求方式,比如GET, POST, DELETE, PUT等,最常用的就是GET和POST GET 只会在服务器上获取资源,不会更改服务器的状态,这种请求方式推 ...

  6. 【Python】Flask框架系列(一):安装、页面跳转/重定向、模板、逻辑语句、过滤器、继承/使用block、url链接/加载静态资源

    从下载安装开始的所有笔记. 其实 Flask 的示例程序算是 MVC 模式的. Model 是 ORM, V 是 Template, C 是 url route 和 request handler. ...

  7. JavaWeb之页面跳转数据库连接

    开发web项目必不可少的操作:页面跳转和数据库连接,想学的来看哦~♥♥♥ 渴求知识的你 目录 页面跳转 转发 重定向 转发与重定向的区别 数据库连接 JDBC JSP中连接数据库 页面跳转 转发 对应 ...

  8. tp控制器进阶页面跳转重定向、

    1.页面跳转与重定向(jump.php) a.控制器内跳转: 访问: b.跨控制器跳转: 访问: c.跨模块跳转:demo模块下的控制器类login 访问: d.跳转到外部地址: 访问: e.调用地址 ...

  9. php header 重定向 url不变_PHP实现页面跳转功能

    PHP跳转到指定页面的问题通常都会建设网站需求上看到,比如我们需要从一个页面跳转到另一个页面来实现某个功能或者效果.其实在PHP中进行页面跳转是有多种方法的,那么这篇文章就给大家介绍下,有哪些方法可以 ...

最新文章

  1. FlowVisor入门教程
  2. 第二章:2.4 卷积性质
  3. 编程思想:面向对象和面向过程
  4. Python的发展方向
  5. 带中文字库的12864LCD显示程序
  6. java 中的锁 aqs_Java并发编程系列-(4) 显式锁与AQS
  7. 区块链教育平台Metisedu将于4月推出beta版本
  8. NPOI导出Excel2007-xlsx
  9. 阿里淘系21春招实习过经
  10. 易源接口showapi的使用
  11. android ntp服务器配置
  12. String类的getBytes()方法
  13. OneDrive 挂载为本地磁盘Ubuntu
  14. Laravel学习记录--数据填充
  15. java裁剪图片_Java实现图片的裁剪
  16. php刷脸登录,PHP实现微信小程序人脸识别刷脸登录功能
  17. PostgreSQL密码重置方法
  18. NLP入门--Word2Vec(CBOW)实战
  19. Java利用多线程编程实现一个正在旋转的地球
  20. SQLSERVER2019最新补丁下载地址

热门文章

  1. vijos 1464 积木游戏 DP
  2. windows 下安装Python
  3. Oracle闪回技术
  4. CPU异常分析(以trap00为例)
  5. VS2015解决方案资源管理器空白,不显示内容
  6. 【报告分享】2021年度中国虚拟数字人影响力指数报告.pdf(附下载链接)
  7. 微软新闻推荐:深度学习与 NLP 的融合, 让 Windows 11“新闻与兴趣”知你所需...
  8. 【干货】一张蓝图九大行动领域,实现AI赋能的企业转型-IBM.pdf(附下载链接)...
  9. leetcode力扣338. 比特位计数
  10. 复旦邱锡鹏组最新综述:A Survey of Transformers!