`

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面试容易问到的问题

    ### JSP面试常见问题解析:Forward与SendRedirect的区别及Include的理解 #### 1. Forward与SendRedirect的区别 在Web开发中,特别是在Java Server Pages (JSP)与Servlets结合使用的场景下,`forward`与`...

    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

    3. 动态INCLUDE与静态INCLUDE的区别: - 动态INCLUDE(`jsp:include`):每次请求都会检查被包含页面的变化,适合包含动态内容,可以传递参数。 - 静态INCLUDE(`&lt;jsp:include page="..."/&gt;`):不会检查被包含...

    JSP指令web开发基础篇

    - **用途**:通常与 `&lt;jsp:include&gt;`、`&lt;jsp:forward&gt;` 和 `&lt;jsp:plugin&gt;` 等动作元素配合使用,用于传递参数。 #### &lt;jsp:forward&gt; 动作元素详解 - **语法**: ```jsp &lt;jsp:forward page="页面地址"/&gt; ``` - **...

    JSP常用模块源代码

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

    JSP程序设计从入门到精通

    动作是用于执行特定任务的预定义标签,例如使用jsp:include动作标签来动态包含页面片段,使用jsp:forward标签来在页面间进行转发等。 #### JSP内置组件 JSP标准标签库(JSTL)提供了一组标准的标签,使得JSP页面...

    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详细整理笔记

    2. 使用 `&lt;jsp:include&gt;` 和 `&lt;jsp:forward&gt;` 时,要注意区分它们之间的区别,合理选择使用场景。 3. 在设置 `contentType` 和 `pageEncoding` 属性时,要确保两者之间的一致性,避免出现乱码问题。 通过以上内容的...

    servlet和JSP面试题大全

    #### 三、动态Include与静态Include的区别 - **动态Include**:通过`jsp:include`标签实现,总是会检查被包含文件中的变化,适用于包含动态页面,可以携带参数。 - **静态Include**:通过`&lt;%@ include file="..."&gt;`...

    myjsp.rar_Myjsp

    4. **转发与重定向** - 使用`&lt;jsp:forward&gt;`和`response.sendRedirect()`进行页面跳转。 5. **包含其他页面** - 使用`&lt;jsp:include&gt;`动态地将一个页面的内容插入到另一个页面中。 6. **使用EL(Expression Language...

    jsp学习资料及应用

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

    JSP.zip_JSP考试

    1. **jsp:include**:运行时动态地包含页面,与include指令的区别在于它可以传递请求参数。 2. **jsp:forward**:将请求转发到另一个页面。 3. **jsp:useBean**:在JSP页面中创建和查找JavaBean。 4. **jsp:set...

    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的核心参考...

Global site tag (gtag.js) - Google Analytics