一、 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. ajax 传递文件成功时 jQuery提示parsererror错误

    后台返回值类型 改为:PrintWriter out = response.getWriter();String jsonStr = "{\"success\":\&qu ...

  2. ASCII码排序 南阳acm4

    ASCII码排序 时间限制:3000 ms  |  内存限制:65535 KB 难度:2   描述 输入三个字符(可以重复)后,按各字符的ASCII码从小到大的顺序输出这三个字符.   输入 第一行输 ...

  3. POJ:2976-Dropping tests(二分平均值)

    Dropping tests Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 15508 Accepted: 5418 Descr ...

  4. 15.8,redis-cluster配置

      为什么要用redis-cluster 1.并发问题 redis官方生成可以达到 10万/每秒,每秒执行10万条命令假如业务需要每秒100万的命令执行呢? 2.数据量太大 一台服务器内存正常是16~ ...

  5. Android stadio butternife工具

    http://www.androidchina.net/5068.html svn今天我对它有了更深的认识.我知道了有冲突了不能提交.但是可以update,updata之后就会有冲突的东西生成,如果你 ...

  6. Microsxxxxxxx-面试总结

    策略题 There are four kinds of cards, respectively, 1,2, 3,4 numbers. There are seven cards for each ty ...

  7. python3 虚拟环境配置

    CentOS7 python3 虚拟环境配置 1. 安装依赖包 yum -y install wget gcc epel-release git 2. 安装 Python3.6 yum -y inst ...

  8. day06_08 字符串

    1.0 双引号和单引号的区别 a = "Let's go" print(a) #>>>Let's go 2.0 重复输出字符串* print('hello'*2) ...

  9. 孤荷凌寒自学python第二十七天python的datetime模块及初识datetime.date模块

    孤荷凌寒自学python第二十七天python的datetime模块及初识datetime.date模块 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.datetime模块 dateti ...

  10. tomcat集群和负载均衡的实现(session同步)

      (一)环境说明 (1)服务器有4台,一台安装apache,三台安装tomcat (2)apache2.0.55.tomcat5.5.15.jk2.0.4.jdk1.5.6或jdk1.4.2 (3) ...