几种方式实现Javaweb页面跳转

时间:2022-01-05 12:20:07

背景:
       自己经手的一个java项目要实现带参页面跳转和页面跳转,完成任务后,总结一下自己知道了的几种方式。

实现:

首先我们有两大种方式来实现页面跳转:1、JS(javascript);2、jsp跳转

我们先来说一下简单的js实现页面跳转:好几种,这里简单介绍3个

1、window.location.href="URL";
        2、window.navigate("URL")
        3、window.location.replace("URL")
       还有一些什么self.location和parent.location什么的,自己去探索;相信对于第一种           window.location.href="URL"大家都不陌生,这里就不多做介绍。第二种window.navigate("URL")这种方式只兼容于IE浏览器,不支持火狐啊、谷歌什么的。这里面需要说一下的是window.location.replace(“URL”),我们举例说明一下:

假如我们有三个界面,1.jsp;2.jsp;3.jsp,当我们设置好从1.jsp用herf跳转到2.jsp(前提2上面用了window.location.replace(“3.jsp”),那我们会直接到界面3,貌似看上去和window.location.herf=”URL”差不多,但是当我们点击上一步时,也就是调用window.history.go(-1); wondow.history.back();方法的时候就会知道,我们直接回到界面1了而不是界面2;

  1. <input type="button" value="Location" onclick="Location()"/>
  2. <input type="button" value="Navigate" onclick="Navigate()"/>
  3. <script type="text/javascript">
  4. function Location() {
  5. window.location.href = "http://localhost:2416/Test/Index";
  6. }
  7. function Navigate() {
  8. window.navigate("http://blog.csdn.net/liweizhong193516");
  9. }//只兼容与IE浏览器
  10. function Replace() {
  11. window.replace("http://blog.csdn.net/liweizhong193516");
  12. }
  13. </script>

Test/index界面代码:

  1. <input type="button" value="Location" onclick="Location()"/>
  2. <script type="text/javascript">
  3. function Location() {
  4. window.location.href = "http://blog.csdn.net/liweizhong193516";
  5. }
  6. window.onload = function () {
  7. window.replace("http://blog.csdn.net/liweizhong193516");
  8. }
  9. </script>

拿段代码来说,当我点击按钮,会跳转到Test/index界面,但是因为执行了window.onload方法,会跳转到我的博客界面,当我点击返回是,跳转到的是第一个界面,而不是Test/indes界面

下面说一下jsp实现界面跳转,我们学过的转发和重定向

JSP 跳转方式大约有三种:

1、转发:

  1. <span style="font-size:18px;">request.getRequestDispatcher("1.jsp").forward(request,response);</span>
       在服务器组件收到用户请求后。经过它的处理后有传递给了另一个组件。不修改用户的请求码。各组件处理完之后在返回给用户,例如主页面的框架。
          用户请求——>服务器——>组件1——>组件2——>服务器——>用户

几种方式实现Javaweb页面跳转

这里发出的请求不变
2、重定向:
  1. response.sendRedirect("success.jsp");
       在服务器组件收到用户请求后。经过处理修改用户请求。在返回给用户。这样用户再次使用这个请求就会被动的使用新的请求了。重定向一般是为了防止用户提交完数据后点浏览器刷新或点后退之后产生重复提交)
  用户请求-----》服务器-------》组件------>服务器-------》用户-------》新的请求

几种方式实现Javaweb页面跳转

这里的请求不再是最初的请求,已经被改变了,url地址更换会很明显
注意事项:
1、此语句前不允许有out.flush(),如果有,会有异常:
  1. java.lang.IllegalStateException: Can't sendRedirect() after data has committed to the client
  2. at com.caucho.server.connection.AbstractHttpResponse.sendRedirect(AbstractHttpResponse.java:558)
2、这里跳转后,浏览器地址栏会发生变化,意味着url发生变化
3、要是跳到别的主机上,那语句后面的代码会继续执行,相当于开了一个新的线程,但是对于response就没有意义了,因为你看不到了。
3、<jsp:forward page="URL"/>
注意事项:
1、此语句前也不允许有out.flush(),如果有,会有异常:
2、跳转后浏览器地址栏不变,但是只能跳到当前主机下
3、此语句后面的语句执行完成后才会跳转  
4、跳转后得路径变为当前路径,图片不是绝对路径将无法显示

4、在网上,还看到一个:

  1. response.setStatus(302);
  2. response.setHeader("location","newurl");
这种setHeader要结合setStatus(302)使用,302是一个状态吗,标注浏览器要进行重定向了,同时渔具铅也不允许有out.flush(),如果有,不会报异常,只是不跳转页面;跳转后地址栏发生变化

总结: 通过以上的总结,重要一点的是我们必须要知道的转发和重定向,转发是什么:就是用户通过浏览器发送了http请求,而web服务器接受此请求后调用一个内部方法完成请求处理并来一个转发动作将目标资源发送给用户。在这里转发的路径必须是在同一个web容器下的url,不能转到其他的web路径上去,中间传递是自己容器内部的requeset,所以,可以共享request;浏览器地址栏的url地址不会变化,我们也就感受不出来服务器做了转发。

而重定向:是用户通过浏览器发送了http请求,web服务器接受请求后发送302状态码响应(重定向)并且回应客户浏览器一个新的location,当客户浏览器发现时302响应,自动在发送一个新的http请求,请求的url就是新给的location,服务器再根据这个请求寻找相应资源并发送给用户。这里的回应的location可以是任意的url,同时因为浏览器重新发送了http请求,也就不存在request传递的概念。这时候,客户浏览器上的地址栏显示的新的url(重定向后的路径),用户可以看到地址的变化。所以,重定向行为中,浏览器至少做出了两次访问请求。

几种方式实现Javaweb页面跳转的更多相关文章

  1. 常用的实现Javaweb页面跳转的方式

    我们有两大种方式来实现页面跳转:1.JS(javascript):2.jsp跳转 先说jsp(金j三s胖p):1.转发:request.getRequestDispatcher("1.jsp ...

  2. 使用 JavaScript 的 HTML 页面混合、JavaScript 文件引用和 HTML 代码嵌入 3 种方式在 HTML 页面上打印出&OpenCurlyDoubleQuote;点击我进入到百度首页”的超链接

    查看本章节 查看作业目录 需求说明: 使用 JavaScript 的 HTML 页面混合.JavaScript 文件引用和 HTML 代码嵌入 3 种方式在 HTML 页面上打印出"点击我进 ...

  3. MarkDown技巧:两种方式实现页内跳转

    MarkDown技巧:两种方式实现页内跳转 本人邮箱:JohnTsai.Work@gmail.com,欢迎交流讨论. 欢迎转载,转载请注明网址:http://www.cnblogs.com/JohnT ...

  4. 2种方式解决vue路由跳转未匹配相应路由避免出现空白页面或者指定404页面

    https://www.cnblogs.com/goloving/p/9254084.html https://www.cnblogs.com/goloving/p/9254084.html 1.路由 ...

  5. vue-router 路由传参的几种方式,刷新页面参数丢失

    常见场景:点击列表详情,跳转到详情内页,传递id参数获取详情数据. 我们先来看看路由跳转的几种方式: 1.通过params方式传参 通过$route.push的path携带参数方式 // 路由配置 { ...

  6. 一种storyboard&plus;swift实现页面跳转的方法

    如题.视图控制器A显示视频列表:视图控制器B显示视频详情,现希望将两个视图关联起来,点击A中某个视频跳转到B. 作为iOS小菜鸟我首先搜索了一下关键词 “tableviewcell 跳转”,然而搜索结 ...

  7. SpringMVC 注解方式进行配置页面跳转

    @ 目录 修改IndexController 修改springmvc-servlet.xml 效果 修改IndexController 在类前面加上@Controller 表示该类是一个控制器 在方法 ...

  8. Flex页面跳转的五种实现方式

    Flex页面跳转有很多值得学习的地方,本文向大家介绍一下Flex页面跳转的几种方式,主要包括五种方式,这里为大家一一介绍. AD:   在学习Flex的过程中,你可能会遇到Flex页面跳转的概念,这里 ...

  9. web页面跳转的几种方式

    可用客户端触发或服务端触发的方式来实现页面跳转. 客户端触发 方式一:使用Javascript 利用window.location对象的href属性.assign()方法或replace()方法来实现 ...

随机推荐

  1. 如何用注解简化SSH框架

    一.简化代码第一步,删除映射文件,给实体类加上注解 @Entity //声明当前类为hibernate映射到数据库中的实体类 @Table(name="news") //声明tab ...

  2. 为什么Erlang比C慢那么多倍?

    Erlang 一直以慢“著称”,本文就来看看 Erlang 慢在什么地方,为什么比实现同样功能的 C 语言程序慢那么多倍.Erlang 作为一种虚拟机解释的语言,慢是当然的.不过本文从细节上分析为什么 ...

  3. Java Day 14

    多线程--线程间通信 对同一个资源进行处理,但是任务却不同 线程间通信--等待唤醒机制 1.wait();   线程处于冻结状态,被wait线程存储在线程池中 2.notify(); 从线程池唤醒一个 ...

  4. &lbrack;原创&rsqb;-IIS7&period;5优化,支持同时10万个请求

    背景:        IIS7.5是微软推出的最新平台IIS,性能也较以前有很大的提升,但是默认的设置配不适合很大的请求.但是我们可以根据实际的需要进行IIS调整,使其性能更佳,支持同时10万个请求. ...

  5. 练习-libev和pyev示例

    事件循环,IO复用,还是理解深刻一点好. 比较LIBEV和PYEV,发现PYTHON库只是对LIBEV作了简单的语法转换. 到了这个层次,就一个字:DIAO!!! libev的C版: #include ...

  6. Ubuntu 13&period;10 下安装node

    1.首先更新Ubuntu在线包:sudo apt-get update && sudo apt-get dist-upgrade, 2.默认Ubuntu已经安装python的,具体版本 ...

  7. css案例学习之class执行的顺序

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. Android滑动列表&lpar;拖拽,左滑删除,右滑完成&rpar;功能实现(2)

    ItemTouchHelper类 之前我们实现了滑动列表的一些基本功能,为了实现更多的效果,我们来仔细看一下ItemTouchHelper中的类: ItemTouchHelper.SimpleCall ...

  9. 自适应reset&period;js布局 用于手机端页面编写

    以下是reset.js具体内容,是从淘宝网站拔下来的.把它存为js文件引入html里,它的默认尺寸是iphone4的分辨率也就是320*480,美工给你的图不管多少尺寸用ps量图后像素值(px)除以4 ...

  10. python自动化开发-&lbrack;第十二天&rsqb;-前端Css

    CSS基本语法 CSS 规则由两个主要的部分构成:选择器,以及一条或多条声明. selector { property: value; property: value; ... property: v ...