`

深究<%@include%>和<jsp:include>

 
阅读更多

<%@include%>和<jsp:include>的区别.本人在研究这里的内容的时候碰到了一些疑惑的地方,故找了一篇文章参考了一下!

文章中有一些出入,所以自己又修改了一番!


<%@include%>:我们知道JSP文件本身就是servlet,然而JSP文件需要预先编译成servlet,也就是class文件,而<%@include%>页面jsp在请求之前就已经进行了预编译,所有代码包含进来之后,一起进行处理,把所有代码合在一起,编译成一个servlet!

<jsp:include>:所有JSP文件代码分别处理,是在页面被请求的时候才进行编译,将多个jsp文件编译成多个servlet,页面语法相对独立,处理完成之后再将代码的显示结果(处理结果)组合进来。


显而易见,两者的区别就区别开了!


随后我们来看一下JSP中的两种包含页面的用法!
第一种:include指令:当JSP转换成Servlet时引入指定文件

<%@ pagecontentType="text/html;charset=GB2312" language="java"errorPage=""%>
<%@ include file="head.jsp"%>
<%@ include file="body.jsp"%>
<%@ include file="tail.jsp"%>
第二种:<jsp:include>动作元素:当JSP页面被请求时引入指定文件
<%@ page contentType="text/html; charset=GB2312"language="java" errorPage=""%>
<jsp:include page="head.jsp"/>
<jsp:include page="body.jsp"/>
<jsp:include page="tail.jsp"/>


第二种方法可以很方便的用<jsp:param>来向所包含页传递参数,方法如下:
<%@ page contentType="text/html; charset=GB2312"language="java" errorPage=""%>
<jsp:include page="head.jsp"/>
<jsp:includepage="body.jsp">
<jsp:param name="uid"value="username"/>
<jsp:param name="pwd"value="password"/>
</jsp:include>
<jsp:includepage="tail.jsp"/>

<jsp:include> :动态包含html文件和JSP文件的区别

第一种情况(<jsp:include>包含的是html文件):

DynamicInclude.jsp:

<%@pagecontentType="text/html;charset=gb2312"%>
<html>
         <head>
                   <title>动态包含</title>
         </head>
         <body style="background-color:lightblue">
 
                   <jsp:include page="header.html"flush="true"/><!--动态包含-->
 
                   <tableborder="1" align="center">
                            <tr>
                                     <td>姓名</td><td>性别</td><td>年龄</td><td>爱好</td>
                            </tr>
                            <tr>
                                     <td>a</td><td>b</td><td>c</td><td>d</td>
                            </tr>
                   </table>
         </body>
</html>
 

Header.html :

(注意,JSP本身就是servlet,而html却不是,也就是此处最大的却别了!)

<h2style="font-family:arial;color:red;font-size:25px;text-align:center">
         动态包含的标题(HTML)
</h2>

运行之后,只生成一个servlet,和上面的代码对应如下:

  out.write("\r\n");
     out.write("<html>\r\n");
     out.write("\t<head>\r\n");
     out.write("\t\t<title>动态包含</title>\r\n");
     out.write("\t</head>\r\n");
     out.write("\t<bodystyle=\"background-color:lightblue\">\r\n");
     out.write("\r\n");
     out.write("\t\t");
     org.apache.jasper.runtime.JspRuntimeLibrary.include(request,response, "header.html", out, true);
     out.write("<!--动态包含-->\r\n");
     out.write("\r\n");
     out.write("\t\t<table border=\"1\"align=\"center\">\r\n");
     out.write("\t\t\t<tr>\r\n");
     out.write("\t\t\t\t<td>姓名</td><td>性别</td><td>年龄</td><td>爱好</td>\r\n");
     out.write("\t\t\t</tr>\r\n");
     out.write("\t\t\t<tr>\r\n");
     out.write("\t\t\t\t<td>a</td><td>b</td><td>c</td><td>d</td>\r\n");
     out.write("\t\t\t</tr>\r\n");
     out.write("\t\t</table>\r\n");
     out.write("\t</body>\r\n");
     out.write("</html>");


第二种情况(<jsp:include>包含的是jsp文件):

DynamicInclude.jsp:

<%@pagecontentType="text/html;charset=gb2312"%>
<html>
         <head>
                   <title>动态包含</title>
         </head>
         <bodystyle="background-color:lightblue">
 
                   <jsp:include page="header.jsp"flush="true"/><!--动态包含-->
 
                   <tableborder="1" align="center">
                            <tr>
                                     <td>姓名</td><td>性别</td><td>年龄</td><td>爱好</td>
                            </tr>
                            <tr>
                                     <td>a</td><td>b</td><td>c</td><td>d</td>
                            </tr>
                   </table>
         </body>
</html>

Header.jsp :

<%@pagecontentType="text/html;charset=gb2312"%>
<html>
         <body>
                   <h2style="font-family:arial;color:red;font-size:25px;text-align:center">
                            动态包含的标题(JSP)
                   </h2>
         </body>
</html>

运行之后,生成了两个servlet,DynamicInclude_jsp.java和header_jsp.java

这也是为什么 Header.jsp中要写上<%@page contentType="text/html;charset=gb2312"%>和完整的<html></html>和<body></body>

而Header.html不用写的原因。因为后者两个.jsp文件是两个相互独立的整体,它们之间的关系是通过request和reponse来发生的,而前者只是简单的嵌套。后者的两个servlet对应的代码如下:


DynamicInclude_jsp.java:

     out.write("\r\n");
     out.write("<html>\r\n");
     out.write("\t<head>\r\n");
     out.write("\t\t<title>动态包含</title>\r\n");
     out.write("\t</head>\r\n");
     out.write("\t<bodystyle=\"background-color:lightblue\">\r\n");
     out.write("\r\n");
     out.write("\t\t");
     org.apache.jasper.runtime.JspRuntimeLibrary.include(request,response, "header.jsp", out, true);
     out.write("<!--动态包含-->\r\n");
     out.write("\r\n");
     out.write("\t\t<table border=\"1\"align=\"center\">\r\n");
     out.write("\t\t\t<tr>\r\n");
     out.write("\t\t\t\t<td>姓名</td><td>性别</td><td>年龄</td><td>爱好</td>\r\n");
     out.write("\t\t\t</tr>\r\n");
     out.write("\t\t\t<tr>\r\n");
     out.write("\t\t\t\t<td>a</td><td>b</td><td>c</td><td>d</td>\r\n");
     out.write("\t\t\t</tr>\r\n");
     out.write("\t\t</table>\r\n");
     out.write("\t</body>\r\n");
     out.write("</html>");

header_jsp.java:

     out.write("\r\n");
     out.write("<html>\r\n");
     out.write("\t<body>\r\n");
     out.write("\t\t<h2 style=\"font-family:arial;color:red;font-size:25px;text-align:center\">\r\n");
     out.write("\t\t\t动态包含的标题(JSP)\r\n");
     out.write("\t\t</h2>\r\n");
     out.write("\t</body>\r\n");
     out.write("</html>");

从而我们可以清楚的明白了,<jsp:include file=""> 引入html和jsp的区别了!


<%@include%>:静态包含

第一种情况:<%@include%>包含的是jsp文件。

StaticInclude.jsp:

<%@pagecontentType="text/html;charset=gb2312"%>
<html>
         <head>
                   <title>静态包含</title>
         </head>
         <bodystyle="background-color:lightblue">
 
                   <%@include file="header.jsp"%><!--静态包含-->
                   <tableborder="1" align="center">
                            <tr>
                                     <td>姓名</td><td>性别</td><td>年龄</td><td>爱好</td>
                            </tr>
                            <tr>
                                     <td>a</td><td>b</td><td>c</td><td>d</td>
                            </tr>
                   </table>
         </body>
</html>


header.jsp:

<%@pagecontentType="text/html;charset=gb2312"%>
<h2style="font-family:arial;color:red;font-size:25px;text-align:center">
         静态包含的标题(JSP)
</h2>

运行之后,只生成一个servlet,和上面的代码对应如下:

 out.write("\r\n");
     out.write("<html>\r\n");
     out.write("\t<head>\r\n");
     out.write("\t\t<title>静态包含</title>\r\n");
     out.write("\t</head>\r\n");
     out.write("\t<body style=\"background-color:lightblue\">\r\n");
     out.write("\r\n");
     out.write("\t\t");
     out.write("\r\n");
    out.write("<h2style=\"font-family:arial;color:red;font-size:25px;text-align:center\">\r\n");
     out.write("\t静态包含的标题(JSP)\r\n");
     out.write("</h2>");
     out.write("<!--静态包含-->\r\n");
     out.write("\t\t<table border=\"1\"align=\"center\">\r\n");
     out.write("\t\t\t<tr>\r\n");
     out.write("\t\t\t\t<td>姓名</td><td>性别</td><td>年龄</td><td>爱好</td>\r\n");
     out.write("\t\t\t</tr>\r\n");
      out.write("\t\t\t<tr>\r\n");
     out.write("\t\t\t\t<td>a</td><td>b</td><td>c</td><td>d</td>\r\n");
     out.write("\t\t\t</tr>\r\n");
     out.write("\t\t</table>\r\n");
     out.write("\t</body>\r\n");
     out.write("</html>");

第二种情况:当<%@include%>包含的是html文件。

StaticInclude.jsp:

<%@pagecontentType="text/html;charset=gb2312"%>
<html>
         <head>
                   <title>静态包含</title>
         </head>
         <bodystyle="background-color:lightblue">
 
                   <%@include file="header.html"%><!--静态包含-->
                   <tableborder="1" align="center">
                            <tr>
                                     <td>姓名</td><td>性别</td><td>年龄</td><td>爱好</td>
                            </tr>
                            <tr>
                                     <td>a</td><td>b</td><td>c</td><td>d</td>
                            </tr>
                   </table>
         </body>
</html>

header.html:

<%@pagecontentType="text/html;charset=gb2312"%>
<h2style="font-family:arial;color:red;font-size:25px;text-align:center">
         静态包含的标题(HTML)
</h2>

运行之后,也是只生成一个servlet,和上面的代码对应如下:

 out.write("\r\n");
     out.write("<html>\r\n");
     out.write("\t<head>\r\n");
     out.write("\t\t<title>静态包含</title>\r\n");
     out.write("\t</head>\r\n");
     out.write("\t<bodystyle=\"background-color:lightblue\">\r\n");
     out.write("\r\n");
     out.write("\t\t");
     out.write("\r\n");
     out.write("<h2style=\"font-family:arial;color:red;font-size:25px;text-align:center\">\r\n");
     out.write("\t静态包含的标题(HTML)\r\n");
     out.write("</h2>");
     out.write("<!--静态包含-->\r\n");
     out.write("\t\t<table border=\"1\"align=\"center\">\r\n");
     out.write("\t\t\t<tr>\r\n");
     out.write("\t\t\t\t<td>姓名</td><td>性别</td><td>年龄</td><td>爱好</td>\r\n");
     out.write("\t\t\t</tr>\r\n");
     out.write("\t\t\t<tr>\r\n");
     out.write("\t\t\t\t<td>a</td><td>b</td><td>c</td><td>d</td>\r\n");
     out.write("\t\t\t</tr>\r\n");
     out.write("\t\t</table>\r\n");
     out.write("\t</body>\r\n");
     out.write("</html>");

由上可以总结出:

对于静态包含,<%@include%>,中包含的文件,只是简单的嵌入到主文件中,就是在jsp页面转化成Servlet时才嵌入到主文件中,因为运行的结果是只生成了一个Servlet。

而对于动态包含<jsp:incude>,如果被包含文件是动态的,那么就会生成两个Servlet,也就是被包含文件也要经过jsp引擎编译执行生成一个Servlet,两个Servlet通过request和reponse进行通信。如果被包含的文件是静态的,那么这种情况和<%@include>就很相似,只生成了一个Servlet,但是他们之间没有进行简单的嵌入,而依然是通过request和reponse进行的通信。

分享到:
评论

相关推荐

    smartupload组件包

    然后,在JSP页面中,通过`&lt;%@ page import="com.upload.SmartUpload"%&gt;`引入SmartUpload类。 二、SmartUpload基本使用流程 1. 初始化SmartUpload对象:在JSP页面中,首先创建SmartUpload实例,如`SmartUpload su =...

    C++标准函数库.docx

    cout &lt;&lt; i &lt;&lt; " " &lt;&lt; s &lt;&lt; " " &lt;&lt; f &lt;&lt; " " &lt;&lt; d &lt;&lt; " " &lt;&lt; name &lt;&lt; endl; } ``` 这段代码比 scanf/printf 版本更易于解释和理解,并且没有安全性问题。 2. 字符串和字符处理:C 语言 `&lt;string.h&gt;` 和 C++ `...

    EasyUI(详细 清楚)EasyUI(详细 清楚)

    jQuery EasyUI 是一个基于 jQuery 的前端开发框架,它提供了一系列的 UI 控件,使得开发者能够快速构建出美观且功能丰富的 Web 应用程序界面,而无需深究 JavaScript 和 CSS 的复杂性。其主要特点包括: 1. **集合...

    jquerymobile jar包

    这款框架提供了丰富的组件和交互效果,使得开发者可以快速创建功能丰富的移动界面,而无需深究复杂的CSS和JavaScript细节。 **核心概念与特点** 1. **统一的事件和API**:jQuery Mobile 提供了一套统一的事件和API...

    深究AngularJS之ui-router详解

    &lt;script type="text/javascript" src="JS/angular-ui-router.min.js"&gt;&lt;/script&gt; ``` 接下来,我们需要创建一个AngularJS模块,并注入`ui.router`依赖。在以下代码中,我们创建了一个名为`myApp`的模块,并将`ui....

    超炫的JQuery幻灯片

    &lt;li&gt;&lt;img src="slide1.jpg" alt="Slide 1"&gt;&lt;/li&gt; &lt;li&gt;&lt;img src="slide2.jpg" alt="Slide 2"&gt;&lt;/li&gt; ... &lt;/ul&gt; &lt;a href="#" class="prev"&gt;Previous&lt;/a&gt; &lt;a href="#" class="next"&gt;Next&lt;/a&gt; &lt;div class="dots"&gt;...

    商业贸易行业中国品牌化崛起系列深度(一):深究“品牌溢价”的来源,万元奢侈品包成本是多少?.rar

    这篇深度报告——“商业贸易行业中国品牌化崛起系列深度(一):深究‘品牌溢价’的来源,万元奢侈品包成本是多少?”旨在探讨中国品牌如何在奢侈品市场中建立起自己的价值体系,并揭示高价奢侈品背后的成本秘密。 ...

    Android安全架构深究

    资源名称:Android 安全架构深究内容简介:《Android 安全架构深究》自底向上描述了Android 的安全架构,深入探究与安全相关的Android 子系统、设备和数据组件的内部实现。其中包括包和用户管理,权限和设备策略,...

    20210204-东吴证券-商业贸易行业中国品牌化崛起系列深度(一):深究“品牌溢价”的来源,万元奢侈品包成本是多少?.pdf

    本文档“***-东吴证券-商业贸易行业中国品牌化崛起系列深度(一):深究‘品牌溢价’的来源,万元奢侈品包成本是多少?”深入探讨了品牌溢价的来源和奢侈品包的实际成本,阐述了中国品牌在国际市场上崛起的潜力和...

    基于JSP技术的旅游网站设计软件程序源码+数据库+word毕业设计论文文档.zip

    基于JSP技术的镇旅游网站设计软件程序源码+数据库+word毕业设计论文文档.旅游网站设计主要用于实现旅游景点信息管理,基本功能包括:主界面模块设计,用户注册模块,旅游景点模块,酒店预订模块,后台管理模块等。本...

    ANDROID安全架构深究.pdf

    ANDROID安全架构深究.pdf ANDROID安全架构深究.pdf ANDROID安全架构深究.pdf

    新手必看JSPJava等集成开发工具Eclipse的使用方法与深究.pdf

    Eclipse 是目前全球最受欢迎的 Java 和 JSP 集成开发环境之一,尤其对于初学者而言,它提供了丰富的功能和良好的扩展性。本章节主要介绍了如何使用Eclipse进行Java和Web应用程序的开发,以及相关工具的选择策略。 ...

    深究AngularJS——ng-checked(回写:带真实案例代码)

    &lt;script src="***"&gt;&lt;/script&gt; &lt;/head&gt; &lt;body&gt; &lt;!-- ng-app指令定义了AngularJS应用的入口 --&gt; &lt;div ng-app="myApp" ng-controller="myCtrl"&gt; &lt;!-- 创建复选框列表 --&gt; &lt;div ng-repeat="item in list"&gt; &lt;!-- ng...

    深究动画精神家园.doc

    深究动画精神家园.doc

    中国品牌化崛起系列深度(一):深究“品牌溢价”的来源-万元奢侈品包成本是多少?.pdf

    在探讨品牌资产时,品牌不仅是一个简单的商标或名字,而是蕴含了消费者与商家之间的信任和认同,这种认同感是品牌能够产生溢价的基础。品牌溢价是指消费者愿意为品牌产品支付高于其实际价值或成本的价格。这种现象在...

    ANDROID安全架构深究.7z

    本资源“ANDROID安全架构深究”深入探讨了这一主题,为开发者和安全研究者提供了宝贵的洞察力。以下是对Android安全架构的详细解读: 1. **权限管理系统**:Android的权限模型是基于权限的,每个应用在安装时都会被...

    C语言外挂编写深究相关

    在IT领域,C语言因其高效、灵活和接近底层的特性,常被用于开发游戏外挂。外挂,简单来说,是指在游戏中通过编程手段获取非正常优势的程序。本主题“C语言外挂编写深究”将围绕如何使用C语言编写游戏外挂进行深入...

    《Android安全架构深究》PDF版本下载.txt

    《Android安全架构深究》一书主要探讨了Android系统的安全机制和技术细节,为读者提供了一个全面理解Android安全特性的平台。本书适合对Android安全感兴趣的开发者、测试人员以及研究人员阅读。 ### 安全基础概念 ...

    深究AngularJS如何获取input的焦点(自定义指令)

    &lt;button ng-click="getFocus()"&gt;孙爷爷我要去取芭蕉扇了&lt;/button&gt; &lt;/div&gt; &lt;script type="text/javascript"&gt; var app = angular.module('myApp', []); app.controller("control", function($scope) { $scope....

Global site tag (gtag.js) - Google Analytics