最近在练手做一个小Demo中,比较多的用到了jsp引入另一个jsp的例子,感觉很简单,但是不幸出现了错误500,于是查找了一些资料来了解一下关于jsp包含的方法,这里分享出来,个人总结,可能不够完善,欢迎批评指正。

我们都知道在jsp中include有两种形式,分别是 :<%@ include file=”要引入的文件 ”%> ;<jsp:include page=” 要引入的文件” flush=”true”/>

前者是指令元素、后者是行为元素。

<%@ include file=”要引入的文件 ”%>

这种包含叫做静态包含,主页面不能够向被包含的页面传递参数,可以包含任意类型的文件,将包含文件的内容加载。也就是说,使用这种方法包含文件,它不管其内容如何,不过是静态页面还是动态页面都首先将页面的内容先加进来。

<jsp:include page=” 要引入的文件” flush=”true”/>

这种包含我们称为动态包含,表示的是包含页面可以向被包含的页面传递参数和变量。他的特点是能动态区别加进来的是动态页面还是静态页面,对于静态页面则直接将资源包含(仅取其文本),这个时候和上面的静态包含区别不大,而对于动态页面,如jsp页面,他会先执行后加载。

静态包含和动态包含各有各的特点,也有其分别适用的场景,只有真正理解了他们的不同,才能够更好的使用他们,对于静态包含,无论它要包含什么类型的文件,它都是要先加载进来,然后合并之后再去被编译,换言之,对系统而言,他们属于一个页面,只被编译一次。我们知道,jsp页面不能原封不动地被传送给浏览器,所有的jsp元素都必须首先由服务器进行处理。这是通过将jsp页面转达化成servlet,然后执行这个servlet来完成的。服务器需要一个jsp容器来处理jsp页面。jsp容器通常以servlet的形式来实现,这个servlet经过配置,可以处理对jsp页面的所有请求。

这里举一个简单的小例子来说明一下

首先写一个主页面:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><base href="<%=basePath%>"><title>jsp中包含的用法</title></head><body><h3>include用法</h3><%@ include file="beIncluded.jsp" %></body>
</html>

被包含页面:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><title>被引入界面</title></head><body>这是被引入界面的内容</body>
</html>

运行include.jsp后出现的界面如下:

可以看到它已经被成功的包含进去了,我们打开tomcat编译后的class文件夹下面可以看到:

编译之后,被包含文件beIncluded文件找不到被编译之后的class文件,而是随包含文件一起被编译了。

现在我们使用动态包含,<jsp:include page="beIncluded.jsp" flush="true"/>,其余代码不变,执行,打开编译后的class文件下我们可以看到,

我们可以看到,动态包含对于系统来说,他们不属于一个页面,而是要被编译两次,产生两个class编译文件,它是先被编译执行之后,然后才被包含进去。明白了这一点,我们就能很好的把握这两种包含方法了。
例如,对于静态方法,由于它是先被包含后被编译,所以,我们可以把参与静态包含的页面理解为一个页面,这时他的编码统一问题,例如出现错误500,可能是<%@ page language=”java” contentType=”text/html;charset=UTF-8%>这句被加载了两次,这时我们可以直接删除被包含页面的这句代码。例如出现无法编译,重复定义错误等情况,可能是两个页面有定义相同的方法名或变量,如:

包含页面:

<%String name="熊九天" ;%><%@ include file="beIncluded.jsp" %><%=name %>

被包含页面:

<%String name="大熊" ;%><%=name %>

name重复,就会出现错误,而对于动态包含方法,这点可以不用考虑,因为它是先进行编译后进行合并。

总之,理解他们底层原理之后,进行页面的包含,出现例如编码乱码,重复定义等错误之后我们可以很轻松的搞定,合理使用包含方法也会使我们事半功倍。

jsp引入页面,即包含文件的两种方法介绍相关推荐

  1. C#读写txt文件的两种方法介绍[转]

    C#读写txt文件的两种方法介绍 1.添加命名空间 System.IO; System.Text; 2.文件的读取 (1).使用FileStream类进行文件的读取,并将它转换成char数组,然后输出 ...

  2. C#读写txt文件的两种方法介绍

    1.添加命名空间 System.IO; System.Text; 2.文件的读取 (1).使用FileStream类进行文件的读取,并将它转换成char数组,然后输出. byte[] byData = ...

  3. jsp:jsp包含文件的两种方式

    第一种:include指令 include指令:当JSP转换成Servlet时引入指定文件(指令元素),这是一种静态包含,它运行的时候不会单独编译成.class文件,它生成一个新的整体.class文件 ...

  4. xp系统网页java不显示,xp系统打开jsp文件的两种方法

    使用xp系统的时候会碰到各种文件,比如png.log.exe等等,一位用户说遇到后缀名是jsp的文件,jsp文件是什么?有什么作用呢?jsp格式文件是一种动态网页技术标准,是用java script脚 ...

  5. HTML5动态加载资源方式,动态加载JavaScript文件的两种方法

    这篇文章主要为大家详细介绍了动态加载JavaScript文件的两种方法,感兴趣的小伙伴们可以参考一下 第一种便是利用ajax方式,把script文件代码从背景加载到前台,而后对加载到的内容经过eval ...

  6. 多个html如何套用套一个头部,Vue.js项目中管理每个页面的头部标签的两种方法...

    在 Vue SPA 应用中,如果想要修改 HTML 的头部标签,如页面的 title ,我们只能去修改 index.html 模板文件,但是这个是全局的修改,如何为每个页面都设置不一样的 title ...

  7. 文字转语音文件的两种方法

    文件转语音文件的两种方法.小伙伴们在日常的工作.学习或是生活当中,是否遇到过以下这种情况.在工作中每天要阅读大量文件资料,在学习中每天要阅读各种课文,在生活中也会观看各种小说.但是长时间的用眼阅读,就 ...

  8. java遍历文件和归类_java读取文件的两种方法:java.io和java.lang.ClassLoader

    java读取文件的两种方法:java.io和java.lang.ClassLoader 什么时候使用java.io,什么时候使用java.lang.ClassLoader呢? (注:要是之前读xml文 ...

  9. 导入mdf文件的两种方法

    导入mdf文件的两种方法: 1: 在企业管理器里面的菜单 操作->所有任务->附加数据库里面,根据需求填写就搞定了. 2:在查询分析器里执行如下语句 exec sp_attach_db ' ...

最新文章

  1. 使用session防止表单进行重复提交
  2. 我的Ubuntu9.10安装与配置100
  3. SqlDataAdapter的使用注意事项
  4. 云计算炒作多过采纳 普及仍需时日
  5. 网络协议 8 - TCP协议(上):性恶就要套路深
  6. HDU4675【GCD of scequence】【组合数学、费马小定理、取模】
  7. 什么是SoC?什么是IP核?它们有什么关系?
  8. Windows开启ssh服务配合 IOS 快捷指令完成骚操作
  9. 浅析DNS劫持和HTTP劫持
  10. 中国联通5G网络架构
  11. python计算1的平方减2的平方加3的平方减4的平方怎么算_墙体的面积怎么算的快?墙的平方快速计算方法...
  12. 思维方法和高效学习及记忆法总结
  13. js pug 代码_Pug模板(一)
  14. [IOS/Swift]'Project Name' was compiled with optimization
  15. 宋星专访:一条特立独行的数据私有化之路
  16. AlphaControls 控件 编辑皮肤 变更Glyphs控制符号
  17. 雅虎口碑将关闭站长天下服务平台
  18. Win10家庭版实现远程桌面 RDPWraper -解决not supported ,not listening问题
  19. 大数据需要学哪些内容
  20. 【游戏编程扯淡精粹】游戏编程设计模式

热门文章

  1. 网易传媒回应“变相裁员 ”说法:假消息,将提起诉讼
  2. 天猫公布618战报 苹果2分45秒破亿 你贡献了多少?
  3. 暴风集团否认暴风TV公司解散:融资事项正在加紧推进中
  4. Spring容器创建流程(5)bean后置处理之注册
  5. redis lua 设置过期_详解 Redis 内存管理机制和实现
  6. stb_image 读写
  7. Linux移植随笔:终于解决Tslib的问题了
  8. 解压tar.xz文件
  9. Docker安装运行mysql
  10. 用python自己做游戏_练习项目20:使用python制作游戏(中)