Servlet页面跳转实现方法的区别

Servlet页面跳转实现方法的区别


http://developer.51cto.com/art/200907/133803.htm



本文向您介绍Servlet页面跳转实现方法的几种区别,包括Servlet和JSP中的不同实现,比如Servlet中的redirect方式和forward方式得区别等。


一直对Servlet页面跳转的几种方式理解的糊里糊涂的,今天在网上搜了一把,找到一遍比较好的,记下来,以后看看。


Servlet页面跳转分两部分,一是发生在Servlet,一是在JSP,其实JSP也就是servlet,不过还是有点差异滴。


Servlet:


当然,在servlet中,一般跳转都发生在doGet, doPost等方法里面。


1)  redirect 方式


response.sendRedirect("/a.jsp");


页面的路径是相对路径。sendRedirect可以将页面跳转到任何页面,不一定局限于本web应用中,如:


response.sendRedirect("URL");


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


这种方式要传值出去的话,只能在url中带parameter或者放在session中,无法使用request.setAttribute来传递。


2) forward方式


RequestDispatcher dispatcher = request.getRequestDispatcher("/a.jsp");


dispatcher .forward(request, response);


Servlet页面跳转的路径是相对路径。forward方式只能跳转到本web应用中的页面上。


跳转后浏览器地址栏不会变化。


使用这种方式跳转,传值可以使用三种方法:url中带parameter,session,request.setAttribute


JSP:


1)  response.sendRedirect();


和servlet的response.sendRedirect()方式一样。


此语句前不允许有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)
... 
跳转后浏览器地址栏变化


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


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


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


此语句前不允许有out.flush(),如果有,页面不会跳转。


跳转后浏览器地址栏变化


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


3)  <jsp:forward page="" />


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


java.lang.IllegalStateException: forward() not allowed after buffer has committed. 
at com.caucho.server.webapp.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:134)
at com.caucho.server.webapp.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:101)
at com.caucho.jsp.PageContextImpl.forward(PageContextImpl.java:836) 
... 
Servlet页面跳转后浏览器地址栏不变,但是只能跳到当前主机下


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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/544976.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java Double类shortValue()方法与示例

双类shortValue()方法 (Double class shortValue() method) shortValue() method is available in java.lang package. shortValue()方法在java.lang包中可用。 shortValue() method is used to return the value denoted by this Double object converted to type short (by c…

这个 bug 让我更加理解 Spring 单例了

谁还没在 Spring 里栽过跟头呢&#xff0c;从哪儿跌倒&#xff0c;就从哪儿睡一会儿&#xff0c;然后再爬起来。讲点儿武德 这是由一个真实的 bug 引起的&#xff0c;bug 产生的原因就是忽略了 Spring Bean 的单例模式。来&#xff0c;先看一段简单的代码。public class TestS…

mysql优化--叶金荣老师讲座笔记

copy to tmp table执行ALTER TABLE修改表结构时建议&#xff1a;凌晨执行Copying to tmp table拷贝数据到内存中的临时表&#xff0c;常见于GROUP BY操作时建议&#xff1a;创建索引Copying to tmp table on disk临时结果集太大&#xff0c;内存中放不下&#xff0c;需要将内存…

JS判断文本框中只能输入数字和小数点

http://liva-zheng.iteye.com/blog/1733827 1.文本框只能输入数字(不包括小数点) <input οnkeyup"this.valuethis.value.replace(/\D/g,)" onafterpaste"this.valuethis.value.replace(/\D/g,)"> 2.只能输入数字和小数点. <input οn…

java 方法 示例_Java集合asLifoQueue()方法和示例

java 方法 示例集合类asLifoQueue()方法 (Collections Class asLifoQueue() method) asLifoQueue() Method is available in java.lang package. asLifoQueue()方法在java.lang包中可用。 asLifoQueue() Method is used to represent the given deque as a Lifo queue (LIFO me…

废弃fastjson!大型项目迁移Gson保姆级实战

前言本篇文章是我这一个多月来帮助组内废弃fastjson框架的总结&#xff0c;我们将大部分Java仓库从fastjson迁移至了Gson。这么做的主要的原因是公司受够了fastjson频繁的安全漏洞问题&#xff0c;每一次出现漏洞都要推一次全公司的fastjson强制版本升级&#xff0c;很令公司头…

网页如何做到适应在手机上浏览

http://bbs.php100.com/read-htm-tid-482066.html 目前有很多不错的mobile开发框架可以使用&#xff0c;这些框架已经为手机端的特殊性提供了很好的支持和效果插件&#xff0c;比如&#xff1a;jquery mobile、kendoui等~~ 不过&#xff0c;谢谢框架因为其开源性或商业化&…

学到了!MySQL 8 新增的「隐藏索引」真不错

MySQL 8.0 虽然发布很久了&#xff0c;但可能大家都停留在 5.7.x&#xff0c;甚至更老&#xff0c;其实 MySQL 8.0 新增了许多重磅新特性&#xff0c;比如栈长今天要介绍的 "隐藏索引" 或者 "不可见索引"。隐藏索引是什么鬼&#xff1f; 隐藏索引 字面意思…

Java ClassLoader findLibrary()方法与示例

ClassLoader类findLibrary()方法 (ClassLoader Class findLibrary() method) findLibrary() method is available in java.lang package. findLibrary()方法在java.lang包中可用。 findLibrary() method is used to find the absolute pathname of the given native library. f…

iOS开发-自定义UIAlterView(iOS 7)

App中不可能少了弹框&#xff0c;弹框是交互的必要形式&#xff0c;使用起来也非常简单&#xff0c;不过最近需要自定义一个弹框&#xff0c;虽然iOS本身的弹框已经能满足大部分的需求&#xff0c;但是不可避免还是需要做一些自定义的工作。iOS7之前是可以自定义AlterView的&am…

jsp中redirect和forward的区别

在网上看到一些帖子&#xff0c;总结了一些区别&#xff0c;可以从以下几个方面来看&#xff1a;1.从地址栏显示来说 forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来…

Spring 事务失效的 8 大场景,面试官直呼666...

前几天发了一篇文章里面有一个关于事务失效的问题&#xff1a;用 Spring 的 Transactional 注解控制事务有哪些不生效的场景&#xff1f;其中有个热心粉丝留言分享了下&#xff0c;我觉得总结得有点经验&#xff0c;给置顶了&#xff1a;但是我觉得还是总结得不够全&#xff0c…

python 示例_Python条件类| release()方法与示例

python 示例Python Condition.release()方法 (Python Condition.release() Method) release() is an inbuilt method of the Condition class of the threading module in Python. release()是Python中线程模块的Condition类的内置方法。 Condition class implements conditio…

Java BigInteger类| hashCode()方法与示例

BigInteger类hashCode()方法 (BigInteger Class hashCode() method) hashCode() method is available in java.math package. hashCode()方法在java.math包中可用。 hashCode() method is used to return the hash code value of this BigInteger. hashCode()方法用于返回此Big…

认真聊一下MySQL索引的底层实现!

前言当我们发现SQL执行很慢的时候&#xff0c;自然而然想到的就是加索引&#xff0c;当然他也是高频的面试问题&#xff0c;所以今天我们一起来学习一下MySQL索引的底层实现&#xff1a;B树。树简介、树种类B-树、B树简介B树插入B树查找B树删除B树经典面试题树的简介树的简介树…

js的四舍五入

Math.ceil求最小的整数但不小于本身. Math.round求本身的四舍五入。 Math.floor求最大的整数但不大于本身.

Java BigInteger类| bitCount()方法与示例

BigInteger类的bitCount()方法 (BigInteger Class bitCount() method) bitCount() method is available in java.math package. bitCount()方法在java.math包中可用。 bitCount() method is used to count the number of bits in 2’s complement denotation of this BigIntege…

head first python(第三章)–学习笔记

1.介绍基础文件&#xff0c;输入&#xff0c;输出 open() 打开文件&#xff0c;一次传入一行数据&#xff0c;可以结合for循环和readline()来使用 close() 用来关闭open打开的文件 the_file open(sketch.txt)the_file.close()例子&#xff1a; >>> data open(/root/…

最新大厂面试真题集锦

年后又是一波求职季&#xff0c;正是“金三银四”这个求职黄金期&#xff0c;很多人扎堆在这个时间段跳槽&#xff0c;找工作&#xff0c;程序员也不例外。春节刚过&#xff0c;各公司企业都开始启动了新一年的招聘计划&#xff0c;招聘岗位倍增&#xff0c;求职人数远超于岗位…

java.lang.IllegalThreadStateException 线程运行报错

写程序线程再运行第二遍的时候报java.lang.IllegalThreadStateException。发现一个Thread不能重复用start方法。 解决方法&#xff1a; 1、将extends Thread线程类改成implements Runnable&#xff0c;或者将Thread a new Thread改为Runnable a new Runnable&#xff1b; …