文档章节

Java servlet中的forward和redirect

乐在克里特
 乐在克里特
发布于 2017/02/23 14:48
字数 530
阅读 5
收藏 0

一直对Servlet的几种页面跳转方式,理解的糊里糊涂的,今天在网上搜了一把,找到一遍比较好的,记下来,以后看看。 
  跳转分两部分,一是发生在servlet,一是在JSP,其实JSP也就是servlet,不过还是有点差异滴。

Servlet: 
当然,在servlet中,一般跳转都发生在doGet, doPost等方法里面。 
1)  redirect 方式 
response.sendRedirect("/a.jsp"); 
页面的路径是相对路径。sendRedirect可以将页面跳转到任何页面,不一定局限于本web应用中,如: 
response.sendRedirect("http://www.ycul.com");

跳转后浏览器地址栏变化。 
这种方式要传值出去的话,只能在url中带parameter或者放在session中,无法使用request.setAttribute来传递。

2) forward方式 
RequestDispatcher dispatcher = request.getRequestDispatcher("/a.jsp"); 
dispatcher .forward(request, response); 
页面的路径是相对路径。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) 
... 
跳转后浏览器地址栏变化 
如果要跳到不同主机下,跳转后,此语句后面的语句会继续执行,如同新开了线程,但是对response的操作已经无意义了; 
如果要跳到相同主机下,此语句后面的语句执行完成后才会跳转;


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) 
... 
跳转后浏览器地址栏不变,但是只能跳到当前主机下 
此语句后面的语句执行完成后才会跳转

 

http://www.cnblogs.com/chenatu/archive/2011/10/01/2197134.html

© 著作权归作者所有

共有 人打赏支持
乐在克里特
粉丝 15
博文 268
码字总数 394729
作品 0
杭州
程序员
115个Java面试题和答案——终极列表(下)

第一篇讨论了面向对象编程和它的特点,关于Java和它的功能的常见问题,Java的集合类,垃圾收集器,本章主要讨论异常处理,Java小应用程序,Swing,JDBC,远程方法调用(RMI),Servlet和JSP。 ...

LCZ777
2014/04/23
0
0
9.java web的发展 javaweb是什么 J2EE发展历史 规范 J2EE是什么 发展背景 组件标准 J2EE好处作用 Servlet 含义 本质 发展 java在web中的发展 servlet工作流程 java 开发web项目发展 javaBean jsp

javaweb 本质上来说就是使用java 语言来解决企业web应用中一系列技术体系与规范; jdk1.2 playground 此版本中把java技术体系拆分为三个方向 J2SE J2EE J2ME 这个大家都知道 其中之一的J2EE,...

noteless
06/29
0
0
Java EE部分核心技术简介

EJB — JavaEE的基石: 1、 EJB (Enterprise JavaBeans) : 一个Java服务器端组件开发的规范,定义了一个用来开发面向对象分布式应用组件的标准方法,软件厂商根据它来实现EJB服务器。 Java...

顶层设计
2012/08/03
0
0
初识 JSP---(注释/小脚本/声明/指令/动作/内置对象)

注释 java : // / / /** */ html : jsp <%-- --%> jsp注释和html注释的区别 jsp注释对jsp引擎有作用,当jsp引擎看到这个注释后,生产servlet文件是会忽略他 html注释对jsp引擎没有作用,jsp...

姜白告
08/03
0
0
Spring 和 JavaEE的关系

Java EE vs Spring. Or: What is a standard? 什么是JavaEE J2EE是一系列技术标准所组成的平台。JavaEE包含了对一系列标准(接口)的实现。如果你要用这些接口,恐怕要使用JavaEE服务器而不仅...

Finley.Hamilton
2014/11/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

咕泡-Factory设计模式笔记

个人感悟: 设计模式都是处理复杂问题的,如果问题本身很简单,使用设计模式反而累赘,增加了开发的复杂性 遇到最简单的情况,直接 new 如果创建对象的过程简单,但是需要匹配不同情况,返回...

职业搬砖20年
14分钟前
0
0
Java中的锁分类

在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类。介绍的内容如下: 公平锁/非公平锁 可重入锁 独享锁/共享锁 互斥锁/读写锁 乐观锁/悲观锁 分段锁 偏...

Funcy1122
22分钟前
0
0
Ansible随机数

想为你的Ansible剧本取一个随机数?还想在接下来的运行中保持系统的等幂性?这里有一个答案。 假如,你要为一大批服务器设置cron任务,却不想让它们同时启动,你可以这样设置分钟数: minute...

大别阿郎
32分钟前
0
0
SpringCloud之服务注册中心Eureka

本系列介绍的配置均基于 Spring Boot 2.0.1.RELEASE 版本和 Spring Cloud Finchley.SR1 服务注册中心 Spring Cloud 已经帮我们实现了服务注册中心,我们只需要很简单的几个步骤就可以完成。 ...

熊小飞呀
59分钟前
7
1
“Comparison method violates ...”异常的再现方法

前提条件:JDK8 代码: import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.List;public class Test { public stat......

hunterli
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部