一、 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. spark stream简介

    1.复杂的迭代计算 假如我们计算的需要100步的计算,但是当我执行到第99步的时候,突然数据消失, 根据血统,从头进行恢复,代价很高 sc.setCheckpointDir("共享存储文件系 ...

  2. hadoop,hbase,hive

    linux上安装hadoop,然后安装hbase,然后安装zookeeper,最后安装hive.hbase安装在hdfs下.hive是纯逻辑表,hbase是物理表.hdfs是hadoop上的一个组件.

  3. myeclipse用maven搭建web项目后tomcat启动报找不到jar包解决办法

    因为maven项目jar包放在Maven Dependencies内,用tomcat启动web项目,会找WEB-INF下的lib目录,需要部署Maven Dependencies 选中项目-prope ...

  4. b树的实现

    花了蛮长时间实现的b树插入操作.有时间再实现其他操作. #include <stdio.h> #include <stdlib.h> #define M 5 enum KeyS ...

  5. shell脚本获取网页快照并生成缩略图

    获取网页快照并生成缩略图可分两步进行: 1.获取网页快照 2.生成缩略图 获取网页快照 这里我们用 phantomjs 来实现.关于 phantomjs 的详细用法可参考官方网站. 1.安装 我的环境 ...

  6. shell脚本简单切割字符串

    我们有这样一个字符串: info='abcd;efgh' 现在想获取abcd和efgh,我们可以简单地用cut工具来获取: fstr=`` sstr=`` 这里主要是用了cut工具的-d和-f参数: ...

  7. flask_入门教程之一

    一.教程涉及开发语言.脚本.框架.数据库等内容 Python + Flask + requests 通过命令安装:pip install flask 二.创建第一个flask脚本 一个最小的 Flas ...

  8. ASP.NET Core 2.1 源码学习之 Options[3]:IOptionsMonitor 【转】

    原文链接:https://www.cnblogs.com/RainingNight/p/strongly-typed-options-ioptions-monitor-in-asp-net-core. ...

  9. 1020 Tree Traversals (25 分)(二叉树的遍历)

    给出一个棵二叉树的后序遍历和中序遍历,求二叉树的层序遍历 #include<bits/stdc++.h> using namespace std; ; int in[N]; int pos ...

  10. 原始套接字--简易ping程序

    #include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> ...