理解JSP中的include(一):include-file 指令测试

include|js

第一个例子:

include-file-test-1.jsp:

<%@ page contentType="text/html;charset=GBK" %>
<%! String dec_str = "dec_str";%>
<%=dec_str%><br>
<%@ include file="include-file-test-2.jsp" %><br>
<%=dec_str%><br>

include-file-test-2.jsp:

<%@ page contentType="text/html;charset=GBK" %>
<%
dec_str = "scr_str"; //Eclipse显示出错。
%>

结果:

dec_str

scr_str

结论:file1中定义的实例变量(或局部变量),file2可以引用并更改。但直接访问file2会出错。

第二个例子:

include-file-test-1.jsp:

<%@ page contentType="text/html;charset=GBK" %>

<% scr_str = "hello " + scr_str;%>

<%@ include file="include-file-test-2.jsp" %>
<%=scr_str%><br>
<% temp = "hello " + temp;%>
<%=temp%>

include-file-test-2.jsp:

<%@ page contentType="text/html;charset=GBK" %>
<%! String scr_str = "scr_str";%>
<% String temp = "temp"; %>

查看file1 对应的servlet:

package org.apache.jsp.jsp_002dsyntax_002dtest;

import ……;

public final class include_002dfile_002dtest_002d1_jsp …… {

String scr_str = "scr_str";
private static java.util.Vector _jspx_dependants;

static {
_jspx_dependants = new java.util.Vector(1);
_jspx_dependants.add("/jsp-syntax-test/include-file-test-2.jsp");
}

public java.util.List getDependants() {
return _jspx_dependants;
}

public void _jspService(HttpServletRequest request, HttpServletResponse response)
throws java.io.IOException, ServletException {

……
try {
……

response.setContentType("text/html;charset=GBK");
……

scr_str = "hello " + scr_str;
String temp = "temp";
……
out.print(scr_str);
temp = "hello " + temp;
……

out.print(temp);
} catch (Throwable t) {
……

} finally {
……
}
}
}

结果:

hello scr_str
hello temp

结论:file2中定义的实例变量,file1可以在<%@ include file="" %>指令之前(或之后)引用并更改。

file2中定义的局部变量,file1必须在<%@ include file="" %>指令之后引用并更改。

第三个例子:

include-file-test-1.jsp:

<%@ page contentType="text/html;charset=GBK" %>
<%!
String str1 = "str1 ";
%>
<%
String str4 = str1 + str2 + str3;
%>
<%@ include file="include-file-test-2.jsp" %>
<%=str4%>

include-file-test-2.jsp:

<%@ page contentType="text/html;charset=GBK" %>
<%!
String str2 = "str2 ";
String str3 = str1 + str2;
%>

file1对应的servlet:

package org.apache.jsp.jsp_002dsyntax_002dtest;

import ……

public final class include_002dfile_002dtest_002d1_jsp ……{

String str1 = "str1 ";

String str2 = "str2 ";
String str3 = str1 + str2;

……

public void _jspService(HttpServletRequest request, HttpServletResponse response)
throws java.io.IOException, ServletException {

……

try {
……
response.setContentType("text/html;charset=GBK");
……

String str4 = str1 + str2 + str3;

……
out.print(str4);
} catch (Throwable t) {
……
}

结果:

str1 str2 str1 str2

结论:file2并不生成servlet,但其中的内容都被包含在了file1生成的servlet之中;file2本身也被添加进名为“ _jspx_dependants”的Vector类型的类变量中。可以看到,在file2中定义的实例变量“scr_str ”被转移到了file1生成的servlet中。可见Tomcat是以一种很耐人寻味的机制进行处理的。

时间: 2024-08-30 14:53:24

理解JSP中的include(一):include-file 指令测试的相关文章

理解JSP中的include(二):jsp-include测试

include|js 第一个例子: file1: <% String str = "aaaaa";%><jsp:include page="jsp-include-slave.jsp" /> <%=str%> file2: <% str = str + "bbbbb";%> 结果: 访问file1时出错,提示file2中无法解析变量str. 分析: 在请求file1时,tomcat首先将两个jsp文

JSP中include指令和include行为的区别

我们都知道在jsp中include有两种形式,分别是 < %@ include file=" "%> < jsp:include page=" " flush="true"/> 前者是指令元素.后者是行为元素.具体它们将在何处用?如何用及它们有什么区别?这应该是很多人看到它都会想到的问题.下面一起来看看吧. 通常当应用程序中所有的页面的某些部分(例如标题.页脚和导航栏)都相同的时候,我们就可以考虑用include.具体在哪

JSP中include指令和include行为的区别_JSP编程

< %@ include file=" "%> < jsp:include page=" " flush="true"/> 前者是指令元素.后者是行为元素.具体它们将在何处用?如何用及它们有什么区别?这应该是很多人看到它都会想到的问题.下面一起来看看吧. 通常当应用程序中所有的页面的某些部分(例如标题.页脚和导航栏)都相同的时候,我们就可以考虑用include.具体在哪些时候用< %@ include file=&q

JSP中include指令和动作及区别详解

先来看看语法及比较 //include_ <%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.get

JSP中include动作与指令

include指令 JSP中有三大指令:page,include,taglib,之前已经说过了page的用法.这里介绍下include. 使用语法如下: <%@ include file="URL"%> 比如有一个页面要包含另一个date.jsp页面,date.jsp提供一个时间输出: <%@ page language="java" import="java.util.*,java.io.*" contentType=&quo

jsp中的@include与jsp:include有什么区别

1 前言 搞java开发的人也许都知道在jsp中引入项目中其他文件有如下两种方式 <%@include file="xxx.jsp"%> <jsp:include page="xxx.jsp"></jsp:include> 我们也许会使用这两种方式,但是也许很多人不名称这两种方式的区别.下面我们来看看下面的两个例子 2 开门见山引出问题 (1) /include/include.jsp <%@ page language=&

jsp中include指令静态导入和动态导入的区别详解_JSP编程

1.什么是静态导入? 静态导入指的是,将一个外部文件嵌入到当前JSP文件中,同时解析这个页面的JSP语句,它会把目标页面的其他编译指令也包含进来.include的静态导入指令使用语法: 复制代码 代码如下: <%@include file="relativeURLSpec"%> 静态导入使用范例include1.jsp: 复制代码 代码如下: <%@ page contentType="text/html; charset=utf-8" langu

JSP中的include有几种形式?都有什么区别?_JSP编程

JSP中的include有哪些?有什么区别? 1.JSP中的include有哪些 (1)<%@include file="" %> (2)<jsp:include page="" flush="true"/> 2.两者区别 (1)前者是指示元素,后者是行为元素 (2)前者合成一个页面,后者合成一个文件后被JSP容器转化成Servlet

jsp中如何去除JSTL标签库“include, taglib”等留下的空白行

在做项目的时候,经常会使用到JSTL和EL表达式,有时我们需要看下页面生成的源代码,但是当jsp中充满了jstl的各种标签,页面就会存在很多的空白部分,有时太多了会让浏览器假死掉,这是我们就想要去掉这些空白的部分了.去掉的方法很多,下面一一列举出来. 我的开发及服务器环境:Windows7 + Eclipse2014 + Tomcat7.0 + JDK 1.7.0 经过多番测试,可用的方法有: 1.在每个JSP的头上加上一段代码   <%@ page trimDirectiveWhitespac