测品娱乐
您的当前位置:首页JavaWeb重要知识点分析

JavaWeb重要知识点分析

来源:测品娱乐
1

JSP四种会话跟踪技术: ................................................................................................................ 1

观点一:第二种说法正确 ....................................................................................................... 1

说法一: ........................................................................................................................... 1 说法二: ........................................................................................................................... 2 说法三: ........................................................................................................................... 2 说法四: ........................................................................................................................... 4 观点二: 第一种说法正确 ..................................................................................................... 4 观点三: 两种说法都不准确 ............................................................................................... 5

说法一: ........................................................................................................................... 5 另外补充下关于“暗号”的说法。 ............................................................................... 5 说法二: ........................................................................................................................... 5 面试问题: ............................................................................................................................... 8

动态引入与静态引入的区别? ....................................................................................... 8 什么是动态引入和静态引入? ....................................................................................... 8 动态引入的公优缺点是什么? ....................................................................................... 8 动态引入的优点及用途是? ........................................................................................... 8 参考资料: ....................................................................................................................... 8 include与jsp:include区别 ...................................................................................................... 8

静态include与动态include的区别分析 ..................................................................... 11

JSP四种会话跟踪技术:

1. page session request application 2. cookie session url参数 隐藏域

有的说 是1 有的说是2 究竟,这两个 哪个对???

观点一:第二种说法正确 说法一:

会话跟踪技术 是保存用户和服务器之间会话状态及信息的一种那啥。 是2。

至于1,是四个作用域不同的内置存储对象。 page 当前页面有效

request 浏览器对服务器的一次请求有效,服务器返回请求后失效

session 在服务器规定会话最长时间范围内有效,对浏览器串口和其子窗口。 application 就是对整个正在运行的项目有效了。

2

听我的没错,答案是2 回答1的根本没理解啥是会话跟踪技术,他们以为是内置存储对象。

6、四种会话跟踪技术

会话作用域Servlets/JSP 页面描述

page否是代表与一个页面相关的对象和属性。一个页面由一个编译好的 Java servlet 类(可以带有任何的 include 指令,但是没有 include 动作)表示。 这既包括 servlet 又包括被编译成 servlet 的 JSP 页面

request是是代表与 Web 客户机发出的一个请求相关的对象和属性。 一个请求可能跨越多个页面,涉及多个 Web 组件(由于 forward 指令和 include 动作的关系)

session是是代表与用于某个 Web 客户机的一个用户体验相关的对象和属性。 一个 Web 会话可以也经常会跨越多个客户机请求

application是是代表与整个 Web 应用程序相关的对象和属性。 这实质上是跨越整个 Web 应用程序,包括多个页面、请求和会话的一个全局作用域

说法二:

解释四种会话跟踪技术?

解答:隐藏表单域、URL 重写,Cookie、Session。

1).隐藏表单域:,非常适合步需要大量数据存储的会话应用。

2).URL 重写:URL 可以在后面附加参数,和服务器的请求一起发送,这些参数为名字/值对。

3).Cookie:一个 Cookie 是一个小的,已命名数据元素。服务器使用 SET-Cookie 头标将它作为 HTTP响应的一部分传送到客户端,客户端被请求保存 Cookie 值,在对同一服务器的后续请求使用一个

Cookie 头标将之返回到服务器。与其它技术比较,Cookie 的一个优点是在浏览器会话结束后,甚至

在客户端计算机重启后它仍可以保留其值。

4).Session:使用 setAttribute(String str,Object obj)方法将对象捆绑到一个会话

说法三:

会话跟踪是一种灵活、轻便的机制,它使Web上的状态编程变为可能。

HTTP是一种无状态协议,每当用户发出请求时,服务器就会做出响应,客户端与服务器之间的联系是离散的、非连续的。

当用户在同一网站的多个页面之间转换时,根本无法确定是否是同一个客户,会话跟踪技术就可以解决这个问题。当一个客户在多个页面间切换时,服务器会保存该用户的信息。 有四种方法可以实现会话跟踪技术:URL重写、隐藏表单域、Cookie、Session。 1).隐藏表单域:,非常适合步需要大量数据存储的会话应用。

2).URL 重写:URL 可以在后面附加参数,和服务器的请求一起发送,这些参数为名字/值对。 见 http://blog.csdn.net/xh16319/article/details/84055

3).Cookie:一个 Cookie 是一个小的,已命名数据元素。服务器使用 SET-Cookie 头标将它

3

作为 HTTP响应的一部分传送到客户端,客户端被请求保存 Cookie 值,在对同一服务器的后续请求使用一个Cookie 头标将之返回到服务器。与其它技术比较,Cookie 的一个优点是在浏览器会话结束后,甚至在客户端计算机重启后它仍可以保留其值。 见:http://blog.csdn.net/xh16319/article/details/84319

4).Session:使用 setAttribute(String str,Object obj)方法将对象捆绑到一个会话

实现URL重写

URL重写在客户端浏览器不支持Cookie(下章介绍)的情况下使用的,它是客户端浏览器请求服务器时,URL地址后面加上类似于 “SESSIONID=***”形式的参数,服务器端通过获取SESSIONID关键字来获取会话值。

在程序第一次访问服务器端时,服务端并不能确认客户端浏览器是否支持Cookie。因此,当服务器第一次发出请求时,服务端会默认采用URL重写,也就是将SESSIONID写到URL地址中传递。

核心代码:String SessionId=request.getRequestedSessionId(); 当客户端发送请求后,服务器会根据提交给客户端浏览器的信息自动检查客户端是否启用了Cookie,如果启用,将不再进行URL重写。如果没有,则继续使用URL重写。 通过response对象的encodeURL(String url)方法可以进行URL重写。 public String encodeURL(String url);

对包含SessionID的URL进行编码。如果不需要编码,就直接返回这个URL。

Servlet引擎必须提供URL编码方法,因为在有些情况下,我们将不得不重写URL。 例如,在响应对应的请求中包含一个有效的Session,但是这个Session不能被非URL的(例如Cookie)的手段来维持。所以所有提供给Servlet的URL都应通过这个方法运行,这样才能确保会话跟踪能够在所有浏览器中正常运行。

隐藏域和URL重写有着共同的优点:

它们在Cookie被禁用或者根本不支持的情况下依旧能够工作。 缺点:

所有页面必须是表单提交之后的结果,还有涉及许多冗长的处理工作。

4

说法四:

Cookie:服务器在一个应答首部传递给浏览器的名称/值对。浏览器保存的时间由cookie的过期时间属性来指定。当浏览器向某个服务器发送一个请求时,它会检查其保存的cookie,并在请求首部中包含从同一台服务器上接收到的所有cookie。

Session tracking:在浏览器和服务器之间不直接传送所有的状态信息,而只是传递表示符(session ID)。浏览器发送sessionID,服务器跟踪与该会话相关联的所有信息。传递sessionID可以通过cookie和URL复写技术,大部分容器 都支持这两种技术。服务器无法分辨用户是否关闭了浏览器,因此关闭浏览器意味着与先前的会话关联的所有会话数据都保留在服务器上,直到会话超时,服务器销 毁会话对像。 ?跟踪同一会话中的请求的会话ID可以有多种方法,主要有cookie和url复写。

URL复写:把会话ID编码在URL中。 例:counter.jjsp;jsessionnid=be8d697876787876befdbde870980 这样,即使浏览器不支持cookie,也能够实现会话跟踪。对于URL复写,服务器从请求的URI中提取出会话ID,并把该请求与相应的会话关联起来,然 后在访问会话数据的时候,JSP页面所进行的处理方式就和使用cookie跟踪会话id时所使用的方式完全相同。所以sesssion的实现要依靠 cookie或URL复写技术。如果想为不支持cookie的浏览器提供会话跟踪,就必须使用行为对应用程序中的所有URL进行复写。这意味着应用程序中 的所有页面(至少是那些带有对其他页面引用的页面)都必须是JSP页面,这样页面引用才能以动态方式进行编码,如果遗漏了一个uri,那么服务就会失去对 会话的跟踪。

隐藏表单域:隐藏表单域是将会话ID添加到HTML的隐藏表单中(类型为hidden的input)。重定向和转发可以使用两种 方法来调用另一个页面,重定向和转发。 i) 转发: 转发,JSP容器将使用一个内部方法来调用目标页面,新的页面继续处理同一个请求,而浏览器不会知道这个过程涉及到了多个页面。浏览器URL会保持不变。 ii) 重定向: 重定向与转发不同,重定向时,第一个页面会通知浏览器发送一个新的目标页面的请求。浏览器所显示的URL会变成新页面的URL。重定向的速度比转发要慢, 因为浏览器得发出一个新的请求。同时,由于重定向产生了一个新的请求,所以经过一次重定向之后请求作用域内的对象将无法再使用了。

观点二: 第一种说法正确

会话作用域ServletsJSP 页面描述

page否是代表与一个页面相关的对象和属性。一个页面由一个编译好的 Java servlet 类(可 以带有任何的 include 指令,但是没有 include 动作)表示。这既包括 servlet 又包括 被编译成 servlet 的 JSP 页面

request是是代表与 Web 客户机发出的一个请求相关的对象和属性。一个请求可能跨越多个 页面,涉及多个 Web 组件(由于 forward 指令和 include 动作的关系) session是是代表与用于某个 Web 客户机的一个用户体验相关的对象和属性。

一个 Web 会话可以也经常会跨越多个客户机请求

application是是代表与整个 Web 应用程序相关的对象和属性。这实质上是跨越整个 Web 应用程序,包括多个页面、请求和会话的一个全局作用域

5

四种会话跟踪机制是?

会话信息可以保存在客户端的cookie中;可以放在服务器的文件中;可以放在数据库中;还可以放入内存中

观点三: 两种说法都不准确 说法一:

既然是考题,其答案就未必准确;楼主我相信你自己其实可以推导出来。

所谓会话,本质上就是客户端和服务器端所约定的一个“标识”甚至可以说“暗号”(为什么我说是暗号,我最后再进行解释下),这个“暗号”用于客户端向服务器端标识自己的访问身份,从而服务器端可以为这个身份保存一些临时上下文数据,从而简化业务操作。J2EE应用中比较有名的“暗号”就是JSessionId。

所以对于2的四个选项,就是是否能用于客户端向服务器端传递暗号?

◎ cookie:应该都知道Cookie内容会在每次访问服务器时自动加入到HTTP请求的head中;可以。

◎ session:这个是本题目的主要败笔,会话跟踪主要就是跟踪session,岂不是自己推证自己了?扯淡。 ◎ url参数:URL参数,自然可以用于传递信息,甚至有些网站为了支持客户端禁用Cookie的情况,特意支持将JSessionId写在URL的做法;可以。

◎ 隐藏域:说白了就是FORM中type为hidden的INPUT标签,显然可以用POST等方式传递数据;可以。

所以我个人认为,答案并不准确。当然实在要选,貌似也只能选2了。

另外补充下关于“暗号”的说法。

所谓“暗号”就有泄漏的问题,你喊一句“天王盖地虎”,他喊“宝塔镇河妖”,对上暗号就以为身份对了。可惜万一暗号被别人知道了呢?岂不是就让服务器把别人当成你了? 实际上JSessionId就有这样的问题。 这就是赫赫有名的“会话劫持”,具体情况也很清楚了,就是你跟服务器约定好的JSessionId,很不幸被恶意第三方知道了,而且你的身份还很不幸的是个Admin,那么这事情就玩大了,恶意第三方就可以带着这个暗号找服务器:“哥们,把数据都给老子查出来,然后全删了”。服务器自然是:“喳~~~”。

具体就不乱扯了,喜欢的同学自己Google好了。

说法二:

第一个肯定是错误的。

6

至于第二个嘛,我也不大认同。

在我的印象当中,如果要实现会话机制,就必须通过sesison。 因为session是服务器端保存一次会话信息的唯一数据载体。。。

至于实现会话跟踪的技术,无非就是让每一次请求到达服务器时,准确的获取到已有的session。

我记得就三种吧:

1。cookie:在浏览器不禁用掉cookie的情况下,浏览器的每次请求都会自动带上cookie中保存的sessionId到服务器,这时候,服务器会根据sessionId获得到 相应的session。

2。隐藏表单域:在页面上使用隐藏的表单域保存sessionId,每次页面的提交都会带上这个隐藏表单域里面的sessionId,这时候,服务器也能根据隐藏表单域里 面的sessionId获取到相应的session

3。url重写:其实现机制也就是在页面上所有的连接地址后面都追加上sessionId的 键值对,这样服务器也能根据连接后面跟随的sessionId获取到相应的session。

JSP/Servlet会话跟踪的四种方法

由于HTTP事务是无状态的,因此必须采取特殊措施是服务器在系列事务期间能继续确定和记住特定用户。

实现此功能有两种基本方式:

一是让客户端记住所有会话的相关数据并在必要时发回到服务器 二时服务器保持所有数据,对其设置一个标识,让客户端记住该标识 第二种方法更好,实现它的技术有四种: 用隐藏字段():非常适合不需要大量数据存储的会话应用。 具体使用??

URL重写:URL可以在后面附加参数,和服务器的请求一起发送,这些参数为名字/值对。如:http://server/mypage.jsp?name1=value1&name2=value2.JSP 页面检索请求时,可以如下读取参数值,String value1=request.getParameter(\"name1\");String value2=request.getParameter(\"name2\");。此技术可以确保所有浏览器中有效,但是保存大量数据,此技术会降低性能。 而且这样的URL是不安全的,不过对于简单应用,URL重写是可信赖的,也很容易实现。注意,通常不会手工向超级链接URL中附加参数,更常见的是使用 HTTP会话API执行URL重写,这样,只要附加一个会话ID。

Cookie:一个Cookie是一个小的,已命名数据元素。服务器使用 SET-Cookie头标将它作为HTTP响应的一部分传送到客户端,客户端被请求保存Cookie值,在对同一服务器的后续请求使用一个Cookie头 标将之返回到服务器。与其它技术比较,Cookie的一个优点是在浏览器会话结束后,甚至在客户端计算机重启后它仍可以保留其值。 具体使用方法?? Session:

使用setAttribute(String str,Object obj)方法将对象捆绑到一个会话(在会话中可以保存任意类型的对象,但因为会话可能被序列化,最好让会话对象实现java.io.Serializable接口; 使用getArrtibute(String str)方法从一个会话中检索对象;

7

使用removeAttribute(String str)方法从一个会话中销毁对象; 使用setMaxInactiveInteral()方法设置会话的有效期,默认为30分钟(在web.xml中配置); 使用invalidate()方法将会话所有捆绑的对象解缚。

Servlet【jsp servlet】事件管理机制控制那些对象的事件?

编辑整理答案1:Servlet的会话管理机制

根据设计,HTTP是一种无状态的协议。它意味着Web应用并 不了解有关同一用户以前请求的信息。维持会话状态信息的方法之一是使用Servlet或者JSP容器提供的会话跟踪功能。Servlet API规范定义了一个简单的HttpSession接口,通过它我们可以方便地实现会话跟踪。

HttpSession接口提供了存 储和返回标准会话属性的方法。标准会话属性如会话标识符、应用数据等,都以“名字-值”对的形式保存。简而言之,HttpSession接口提供了一种把 对象保存到内存、在同一用户的后继请求中提取这些对象的标准办法。在会话中保存数据的方法是setAttribute(String s, Object o),从会话提取原来所保存对象的方法是getAttribute(String s)。

在HTTP协议中,当用户不再活动时不存在显式的终止信号。由于这个原因,我们不知道用户是否还要再次返回,如果不采取某种方法解决这个问题,内存中会积累起大量的HttpSession对象。

为此,Servlet采用“超时”的办法来判断用户是否还在访问:如果某个用户在一定的时间之内没有发出后继请求,则该用户的会话被作废,他的 HttpSession对象被释放。会话的默认超时间隔由Servlet容器定义。这个值可以通过getMaxInactiveInterval方法获 得,通过setMaxInactiveInterval方法修改,这些方法中的超时时间以秒计。如果会话的超时时间值设置成-1,则会话永不超时。 Servlet可以通过getLastAccessedTime方法获得当前请求之前的最后一次访问时间。

要获得HttpSession对象,我们可以调用HttpServletRequest对象的getSession方法。为了正确地维持会话状态,我们必须在发送任何应答内容之前调用getSession方法。

用户会话既可以用手工方法作废,也可以自动作废。作废会话意味着从内存中删除HttpSession对象以及它的数据。例如,如果一定时间之内(默认30分钟)用户不再发送请求,Java Web Server自动地作废他的会话。

Servlet/JSP会话跟踪机制有着一定的局限,比如:

? 会话对象保存在内存之中,占用了可观的资源。

? 会话跟踪依赖于Cookie。由于各种原因,特别是安全上的原因,一些用户关闭了Cookie。

? 会话跟踪要用到服务器创建的会话标识符。在多个Web服务器以及多个JVM的环境中,Web服务器不能识别其他服务器创建的会话标识符,会话跟踪机制无法发挥作用。 要深入理解会话跟踪机制,首先我们必须理解在Servlet/JSP容器中会话如何运作。

8

面试问题:

动态引入与静态引入的区别? 什么是动态引入和静态引入? 动态引入的公优缺点是什么? 动态引入的优点及用途是? 参考资料:

include与jsp:include区别

我们都知道在jsp中include有两种形式,分别是 <%@ include file=” ”%>

前者是指令元素、后者是行为元素。具体它们将在何处用?如何用及它们有什么区别?这应该是很多人看到它都会想到的问题。下面一起来看看吧。

通常当应用程序中所有的页面的某些部分(例如标题、页脚和导航栏)都相同的时候,我们就可以考虑用include。具体在哪些时候用<%@ include file=” ”%>,哪些时候用.这种形式。首先要明白的是它们之间的区别。只有了解了它们用法的不同才理解该在何时去用以及如何选择。

<%@ include file=” ”%>,jsp的include指令元素读入指定页面的内容。并把这些内容和原来的页面融合到一起。(这个过程是在翻译阶段:也就是jsp被转化成servlet的阶段进行的。)

这里对翻译阶段进行一下说明:我们知道,jsp页面不能原封不动地被传送给浏览器,所有的jsp元素都必须首先由服务器进行处理。这是通过将jsp页面转达化成servlet,然后执行这个servlet来完成的。服务器需要一个jsp容器来处理jsp页面。jsp容器通常以servlet的形式来实现, 这个servlet经过配置,可以处理对jsp页面的所有请求。

Jsp容器负责将jsp页面转化成servlet(称为jsp页面实现类?JSP Page implementation class),并编译这个servlet。这两步就构成了翻译阶段.

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

9

产生一个临时class文件和一个java文件。下面举个例子。

服务器用tomcat,引入页面的jsp文件叫test.jsp。被引入的页面叫date.jsp.这个jsp文件里存放的是一个有关时间的jsp代码,当前的上下文根设为test //======date.jsp的源文件=====// <%@ page language=”java” %> <%

java.util.Date date=new java.util.Date(); String date_cn =\"\"; String dateStr = \"\"; switch(date.getDay()) {

case 0:date_cn =\"日\"; break; case 1:date_cn =\"一\"; break; case 2:date_cn =\"二\"; break; case 3:date_cn =\"三\"; break; case 4:date_cn =\"四\"; break; case 5:date_cn =\"五\"; break; case 6:date_cn =\"六\"; break; }

dateStr = (1900+date.getYear()) + \"年\" + (date.getMonth()+1) + \"月\" + date.getDate() + \"日(星期\" + date_cn + \")\"; %>

document.write(\"<%=dateStr%>\");

//======以下是test.jsp的源文件=============//

<%@ page language=”java” contentType=”text/html;charset=gb2312”%>

include的两种用法

<%--@ include file=”date.jsp” %-->

//我们在这里用include的两种不同形式来引入date.jsp这个文件.

有关jsp中include的两种用法.敬请关注。

在test.jsp 文件中,我们只输出了一行文本“ 有关jsp中include的两种用法.敬请关注。”,现在让我们先用<%@ include file=”date.jsp” %>这种形式引入date.jsp这个文件。你想会出现什么问题了吗?此时出现了错误提示: HTTP Status 500 ?

org.apache.jasper.JasperException: /date.jsp(0,0) Page directive: can't have multiple occurrences

10

of contentType

以下还有一堆错误,但我们只要看这里就知道问题的所在了。状态码为http 500服务器内部错误。再看下面的提示。在date.jsp页面中不能指定多个contentType. 原因就在这里了。是因为在翻译阶段,date.jsp文件的代码被原封不动地加入到了test.jsp页面从而合成一个文件。合成后的文件中就会相同的:

<%@ page language=”java” contentType=”text/html;charset=gb2312”%>

这句代码。解决的办法是把date.jsp文件中的这句删掉。刷新后再请求test.jsp页面 请求test.jsp在页面显示如下 2003年12月10日 13:12:40

这时我们还不能发现什么。还是去查看tomcat下的临时文件吧。到那里去看看date.jsp文件的内容是否已被加入到了test.jsp文件中。

在目录下会看到test_jsp.java和test_jsp.class两个文件.

这里的java文件就是jsp容器将jsp转化成了servlet而得到的test_jsp.java这个文件。相对应的test_jsp.class这 个文件就是编译test_jsp.java这个servlet文件产生的类文件了。打开所产生的servlet文件(test_jsp.java),此时 我们会发现,在test.jsp 文件被转化成servlet文件时,在输出的之间加入了一些不是test.jsp页面里面的代码,新加入的内容就是 date.jsp里面的代码: 新加入了哪些内容或是否真的加入了新的内容请自己测试去看一下就会一目了然了.在这里不再详述.

以上就是我们用<%@ include file=”date.jsp”%>这种形式得到的结果.

下面我们换用也就是将

<%@ include file=”date.jsp”%>换成,然后请求test.jsp. 2003? ê 12??10?? 13:30:13

此时会在页面上看见.我们所引入date.jsp输出的日期中中文出现了乱码.什么原因?是因为include行为元素是在请求处理阶段执行的(此处要对 请求处理阶段进行说明一下,Jsp容器除了上面提到的负责将jsp页面转化成servlet外,还负责调用jsp页面实现类以处理每个请求并产生应答.这 个阶段我们就称为请求处理阶段.请求处理阶段仅执行类文件)。

所以在我们作include行为元素引入页面时,实际只是引用了date.jsp这个文件被转化并被编译后产生的servlet类文件.既如此, date.jsp就是作为一个单独的文件在执行后才被test.jsp文件运行时调用.由于date.jsp文件中没有指定字符编码.所以出现了乱码.解 决办法是在date.jsp文件中重新把刚才去掉的

<%@ page language=”java” contentType=”text/html;charset=gb2312”%>

这行语句加入后刷新重新运行.此时页面显示正确,并跟用include指令正常运行时一样.再查看tomcat下的临时文件会发现.此时多出了一个 date_jsp.java文件和一个date_jsp.class文件.这两个文件得来的方式跟test_jsp.java和 test_jsp.class文件得来的方式一样.再查看一下此时test_jsp.java文件的代码会发现.此时只新增加了一句代码:

JspRuntimeLibrary.include(request, response, \"date.jsp\

它并没有把date.jsp文件的代码加入到test.jsp.只是在运行时引入了date.jsp页面执行后所产生的应答.这意味着我们可以指定任何能 够产生应答的Web资源,(例如一个servlet或一个jsp页面),只要这些资源所产生的类型和jsp页面产生的内容类型相同.JSP容器将通过一个 内部的函数调用来执行指定的资源.因此,这些被引入的资源可以帮助处理原来的请求,所以这些资源可以访问请求作用域内的所有对象.以及所有原来的请求参 数.

由于在主页面被请求时,这些页面还没有被引入到主页面中,所以你可以对page属性使用一

11

个请求时属性值,以便根据运行时的情况来决定要引入哪一个页面.还可以添加一些将被引入的页面读取的请求参数.

” flush=”true” >

如果修改了被引入的jsp页面,那么可以立刻使用该页面的最新版本,这是因为对待被引入的页面的方式与对待由浏览器直接调用的jsp页面的方式完全相同.即容器检测页面的变化,并自动进入翻译阶段,以得到页面的最新版本.

(注意,include行为元素同jsp其它元素一样,没有行为体时要以”/”结束.就像下面这样. ” flush=”true” />)

以下是对include 两种用法的区别 主要有两个方面的不同;

一:执行时间上:

<%@ include file=”relativeURI”%> 是在翻译阶段执行

在请求处理阶段执行.

二:引入内容的不同:

<%@ include file=”relativeURI”%>

引入静态文本(html,jsp),在JSP页面被转化成servlet之前和它融和到一起.

引入执行页面或servlet所生成的应答文本. 另外在两种用法中file和page属性都被解释为一个相对的URI.如果它以斜杠开头,那么它就是一个环境相关的路径.将根据赋给应用程序的URI的前缀进行解释,如果它不是以斜杠开头,那么就是页面相关的路径,就根据引入这个文件的页面所在的路径进行解释.

静态include与动态include的区别分析

静态include与动态include的区别分析:

为了更深刻的了解这两者的区别,专门搜索了类似的资料,写出来供大家分享: 静态include主要是对静态页面的引入,不会检查所包含文件的变化 <% @ include file=\"include.html\" %>

动态include主要是对动态页面的引入,它总是会检查所引入的页面的变化,如果所包含的资源在请求间发生变化

,则下一次请求包含动作的jsp时,将包含资源的新内容。 另一方面,include指令在转换时一次性地将内容复制到jsp中,如果所包含的资源发生变化,则使用include指令的jsp将不能反应出新的内容,除非重新编译该jsp。 动作包含的属性:

page:指定所包含资源的相对url路径,该资源必须时同一web应用程序的组成部分。 flush:指定在执行include动作后是否应刷新缓冲区,在jsp1.1中,该属性必须设置为真。 使用动态include动作时,根据jsp1.1规范,jsp容器允许判断通过include指令包含的资源是否发生变化。如果发生变化。则容器可以重新编译包含该资源的jsp,然而,该规范并没有提供向容器表明某个包含的资源发生变化的机制。

12

动态include的优点和不足: 优点:

1:引入和同步一个动态的页面,使jsp页面更具灵活性 2:能和不同页面之间进行信息的交互和快捷的实现方式。

3:改变了原始的所有页面编码都放在一个jsp上,使不同的功能分别写在不同页里,通过动态include方式引用到页面,更易于编码,更易于管理。 不足:

动态的引入时需要频繁的变化和页面信息的更新和交互,要占用大量的资源开销。降低页面的访问速度。如果在没必要动态引入的情况下,不要使用动态include 应该注意事项:

1:动作的flush属性必须要定义,不定义会出现转换错误。而且设置的flush必须要为true

2:在动作中指定的页面必须是同一web应用程序的一部分。如果引入的是非同一web应用的页面将导致请求时错误。

是动态加载的。---->运行的时候进行动态加载 <%@ include file=\"\" %>是静态的。 ---->编译的时候加载的。 注意:

Include引用图片或者文件,当执行到加载图片或者时才会去查找,在编译阶段不会加载图片或者文件本身。

因篇幅问题不能全部显示,请点此查看更多更全内容