页面片断引入和缓冲

v 应答主体的缓冲

Ø HTTP应答消息即包含首部也包含应答主体

       ª 首部将告诉浏览器应答主体中所含数据的类型(HTML文本、图像)、应答主体的大

              小、应答主体是否可以被缓存等信息。

       ª 所有的应答首部必须在应答主体被发送之前发送到浏览器去。

       ª 一旦JSP页面向消息主体中写入了什么东西,JSP就会开始把应答发送到浏览器中,

              这时再设置首部就太晚了,因为首部会最先被发送出去。

       ª 任何邡在JSP页面中而由不是JSP元素的内容,都将被JSP容器自动写入应答主体

              中。

       ª JSP元素本身是由JSP容器来执行的,它们永远不会出现在应答中。

       ª servlet规范规定在应答提交之后就不能再设置首部了,并且当数据已经被写入应答

              主体之后就不能再转发请求了。

Ø JSP容器缓冲:JSP容器将把任何不是JSP元素的内容和所有由JSP元素生成的动态内容

       写入到缓冲区中,而不是一旦有东西被写入应答主体就马上把应答发送到浏览器。

              ª 在某个特定的时候,比如缓冲区已经被填满,或者已经达到了页面的结尾,容

       器就会把所有已经设定好的首部发送出去,然后发送缓冲区里应答主体的内容。

              ª 当整个页面处理完毕的时候,JSP容器将先发送所有的首部,然后再发送缓冲

       区中的内容。

              ª 可以使用page指令的两个属性来控制缓冲区的大小,并规定当缓冲区被充满时

       应该采取的操作。

              <%@ page buffer=”12kb” autoFlush=”false”%>

       Buffer属性值指定了缓冲区大小的最小值,容器可以选择使用比这个值大一些的缓冲区,这个值必须是以千字节为单位的数字,后面紧跟kb。默认情况下一个缓冲区至少8kb大小。也可以使用none关键字,这样JSP容器将不会对应答主体执行任何操作。

       AutoFlush属性指定了当缓冲区已满时应当执行的操作。True:当缓冲区已满时,缓冲区中的内容将被发送到浏览器(缓冲区被排空),而页面剩余部分将被放入缓冲区,直到缓冲区再次被填满。False:当缓冲区被填满时,JSP容器将抛出一个异常,并结束对页面的处理。

       ª 大多数情况应该使用默认值,如果有一个特别大的页面,而又必须在页面的结尾处设置首部,那么就需要增加缓冲区的大小。

       ª 如果页面生成速度缓慢,而你又想尽快的把已经产生的结果发送给浏览器,可以禁用缓冲。

       ª 不管把buffer属性设成了什么值,都可以用下面的小脚本来强制性地排空缓冲区。

              <% out.fjush();%>

v 引入页面片段

ª 可以使用一个JSP指令或者一个标准行为,在JSP页面中引入其他的页面片段。

ª include指令:在翻译阶段(将JSP页面转换成servlet的阶段),JSPinclude指令会读入

       指定的页面中的内容,并将这些内容和原来的页面融合在一起。

       <%@ include file=”header.html”%>

       © 引入的页面可以只包含静态内容(例如HTML),也可以是一个普通的JSP页面。主页面和引入的页面融和在一起(引入的页面只是最为普通的文本进行融合,并不对动态内容求值),融合后的完整页面再被整体的转换为一个servlet

© 这意味着主页和被引入的页面共享所有的页面作用域数据。因此,如果主页面中声明了一个变量,而在某个被引入的页面中也声明了一个同名的变量,那么在翻译阶段将会造成一个错误,因为组合后的页面无法进行编译。

© include指令的一个常见用法是引入应用程序的所有页面都需要的公共声明。

© JSP规范建议在使用include指令引入JSP页面时,最好使用不同的文件扩展名,因为它们一般都不是完整而合法的页面,如:可以使用这些替代的文件扩展名:.jspf .jsf

© 被引用页面改变后,容器可能不会马上产生反应。

ª <jsp:include>指令用于在运行时引入另外的资源。

       © <jsp:include page=”navigation.jsp”/>

       © 这个指令是在请求处理阶段而不是在翻译阶段执行的。该行为并不是要引入指定页面的实际内容,它将引入执行该引入页面后所产生的应答,这意味着你可以指定任何能够产生文本应答的web资源。JSP容器将通过一个内部的函数调用来调用指定的资源。因此,这些被引入的资源可以帮助处理原来的请求,所以这些资源可以访问请求作用域内的所有对象,以及所有的请求参数。但是要注意,它不能访问任何页面作用域属性,或是在主页面中声明的脚步变量。

       ©<c:import>行为和<jsp:include>相同,另外它还可以从外部资源引入数据,比如不同的web应用程序,或者一个FTPfuwq

       © 所以应该使用<c:import>来代替<jsp:include>的使用。

© 被引用页面改变后,新版本会立即投入使用。

ª include <jsp:include>行为直接的区别

语法                            执行时间                     引入的内容

<%@ include                翻译阶段                     静态文本(HTMLJSP),在JSP页面被转换

File=”relativeURI”%>                                      servlet之前和他融合在一起

 

 

 

 

<jsp:include                  请求处理阶段             执行页面或servlet所生成的应答文本

Page=”relativeURI”

Flush=”true/false”/>

v 客户端代码包括JavaScriptJava applet

Ø 使用JavaScript

       ª JSP页面中包含的JavaScript代码,容器不会把它看作是代码,它只会把这些代码看作是模板文本,并仅仅把它和其他应答一起发送到浏览器去。

       ª 浏览器调用JSP页面的唯一方式是发送一个HTTP请求,JavaScript事件处理器无法直接调用JSP元素。

       ª JavaScript可以要求浏览器去请求一个完整的页面,但是脚本无法处理应答。

v 防止JSP页面被缓存

Ø 浏览器和服务请求都可以缓存用户访问过得页面,但有时不希望页面被缓存,可以

       ª <%

              response.addHeader(“Paragma”,”no-cache”);

              response.setHeader(“Cache-control”,”no-cache”);

              response.setDateHeader(“Expires”,0);

%>

setDateHeader(“Expires”,0)方法将值转换为“Thu,1 Dec 1970 00:00:00 GMT”,也就是,设置为过去的时间,保证了客户端可以在每次请求该页面时获得一个最新的副本,以达到不缓存页面的作用。

阅读更多

没有更多推荐了,返回首页