一、 JSP工作原理

JSP文件是一种Servlet,其工作方式是先部署源代码后编译为.class文件。JSP会在客户端第一次请求JSP文件时被编译成Servlet,由Servlet处理客户端的请求。具体流程如下图:

举例说明JSP的编译过程。客户端第一次请求index.jsp文件时,Tomcat先将index.jsp转换为标准的java源代码
index_jsp.java(该java文件存放在F:\apache-tomcat-7.0.68\work\Catalina\localhost
\项目名\org\apache\jsp目录下),并将index_jsp.java编译成类文件index_jsp.class。该class文件便是
JSP对应的Servlet。编译完成后运行class文件响应客户端请求。以后客户端访问index.jsp时,服务器将不再重新编译JSP文件,而是
直接调用index_jsp.class来响应客户端请求。
也就是说,JSP只会在客户端第一次请求的时候被编译,因此第一次请求会比较慢,而之后的请求就会速度比较快。

二、 Include指令

Include指令可以在JSP程序中插入多个外部文件(如:JSP、HTML、java程序,甚至是文本)。在转换成Servlet之前,include指令就会将相应的文件包含进主文件,然后一并转换成Servlet,编译生成一个class文件,最后一起执行。

语法:<%@ include file="relativeURL" %>
file属性是include指令的必要属性,用于指定包含哪个文件。其中relativeURL为被包含文件的路径。Include指令可以被多次调用。

注意:include指令将对应的文件包含进主文件,等价于代码复制;所以在使用include指令时要注意主文件与被包含文件不能定义相同的变量,也就是要避免变量同名冲突。
Include指令是实现代码共享的一种方式,所有的变量都是可以和主文件共享,页面设置也可以与主文件更享。

三、 Include动作

Include动作用于页面请求时引入指定文件。如果引入的文件是JSP文件,则先编译该JSP程序,然后再把编译的结果引入主文件。

语法:<jsp:include page="relativeURL" flush="true" />
属性page是必需的,其page的属性值是被包含文件的相对路径,必须为相同应用程序内的文件。属性flush取值范围为true或者false,默认为false,设置读入被保存文件内容前是否清空缓存。

注意:include动作使用request.getRequestDispatcher(“relativeURL”).forward(request,response)来引入被包含文件。
Include动作会自动检查被包含文件的变化。也就是在每次客户端发出请求时会重新把资源包含进来,进行实时的更新。

JSP动作也可以携带参数:

<jsp:include page="{relativeURL|<%=expression%>}" flush="true">
<jsp:param name="parameterName" value="parameterValue"/>
</jsp:include>

四、 总结

Include指令是“先包含,后编译”,在编译时主文件已经包含被include的文件内容(即源代码);
Include动作是“先运行,后包含”,在运行时主文件才包含被include的文件运行结果。

JSP中include指令和include动作浅析的更多相关文章

  1. 浅谈JSP中include指令与include动作标识的区别

    JSP中主要包含三大指令,分别是page,include,taglib.本篇主要提及include指令. include指令使用格式:<%@ include file="文件的绝对路径 ...

  2. 分别应用include指令和include动作标识在一个jsp页面中包含一个文件。

    分别应用include指令和include动作标识在一个jsp页面中包含一个文件. hello.jsp <%@ page language="java" import=&qu ...

  3. 牛客网Java刷题知识点之什么是JSP的3大常用指令、JSP的6大哪些动作、JSP中include指令和include动作有什么区别

    不多说,直接上干货! JSP的3大常用指令 包含指令(Include directive):用来包含文件和合并文件内容到当前的页面. 页面指令(Page directive):用来定义JSP页面中特定 ...

  4. include 指令和 include 动作引入 jsp 页面时中文乱码

    include指令:<%@ include file="new.jsp" %> include动作:<jsp:include page="new.jsp ...

  5. JSP -- include指令与include动作的区别

    JSP -- include指令与include动作的区别 (1)格式的区别: include指令:<%@include file = "文件名"%> include动 ...

  6. 【Head First Servlets and JSP】笔记24:include指令与include动作 & param动作 & foward动作

    include指令与include动作 1.样例代码 <%@ page contentType="text/html;charset=UTF-8" language=&quo ...

  7. 2017.9.18 include指令和include动作有什么区别?

    问题:include指令和include动作有什么区别? 答:include指令合并静态文档或Jsp页面中的内容,可以用于包括动态生成的输出结果,因此可以包含一个Servlet include指令在编 ...

  8. jsp中的指令与动作

    JSP中的三种命令指令分别是page.include.taglib JSP中的动作元素包括:include.forward.useBean.getProperty.setProperty.plugin ...

  9. include指令和include动作有什么区别?

    include指令         称为文件加载指令,可以将其他的文件插入jsp网页,被插入的文件必须保证插入后形成的新文件符合jsp页面的语法规则. include指令语法格式:<%@incl ...

  10. JSP中三大指令

    JSP指令概述 JSP指令的格式:<%@指令名 attr1=”” attr2=”” %>,一般都会把JSP指令放到JSP文件的最上方,但这不是必须的.  JSP中的指令共有三个:page. ...

随机推荐

  1. 779. K-th Symbol in Grammar

    class Solution { public: int kthGrammar(int N, int K) { return helper(N, K, false); } int helper(int ...

  2. shell+vim——05

    ln --->link 链接, 链接有两种: 软连接 ln -s 源文件 目标文件   :相当于创建了一个快捷方式,源文件损坏后这个链接也就失效了 ln -s  a.text  a.text.s ...

  3. scala初体验-02

    上一节,我们讲了scala的安装的即一些初步方法,今天,我们来介绍一下scala里面的一些基本操作 1.对于map的的编写,这个是广泛用于Array里面的 val arr = Array(1,2,3, ...

  4. url_maneger.py

    coding=UTF-8 # url管理器 class urlManeger: def __init__(self): self.new_urls = set() self.old_urls = se ...

  5. 7,vim

    vim与程序员 所有的 Unix Like 系统都会内建 vi 文书编辑器,其他的文书编辑器则不一定会存在. 但是目前我们使用比较多的是 vim 编辑器. vim 具有程序编辑的能力,可以主动的以字体 ...

  6. 17,saltstack高效运维

      salt介绍 saltstack是由thomas Hatch于2011年创建的一个开源项目,设计初衷是为了实现一个快速的远程执行系统. salt强大吗 系统管理员日常会进行大量的重复性操作,例如安 ...

  7. SpringMVC---applicationContext.xml配置详解

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  8. Javascript 属性高级写法

    http://www.cnblogs.com/YuanSong/p/3899287.html

  9. 剑指Offer - 九度1512 - 用两个栈实现队列

    剑指Offer - 九度1512 - 用两个栈实现队列2013-11-29 21:23 题目描述: 用两个栈来实现一个队列,完成队列的Push和Pop操作.队列中的元素为int类型. 输入: 每个输入 ...

  10. day06_02 元组

    1.0 元组 元组被称为只读列表,即数据可以被查询,但不能被修改,所以,列表的切片操作同样适用于元组.元素卸载小括号(())里,元素之间用逗号隔开. tup1 = () #空元组 tup2 = (20 ...