JSP静态包含和动态包含

contentType和pageEncoding设置编码有什么区别
pageEncoding指的是JSP文件本身的编码,而contentType中的charset指的是服务器发送给客户端的内容编码。
在JSP中,如果pageEncoding存在,那么JSP的编码将由pageEncoding决定,否则将由contentType中的charset属性决定;如果两者都不存在,则将使用ISO-8859-1的编码方式。
在JSP中,所有的内容都要经过两次的编码操作,第一阶段会使用pageEncoding编码,第二阶段会使用utf-8编码,第三阶段就是tomcat生产的网页,此时使用的是contentType。
从一般的开发来讲,如果一个JSP页面只需要按照网页显示(text/html),则使用pageEncoding设置编码即可。


JSP的静态包含和动态包含
静态包含<%@include%>指令时在JSP编译时插入一个包含文本或代码的文件,这个包含的过程是静态的。静态包含实际上是先把包含的文件的内容导入到主文件中,然后再一起进行编译,最后才将一份整体的内容展现给用户,也就是属于先包含,然后再将全部的代码进行集中的编译处理。
动态包含<jsp:include>语句可以自动区分被包含的页面是静态还是动态。如果是静态页面,则与静态包含一样,将内容包含进来处理;而如果被包含页面是动态页面,则可以先进行动态处理,然后再将处理后的结果包含进来。
两种包含语句<%@include%>和<jsp:include>的操作形式非常类似,在使用上有什么区别?在实际开发中使用哪种更好呢?
答案是:使用动态包含更好。
静态包含的操作属于先包含后处理,而动态包含如果被包含的页面是动态页,则属于先处理后包含。为了说明这点,可以通过以下程序进行观察。
范例:定义被包含动态页——include.jsp
<%
int x = 10;
%>
<h1>include.jsp--<%=x%></h1>
然后使用静态包含页面的操作导入以上的页面,而且在此页面中也定义一个x变量,内容为100。
定义静态包含处理页——include_demo04.jsp
<%@ page contentType="text/html" pageEncoding="GBK"%>
<html>
<head><title></title></head>
<body>
<%
int x = 100;
%>
<h1>include_demo04.jsp--<%=x%></h1>
<%@include file="include.jsp"%>
</body>
  </html>
以上页面执行时出现了500的错误,错误提示如图所示。
错误的信息提示是定义了重复的变量x,造成这种问题的根源就是,静态包含是先将全部的内容包含在一起,然后再一起编译,这样一来,x变量就相当于定义了两次,所以出现了以上的错误。
而如果使用动态包含的操作,就可以避免以上的问题,因为动态包含如果被包含的页面是动态页,则会先分别进行处理,然后再包含处理后的结果。
定义动态包含处理页——include_demo05.jsp
<%@ page contentType="text/html" pageEncoding="GBK"%>
<html>
<head><title></title></head>
<body>
<%
int x = 100;
%>
<h1>include_demo05.jsp--<%=x%></h1>
<jsp:include page="include.jsp"/>
</body>
</html>
使用动态包含后,页面可以正常执行,执行结果如图所示。
因为静态包含是分别处理的,所以以上程序不会出现任何内容,因为在实际的开发中很难保证不出现变量重复的问题,所以使用动态包含会更加方便,而且使用动态包含还可以向被包含的页面方便地进行参数的传递,所以在这里笔者建议读者使用动态包含进行程序的开发。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值