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属性使用一个请求时属性值,以便根据运行时的情况来决定要引入哪一个页面.还可以添加一些将被引入的页面读取的请求参数.
- <jsp:include page="<%=pageSelectedAtRuntime%>" flush="true" >
- <jsp:param name="fitstParamer" value="firstValue">
- <jsp:param name="lastParamer" value="lastValue">
- </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> 执行过后后面的不再执行,中间可以转发多次,但请求就一次,可以传递参数,可以取得转发页面的参数
- <jsp:forward page="">
- <jsp:param value="test1" name="name1"/>
- </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面试常见问题解析:Forward与SendRedirect的区别及Include的理解 #### 1. Forward与SendRedirect的区别 在Web开发中,特别是在Java Server Pages (JSP)与Servlets结合使用的场景下,`forward`与`...
JSP 中的 INCLUDE 机制有两种:动态 INCLUDE 和静态 INCLUDE。动态 INCLUDE 用 jsp:include 动作实现,总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。静态 INCLUDE 用 include 伪码实现,不会...
13) JSP中的include指令和jsp:include动作有什么区别?(多选题) a) include指令在翻译阶段处理,而jsp:include动作在请求处理阶段处理 b) include指令包含的页面在编译时合并,而jsp:include动作允许动态包含...
在 JSP 中,有两种 INCLUDE 方式:动态 INCLUDE 和静态 INCLUDE。 动态 INCLUDE 使用 jsp:include 动作实现,总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。 静态 INCLUDE 使用 include ...
jsp 中动态 INCLUDE 与静态 INCLUDE 的区别: 动态 INCLUDE 用 jsp:include 动作实现,总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。 静态 INCLUDE 用 include 伪码实现,不会检查所含文件...
动态网页与静态网页的主要区别在于,动态网页的内容是根据用户请求或服务器上的数据实时生成的。在JSP中,我们通常会结合Servlet和数据库来创建动态内容。 1. **Servlet-JSP协作**:Servlet负责处理HTTP请求,进行...
3. 动态INCLUDE与静态INCLUDE的区别: - 动态INCLUDE(`jsp:include`):每次请求都会检查被包含页面的变化,适合包含动态内容,可以传递参数。 - 静态INCLUDE(`<jsp:include page="..."/>`):不会检查被包含...
- **用途**:通常与 `<jsp:include>`、`<jsp:forward>` 和 `<jsp:plugin>` 等动作元素配合使用,用于传递参数。 #### <jsp:forward> 动作元素详解 - **语法**: ```jsp <jsp:forward page="页面地址"/> ``` - **...
2. JSP动作:如`<jsp:include>`静态或动态包含页面,`<jsp:forward>`转发请求,`<jsp:params>`传递参数。 二、JavaBean JSP与JavaBean的结合是常见的开发模式。JavaBean是符合特定规范的Java类,用于封装数据和业务...
**四、动态INCLUDE与静态INCLUDE** 1. **动态INCLUDE(jsp:include)**:每次请求都会检查被包含页面的变化,适用于包含可能变动的动态内容,且支持传递参数。 2. **静态INCLUDE(<%@include file="">)**:只在...
动作是用于执行特定任务的预定义标签,例如使用jsp:include动作标签来动态包含页面片段,使用jsp:forward标签来在页面间进行转发等。 #### JSP内置组件 JSP标准标签库(JSTL)提供了一组标准的标签,使得JSP页面...
3. **动态INCLUDE与静态INCLUDE**: - 动态INCLUDE使用`jsp:include`,每次请求都会检查并包含最新内容,适合包含动态内容。 - 静态INCLUDE使用`<%@ include file="">`,只在编译时包含一次,适合包含静态内容。 ...
`<jsp:include>`标签与`<jsp:forward>`类似,但用途略有不同。它用于将一个动态或静态资源包含到当前页面中。如果包含的资源是动态的,如Servlet或另一个JSP,也可以使用`<jsp:param>`传递参数。例如: ```jsp <jsp:...
在JavaServer Pages (JSP)技术中,开发者可以创建动态网页。以下是一些关于JSP的重要知识点,基于提供的试题集内容: 1. **混合使用JSP和SSI (Server Side Includes)** JSP中可以使用`<%@include file="data.inc"%...
2. 使用 `<jsp:include>` 和 `<jsp:forward>` 时,要注意区分它们之间的区别,合理选择使用场景。 3. 在设置 `contentType` 和 `pageEncoding` 属性时,要确保两者之间的一致性,避免出现乱码问题。 通过以上内容的...
#### 三、动态Include与静态Include的区别 - **动态Include**:通过`jsp:include`标签实现,总是会检查被包含文件中的变化,适用于包含动态页面,可以携带参数。 - **静态Include**:通过`<%@ include file="...">`...
4. **转发与重定向** - 使用`<jsp:forward>`和`response.sendRedirect()`进行页面跳转。 5. **包含其他页面** - 使用`<jsp:include>`动态地将一个页面的内容插入到另一个页面中。 6. **使用EL(Expression Language...
1. **jsp:include**:运行时动态地包含页面,与include指令的区别在于它可以传递请求参数。 2. **jsp:forward**:将请求转发到另一个页面。 3. **jsp:useBean**:在JSP页面中创建和查找JavaBean。 4. **jsp:set...
5. **转发和重定向**:理解`<jsp:forward>`和`response.sendRedirect()`的区别,以及在什么情况下使用它们。 6. **异常处理**:学习如何使用`page`, `errorPage`, `exception`指令进行错误处理。 在学习过程中,...
JSP(JavaServer Pages)是一种动态网页技术,由Sun Microsystems开发并已被Oracle公司维护,它允许程序员将静态HTML与动态Java代码结合起来,从而创建交互式、响应式的Web应用。`jsp_API`文档是学习JSP的核心参考...