jsp页面的动态include与静态include原理

jsp包含写法有两种,一种静态包含(include指令),一种动态包含(include标签)

下面来说说这两者的区别:

静态包含:

写法:<%@ include file="..."%>

静态包含不能传递参数

动态包含:

写法:<jsp:include page="..." />

或者:<jsp:include page="..."> </jsp:include>

动态包含可以传递参数

写法:

<jsp:include page="...">
       <jsp:param value="1" name="type"/>
</jsp:include>

 

接下来是重点,分析他们的底层原理

静态包含的本质:它的本质是文件的导入(不会对导入的文件进行编译),它不管是什么文件,.jsp,.txt,.json,.html,还是各种各样的文件后缀都行。只要是文本文件就行,因为它的本质是文件的导入。

查看tomcat 中jsp用了静态包含的jsp servlet,jsp最终都会被编译成servlet class文件。反编译查看,被包含的界面原封不动的导入到被包含的jsp中。所以静态包含就是普通的文件导入。

动态包含的本质:它的本质是先编译包含的文件,然后再进行导入,而且文件只能是.jsp后缀,因为是jsp标签的动态包含,tomcat只识别jsp后缀的文件,其实再往底层分析,一个jsp就是一个servlet,动态包含,其实包含的是一个servlet,而可以传参是,传参给包含的servlet,所以动态包含相当于http请求调用了一次servlet,而这个包含的servlet就会接受参数,并且解析自己的页面数据,最后response.write发送回被包含的jsp里面,jsp会整合包含的servlet发送回的数据,然后再统一返回给前端。

思路扩展:所以,我们用动态包含的时候,不仅仅只能用.jsp文件,还可以用servlet接口,@Controller也可以(@Controller也是一个servlet接口),只要记得返回一个视图对象给被包含的jsp页面就可以了。

示例:

<jsp:include page="/foreground/content/list.do">
       <jsp:param value="1" name="type"/>
</jsp:include>

写一个 Controller,RequestMapping("/foreground/content/list.do"),然后记得再方法里返回一个视图对象,有很多种写法,示例一种,

ModelAndView a = new ModelAndView();

a.serViewName("/foreground/content/list.jsp");

这样就实现了Controller代理 jsp界面,可以在jsp里动态显示数据。

 

总结:动态include可以包含.jsp(本质是servlet),servlet,继承servlet的子类。静态include可以包含无论什么后缀都行,只要是文本文件就可以,而且静态包含不能传参数,包含的文件不进行编译。

 

如果jsp文件静态包含,去包含servlet的话,首先,jsp文件会去文件路径找这个文件,因为是一个接口,压根就没有这个文件,所以jsp文件会报错,报找不到文件异常。

 

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值