jsp引入页面,即包含文件的两种方法介绍
2017-02-24 21:07
381 查看
我们都知道在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重复,就会出现错误,而对于动态包含方法,这点可以不用考虑,因为它是先进行编译后进行合并。
总之,理解他们底层原理之后,进行页面的包含,出现例如编码乱码,重复定义等错误之后我们可以很轻松的搞定,合理使用包含方法也会使我们事半功倍。
相关文章推荐
- common.js中写方法,引入jsp页面的两种方式
- JSP包含jsp文件两种方法的区别
- Jsp页面里引入一个javascript文件,在jsp的onclick里怎么添加脚本文件里的方法
- Jsp页面中判断字符串是否包含另一个字符串的两种方法,js判断包含的indexOf()方法
- jsp中有两种包含页面的方法
- JSP中的两种包含页面的方法
- JSP中的两种包含页面的方法
- JSP中的两种包含页面的方法
- jsp包含文件的两种方法
- 在页面中包含两种语言编码的方法
- 解决JSP引入JS文件后,JS文件中字符在页面上显示为乱码问题
- 用JSP实现上传文件的两种方法
- 用JSP实现上传文件的两种方法
- JSP页面间传递参数方法介绍
- jsp页面导入外部文件的3种方法
- JSP页面间传递参数方法介绍
- 接上一篇,在cs文件中往页面动态添加meta标签时出现“控件包含代码块(即 ),因此无法修改控件集合”错误的解决方法
- jsp页面导入外部文件的3种方法
- jsp引入js,css文件的方法
- 用JSP实现上传文件的两种方法