JSP的动态Include的静态Include
1. 静态导入示例
先总结:
1:静态include是把被引入的文件拼接到本页面中,再做为一个整体来编译,返回结果给客户端。
动态include是分别编译本页面和被引入的页面,再把结果合成一个html,返回结果给客户端。
2:动态include可以传参数,可以include静态页面,也可以Include动态页面
静态导入指令 :
<%@include file="error.jsp"%>
- <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <title>静态导入</title>
- </head>
- <body>
- <%@include file="error.jsp"%>
- </body>
- </html>
- <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <title>这是一个静态页面</title>
- </head>
- <body>
- 静态页面内容
- </body>
- </html>
查看jsp编译之后的文件可以看到,index.jsp和error.jsp分别被编译成java文件和对应的class文件
error_jsp.class
error_jsp.java
index_jsp.class
index_jsp.java
index_jsp.java源码
- package org.apache.jsp;
- import javax.servlet.*;
- import javax.servlet.http.*;
- import javax.servlet.jsp.*;
- public final class index_jsp extends org.apache.jasper.runtime.HttpJspBase
- implements org.apache.jasper.runtime.JspSourceDependent {
- private static final javax.servlet.jsp.JspFactory _jspxFactory =
- javax.servlet.jsp.JspFactory.getDefaultFactory();
- private static java.util.Map<java.lang.String,java.lang.Long> _jspx_dependants;
- static {
- _jspx_dependants = new java.util.HashMap<java.lang.String,java.lang.Long>(1);
- _jspx_dependants.put("/error.jsp", Long.valueOf(1429692772031L));
- }
- private javax.el.ExpressionFactory _el_expressionfactory;
- private org.apache.tomcat.InstanceManager _jsp_instancemanager;
- public java.util.Map<java.lang.String,java.lang.Long> getDependants() {
- return _jspx_dependants;
- }
- public void _jspInit() {
- _el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory();
- _jsp_instancemanager = org.apache.jasper.runtime.InstanceManagerFactory.getInstanceManager(getServletConfig());
- }
- public void _jspDestroy() {
- }
- public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
- throws java.io.IOException, javax.servlet.ServletException {
- final javax.servlet.jsp.PageContext pageContext;
- javax.servlet.http.HttpSession session = null;
- final javax.servlet.ServletContext application;
- final javax.servlet.ServletConfig config;
- javax.servlet.jsp.JspWriter out = null;
- final java.lang.Object page = this;
- javax.servlet.jsp.JspWriter _jspx_out = null;
- javax.servlet.jsp.PageContext _jspx_page_context = null;
- try {
- response.setContentType("text/html; charset=UTF-8");
- pageContext = _jspxFactory.getPageContext(this, request, response,
- null, true, 8192, true);
- _jspx_page_context = pageContext;
- application = pageContext.getServletContext();
- config = pageContext.getServletConfig();
- session = pageContext.getSession();
- out = pageContext.getOut();
- _jspx_out = out;
- out.write("\r\n");
- out.write("<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\r\n");
- out.write("<html>\r\n");
- out.write("<head>\r\n");
- out.write("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\r\n");
- out.write("<title>静态导入</title>\r\n");
- out.write("</head>\r\n");
- out.write("<body>\r\n");
- out.write(" ");
- out.write("\r\n");
- out.write("<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\r\n");
- out.write("<html>\r\n");
- out.write("<head>\r\n");
- out.write("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\r\n");
- out.write("<title>这是一个静态页面</title>\r\n");
- out.write("</head>\r\n");
- out.write("<body>\r\n");
- out.write(" 静态页面内容\r\n");
- out.write("</body>\r\n");
- out.write("</html>");
- out.write("\r\n");
- out.write("</body>\r\n");
- out.write("</html>");
- } catch (java.lang.Throwable t) {
- if (!(t instanceof javax.servlet.jsp.SkipPageException)){
- out = _jspx_out;
- if (out != null && out.getBufferSize() != 0)
- try { out.clearBuffer(); } catch (java.io.IOException e) {}
- if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);
- else throw new ServletException(t);
- }
- } finally {
- _jspxFactory.releasePageContext(_jspx_page_context);
- }
- }
- }
从源代码里面可以看到,error.jsp的内容被整个融入到了index.jsp中
结论:静态include是将被导入页面的代码完全融入本页面中,两个页面融合成一个整体Servlet,返回给客户端
有一个问题,当被引入的页面中和本页面中有相同的变量定义时,会报错
2. 动态导入示例
动态导入指令
<jsp:include page="error.jsp" flush="true"></jsp:include>
- <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <title>动态导入</title>
- </head>
- <body>
- <jsp:include page="error.jsp" flush="true"></jsp:include>
- </body>
- </html>
此时index_jsp.java的源码
- out.write("\r\n");
- out.write("<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\r\n");
- out.write("<html>\r\n");
- out.write("<head>\r\n");
- out.write("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\r\n");
- out.write("<title>动态导入</title>\r\n");
- out.write("</head>\r\n");
- out.write("<body>\r\n");
- out.write(" ");
- org.apache.jasper.runtime.JspRuntimeLibrary.include(request, response, "error.jsp", out, true);
- out.write("\r\n");
- out.write("</body>\r\n");
- out.write("</html>");
可以看到动态include只是用了include方法引入了被导入的文件
结论: 动态include先编译被引入的文件,在包含到本页面中
被引入的文件和本页面中有相同的变量定义时也不会报错
3. 动态include传参数
静态include是不能传参数的
- <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <title>动态导入</title>
- </head>
- <body>
- <jsp:include page="error.jsp" flush="true">
- <jsp:param value="hello" name="param1"/>
- <jsp:param value="world" name="param2"/>
- </jsp:include>
- </body>
- </html>
- <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <title>这是一个静态页面</title>
- </head>
- <body>
- <%
- String param1 = request.getParameter("param1");
- String param2 = request.getParameter("param2");
- String param3 = "XXXXXOOOOOOO";
- %>
- <%=param1 %> <%=param2 %> <%=param3 %>
- </body>
- </html>
结果: hello world XXXXXOOOOOOO
JSP的动态Include的静态Include的更多相关文章
- jsp的动态包含和静态包含
jsp的动态包含和静态包含 例如:提取一个公共的页面(top.jsp)到/WEB-INF/jsp/common/目录下 动态包含: 被包含的页面也会独立编译,生成字节码文件,一般包含页面信息频繁变化的 ...
- JSP中动态INCLUDE与静态INCLUDE的区别
动态INCLUDE 用法: <jsp:include page="included.jsp" flush="true" /> 说明: 它总是会检查所 ...
- JSP中动态include和静态include的区别(简版)
动态的include: 用法:<jsp:include page="1.jsp" flush="true" /> 特点:行为元素,可以带参数:先编译 ...
- jsp动态include和静态Include
动态 INCLUDE 用 jsp:include 动作实现 <jsp:include page="included.jsp" flush="true" / ...
- JSP 中动态 INCLUDE 与静态 INCLUDE 的区别?
一.静态包含指令<%@include file="fileurl"%> 两个jsp页面的<%@page contentType="text/html:c ...
- JSP中动态include和静态include区别
静态include(<%@ include file=""%>): 静态include(静态导入)是指将一个其他文件(一个jsp/html)嵌入到本页面 jsp的inc ...
- JSP中动态INCLUDE与静态INCLUDE的区别?
动态INCLUDE用jsp:include动作实现 它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数 静态INCLUDE用include伪码实现,定不会检查所含文件的变化,适用于包含 ...
- JSP中动态include与静态include的区别介绍
转自:https://m.jb51.net/article/43304.htm 动态INCLUDE 用法:<jsp:include page="included.jsp" f ...
- 动态include与静态include的区别
搬一下以前写的 个人总结: 动态INCLUDE 用jsp:include动作实现 <jsp:include page="included.jsp" flush="t ...
随机推荐
- PHP中常用的字符串函数?
1.strlen() 2.strpos() 3.mb_strlen()
- yii2 刷新缓存(刷新模型缓存)
Yii2开启表结构缓存,因为当运用模型(model)时,AR的一些公共属性都会从DB中获取,这样会导致服务器负担一些额外的资源开销,实际上对于成品来说,服务器这些开始销是多余的,故应该阻止这种默认行为 ...
- Linux文件类型及目录配置
Linux文件类型与扩展名 在Linux系统中,任何硬件设备或者其他设备都是以文件的形式存在,就连数据通信的接口这些也是由专门的文件来负责的,因此Linux的文件种类就非常多,出了之前我们常见的 - ...
- System、应用程序进程的Binder线程池和Handler消息循环
首先看一张Android系统启动流程图:
- 使用bbed编辑研究oracle数据块结构
bbed是随oracle软件公布的一款数据块查看和编辑工具,作为一款内部工具.bbed的功能很强大,可是假设使用不当可能给数据库造成无法挽回的损失.因此.我们建议在使用bbed改动数据块前备份被改动的 ...
- UTI 唯一类型标识
本文转载至 http://blog.csdn.net/zaitianaoxiang/article/details/6657231 applicationdocumentationtypessys ...
- git更新代码出现错误
git pull代码时,出现如下的错误: SSL certificate problem: unable to get local issuer certificate 主要的原因是:没有ssl证书 ...
- node.js的安装与第一个hello world、node.js的初始化
1.下载node.js文件 2.windows下点击安装 重复下一步即可 3.编辑工具 EditPlus编辑器 4.新建保存目录的文件夹,并新建一个文本文档 5.打开EditPlus编辑器 打开 ...
- 《从零开始学Swift》学习笔记(Day4)——用Playground工具编写Swift
Swift 2.0学习笔记(Day4)——用Playground工具编写Swift 原创文章,欢迎转载.转载请注明:关东升的博客 用Playground编写Swift代码目的是为了学习.测试算法.验证 ...
- JavaScript深入理解sort()方法
一. 基本用法 let arr1 = [3, 5, 7, 1, 8, 7, 10, 20, 19] console.log(arr1.sort()) // [1, 10, 19, 20, 3, 5, ...