JSP指令include和JSP动做元素include的区别

include指令用于在JSP页面静态的包含一个文件,该文件能够是JSP页面、HTML页面、文本文件或者一段java代码。使用include指令的JSP页面在转换时,JSP容器会在其中插入所包含文件的文本或代码。html

include指令语法格式:java

  <%@ include file="relativeURL"%>jsp

XML格式的include指令格式:url

  <jsp:directive.include file="relativeURL">spa

其中file属性为相对于当前JSP文件的URL。htm

例:对象

welcome.jsp文件接口

<%@ page contentType="text/html;charset=gb2312" %>资源

<html>get

  <head><title>welcome</title></head>

  <body>

    the now time is:

    <%@  include file="data.jsp"%>

  </body>

</html>

data.jsp

<%

  out.println(new java.util.Date().toLocaleString());

%>

注意:在被包含的文件中最好不要使用<html>/</html><body></body>等标签,由于这会影响到原JSP文件中一样的标签,有时会致使错误。

另外,由于原文件和被包含文件能够互相访问彼此定义的变量和方法,因此在包含文件时要格外当心,避免在被包含文件中定义同名的变量和方法,从而致使的转换出错。或者修改了另外文件中变量的值而致使的错误。


 

<jsp:include>动做标识

这个动做元素用于在当前页面中包含静态和动态的资源,一旦被包含的页面执行完毕,请求处理将在调用页面中继续进行。被包含的页面不能改变响应的状态代码或者设置报头,这防止了对相似setCookie()这样的方法的调用,任何对这些方法的调用都将被忽略。这个约束和在javax.servlet.Request.Dispatcher类的include()方法上所施加的约束是同样的。

<jsp:include>动做的语法:

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

或者

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

    {<jsp:param...../>}

  </jsp:include>

<jsp:include>有两个属性:page和flush

page:指定被包含资源的相对路径,该路径是相对于当前JSP页面的URL

flush:该属性是可选的,如为true,则表示当页面输出使用了缓冲区,那么在进行包含工做以前,先刷新缓冲区。如设置为false,则不会刷新缓冲区。默认是false。

<jsp:include>动做元素能够在他的内容中包含一个或者多个<jsp:param>元素,为包含的页面提供参数信息。被包含的页面能够访问request对象,该对象包含了原始的参数和使用<jsp:param>元素指定的新参数,若是参数的名称相同,则原来的值不变,新的值其优先级比已经存在的值要高。

例如:请求对象中有一个参数为param=value1,而后在<jsp:param>元素指定了一个参数param=value2,在被包含的页面中,接收到的参数为param=value2,value1,调用javax.servlet.ServletRequest接口中的getParameter()方法将返回value2,固然能够使用getParameterValues()返回指定参数的全部值。

表1-1<jsp:include>和include指令的区别
语法 相对路径 发生时间 包含对象 描述
<%@ include file="url"%> 相对于当前文件 转换期间 静态 包含的内容被JSP容器分析
<jsp:include page="url"> 相对于当前页面 请求处理期间 静态和动态 包含的内容不进行分析,但在相应的位置被包含

注意:表1-1中include指令包含的对象为静态,并非指include指令只能包含像HTML这样的静态页面,include指令也能够包含JSP页面。所谓静态和动态指的是:include指令将JSP页面做为静态对象,将页面的内容(文本或代码)在include指令的位置处包含进来,这个过程发生在JSP页面的转换期间。而<jsp:include>动做吧包含的JSP页面做为动态对象,在请求处理期间,发送请求给该对象,而后在当前页面对请求的响应中包含该对象对请求处理的结果。这个过程发生在执行阶段(即请求处理阶段)。

  当采用include指令包含资源时,相对路径的解析在转换期间发生(相对于当前文件的路径来找到资源),资源的内容(文本或者代码)在include指令的位置被包含进来,成为一个总体,被转换为Servlet源文件。当采用<jsp:include >动做包含资源时,相对路径的解析在请求处理阶段,(相对于当前页面来找到资源),当前页面和被包含的资源是两个独立的个体,当前页面将请求发送给被包含的资源,被包含的资源对请求处理的结果做为当前页面对请求响应的一部分发送给客户端。

  为了更好的理解include指令和<jsp:include>动做包含资源的相对路径,弄清楚相对于当前文件和相对于当前页面的区别,给出了表1-2,在这个例子中用到四个文件:

a.jsp  c.jsp  abc/b.jsp   abc/c.jsp

表1-2
a.jsp abc/b.jsp 结果
<%@ include file="abc/b.jsp"%> <%@ include file="c.jsp"%> abc/c.jsp
<jsp:include page="abc/b.jsp"> <jsp:include page="c.jsp"> abc/c.jsp
<jsp:include page="abc/b.jsp"> <%@ include file="c.jsp"%> abc/c.jsp
<%@ include file="abc/b.jsp"%> <jsp:include page="c.jsp"> c.jsp
相关文章