`

JSP中动态INCLUDE与静态INCLUDE,forward与sendredirect的区别

 
阅读更多

目录

            1.Jsp 动态include和静态include
            2.forward和sendRedirect
                2.1 总结一
                2.2 总结二

 

Jsp 动态include和静态include

 

  •     动态INCLUDE用jsp:include动作指令 <jsp:include page="included.jsp" flush="true" />它总是会检查所含文件中的变化,在转换为servlet 时不会被编译的,只有执行到该代码时才会被动态的编译载入,同时生成多个class和java,和包含页使用不同的request对象,但可以取得包含页的request对象参数,适合用于 包含动态页面,并且可以带参数.
  •     静态INCLUDE用include 编译指令,定不会检查所含文件的变化,适用于包含静态页面<%@ include file="included.htm" %>,jsp引擎会在jsp程序转换时期先把file 属性指定的文件包含进来,然后开始执行转换及编译的工作。(原封不动的把文件代码copy到该位置,然后进行转换和编译,只生成一个java和class),因此包含页面和被包含页面使用同一个request对象。不能传递参数.用的比动态多

 
    <%@ include file=" "%>

    <jsp:include page=" " flush="true"/>

 

    前者是指令元素、后者是行为元素.
    通常当应用程序中所有的页面的某些部分(例如标题、页脚和导航栏)都相同的时候,我们就可以考虑用include.具体在哪些时候用<%@ include file=" "%>,哪些时候用<jsp:include page=" " flush="true"/>.这种形式.首先要明白的是它们之间的区别.
    <%@ include file=" "%>,jsp的include指令元素读入指定页面的内容.并把这些内容和原来的页面融合到一起.(这个过程是在翻译阶段:也就是jsp被转化成servlet的阶段进行的.

    由此我们就会知道:jsp页面是把include指令元素所指定的页面的实际内容(也就是代码段)加入到引入它的jsp页面中,合成一个文件后被jsp容器将它转化成servlet.可以看到这时会产生一个临时class文件和一个java文件.

    由于在主页面被请求时,这些页面还没有被引入到主页面中,所以你可以对page属性使用一个请求时属性值,以便根据运行时的情况来决定要引入哪一个页面.还可以添加一些将被引入的页面读取的请求参数.

  1. <jsp:include page="<%=pageSelectedAtRuntime%>" flush="true" >  
  2. <jsp:param name="fitstParamer" value="firstValue">  
  3. <jsp:param name="lastParamer" value="lastValue">  
  4. </jsp:include>  

    如果修改了被引入的jsp页面,那么可以立刻使用该页面的最新版本,这是因为对待被引入的页面的方式与对待由浏览器直接调用的jsp页面的方式完全相同.即容器检测页面的变化,并自动进入翻译阶段,以得到页面的最新版本.
    (注意,include行为元素同jsp其它元素一样,没有行为体时要以"/"结束.就像下面这样.
    <jsp:include page="<%=pageSelectedAtRuntime%>" flush="true" />)
    以下是对include 两种用法的区别
    主要有两个方面的不同;
    一:执行时间上:
    <%@ include file="relativeURI"%> 是在翻译阶段执行
    <jsp:include page="relativeURI" flush="true" /> 在请求处理阶段执行.
    二:引入内容的不同:
    <%@ include file="relativeURI"%> 引入静态文本(html,jsp),在JSP页面被转化成servlet之前和它融和到一起.

    <jsp:include page="relativeURI" flush="true" />引入执行页面或servlet所生成的应答文本.

 

 

forward和sendRedirect

 

 总结一:

response.sendRedirect() 执行过语句后后面的内容仍然执行,可以转到服务器以外的地址,可以通过url传递参数?a=value ,客户端又向服务器发送了一次请求

<jsp:forward> 执行过后后面的不再执行,中间可以转发多次,但请求就一次,可以传递参数,可以取得转发页面的参数

 

  1.  <jsp:forward page="">  
  2.     <jsp:param value="test1" name="name1"/>  
  3. </jsp:forward>  


 

 总结二:

 

一、调用方式

 

我们知道,在servlet中调用转发、重定向的语句如下:

 

request.getRequestDispatcher("new.jsp").forward(request, response);   //转发到new.jsp

 

response.sendRedirect("new.jsp");   //重定向到new.jsp

 

在jsp页面中你也会看到通过下面的方式实现转发:

 

<jsp:forward page="apage.jsp" />

 

当然也可以在jsp页面中实现重定向:

 

<%response.sendRedirect("new.jsp"); %> //重定向到new.jsp

 

二、本质区别

 

解释一

 

一句话,转发是服务器行为,重定向是客户端行为。为什么这样说呢,这就要看两个动作的工作流程:

 

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

 

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

 

解释二

 

重定向,其实是两次request

 

第一次,客户端request   A,服务器响应,并response回来,告诉浏览器,你应该去B。这个时候IE可以看到地址变了,而且历史的回退按钮也亮了。重定向可以访问自己web应用以外的资源。在重定向的过程中,传输的信息会被丢失。

 

例子:

 

response.sendRedirect("loginsuccess.jsp");

 

请求转发是服务器内部把对一个request/response的处理权,移交给另外一个

 

对于客户端而言,它只知道自己最早请求的那个A,而不知道中间的B,甚至C、D。传输的信息不会丢失。

 

例子:

 

       RequestDispatcher dis=request.getRequestDispatcher(“loginsuccess.jsp”);

 

       Dis.forward(request,response);

 

解释三

 

假设你去办理某个执照

 

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

 

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

 

 

 

 

 转自:http://blog.csdn.net/ljfbest/article/details/7521797

            http://blog.163.com/tsing_hua/blog/static/139622224201101110836644/

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    Jsp面试题目.doc

    JSP 中的 INCLUDE 机制有两种:动态 INCLUDE 和静态 INCLUDE。动态 INCLUDE 用 jsp:include 动作实现,总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。静态 INCLUDE 用 include 伪码实现,不会...

    JSP期末考试题.pdf

    13) JSP中的include指令和jsp:include动作有什么区别?(多选题) a) include指令在翻译阶段处理,而jsp:include动作在请求处理阶段处理 b) include指令包含的页面在编译时合并,而jsp:include动作允许动态包含...

    servlet和JSP面试题答案.pdf

    在 JSP 中,有两种 INCLUDE 方式:动态 INCLUDE 和静态 INCLUDE。 动态 INCLUDE 使用 jsp:include 动作实现,总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。 静态 INCLUDE 使用 include ...

    jsp servlet面试题总结

    jsp 中动态 INCLUDE 与静态 INCLUDE 的区别: 动态 INCLUDE 用 jsp:include 动作实现,总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。 静态 INCLUDE 用 include 伪码实现,不会检查所含文件...

    JSP动态网页制作课件

    动态网页与静态网页的主要区别在于,动态网页的内容是根据用户请求或服务器上的数据实时生成的。在JSP中,我们通常会结合Servlet和数据库来创建动态内容。 1. **Servlet-JSP协作**:Servlet负责处理HTTP请求,进行...

    JSP常用模块源代码

    2. JSP动作:如`&lt;jsp:include&gt;`静态或动态包含页面,`&lt;jsp:forward&gt;`转发请求,`&lt;jsp:params&gt;`传递参数。 二、JavaBean JSP与JavaBean的结合是常见的开发模式。JavaBean是符合特定规范的Java类,用于封装数据和业务...

    servlet和JSP面试题大全[参考].pdf

    3. **动态INCLUDE与静态INCLUDE**: - 动态INCLUDE使用`jsp:include`,每次请求都会检查并包含最新内容,适合包含动态内容。 - 静态INCLUDE使用`&lt;%@ include file=""&gt;`,只在编译时包含一次,适合包含静态内容。 ...

    JSP中的内置对象详解[整理].pdf

    `&lt;jsp:include&gt;`标签与`&lt;jsp:forward&gt;`类似,但用途略有不同。它用于将一个动态或静态资源包含到当前页面中。如果包含的资源是动态的,如Servlet或另一个JSP,也可以使用`&lt;jsp:param&gt;`传递参数。例如: ```jsp &lt;jsp:...

    jsp最全面试题集(你肯定会喜欢)

    在JavaServer Pages (JSP)技术中,开发者可以创建动态网页。以下是一些关于JSP的重要知识点,基于提供的试题集内容: 1. **混合使用JSP和SSI (Server Side Includes)** JSP中可以使用`&lt;%@include file="data.inc"%...

    jsp学习资料及应用

    **四、动态INCLUDE与静态INCLUDE** 1. **动态INCLUDE(jsp:include)**:每次请求都会检查被包含页面的变化,适用于包含可能变动的动态内容,且支持传递参数。 2. **静态INCLUDE(&lt;%@include file=""&gt;)**:只在...

    jsp 跟姐姐学习jsp jsp入门

    5. **转发和重定向**:理解`&lt;jsp:forward&gt;`和`response.sendRedirect()`的区别,以及在什么情况下使用它们。 6. **异常处理**:学习如何使用`page`, `errorPage`, `exception`指令进行错误处理。 在学习过程中,...

    jsp_API 文档

    JSP(JavaServer Pages)是一种动态网页技术,由Sun Microsystems开发并已被Oracle公司维护,它允许程序员将静态HTML与动态Java代码结合起来,从而创建交互式、响应式的Web应用。`jsp_API`文档是学习JSP的核心参考...

    JSP 程序设计从入门到精通 PDF 教程

     2.6 JSP中forward的使用 36  2.7 JSP运行时错误处理与应该注意的六个常见问题 37  2.8 JSP小实例 38  2.8.1实例1(在JSP中定义函数) 38  2.8.2实例2(获取各种CGI环境变量) 39  2.8.3实例3(JSP里...

    jsp经典案例

    JSP模板文本是静态HTML,而JSP动作则是动态元素,如`&lt;jsp:include&gt;`用于包含另一个页面。 **9. JSP转发与重定向** `request.getRequestDispatcher("newPage.jsp").forward(request, response);`进行内部转发,URL...

    JSP动态网站开发基础练习.典型案例

    可以使用HTML/CSS/JavaScript创建美观的用户界面,JSP可以通过`&lt;jsp:include&gt;`或`&lt;jsp:forward&gt;`引入公共头部、底部等模板,提高代码复用。 9. **国际化与本地化** 网上书店可能需要为不同地区的用户提供服务,...

    JAVAWEB面试笔试题.pdf

    本资源详细介绍了JAVAWEB面试笔试题,涵盖了JSP内置对象、JSP动作、动态INCLUDE和静态INCLUDE的区别、客户端跳转和服务器端跳转、会话跟踪实现等重要知识点。 一、JSP内置对象 JSP内置对象共有9个,分别是: 1. ...

    jsp入门例子演示(含源代码)

    4. **转发和重定向**:`&lt;jsp:forward&gt;`和`response.sendRedirect()`的区别和使用场景。 5. **EL(Expression Language)**:学习使用EL表达式简化JSP中的数据访问。 6. **JSTL(JavaServer Pages Standard Tag ...

    jsp留言板,关于jsp的系统设计

    Servlet处理HTTP请求,而JSP则更专注于展示层,但两者可以通过`&lt;jsp:include&gt;`和`forward`动作协同工作。 3. **请求与响应**:在JSP中,`HttpServletRequest`对象用于获取客户端发送的数据(如表单参数),`...

    JSP软件开发文件

    4. **JSP中include指令与include动作的区别** - `include`指令是静态包含,它将被包含页面的源代码直接合并到当前页面,编译时完成,不关心被包含页面的后续修改。 - `&lt;jsp:include&gt;`动作是动态包含,运行时执行,...

    JSP笔记,JSP笔记

    - `&lt;%@ include file="..." %&gt;`:这是静态包含,会在编译阶段将被包含文件的源代码合并到主JSP文件中。这种方式适用于包含那些需要在编译时就合并的代码或静态内容。 - `&lt;jsp:include page="..." /&gt;`:动态包含,...

Global site tag (gtag.js) - Google Analytics