jsp页面中引用其他页面的简单方法 |
本文标签:jsp页面引用其他页面 初看这个标题....大家的感觉一定是好2啊.....博主一定要说jsp的动态引用(jsp:include)和静态引用(@include)了 。介绍这两者区别的文章已经烂大街了 。 。一搜一大把 。 。博主竟然还来介绍这些老古董 。 。果断alt+F4 。 。 。 如果你确实是这么想的 。 。 。那请先别急着关闭页面 。 。 。今天我来分享一下自己的理解,算是对烂大街的东西的一点补充吧 。 。 。(后面文字会比较啰嗦) 首先先说明下为什么会去讨论这个话题 。 我在写自己的博客程序的时候(blogv2.labofjet.com),程序中的目录是需要读取数据库中的数据的,而这个目录是要被多个页面引用的 。这个时候该怎么办呢 。 我那个时候用的是静态引用,在jsp页面中通过<%@include file="menu.jsp"%>引用这个目录的jsp页面片段(单独为目录做了一个jsp),缺点在于通过不同Controller跳转到不同的page的时候只要这个page包含目录的HTML片段,Controller里就需要去调用目录的dao的方法,然后去给request设置值,这样才能正常显示目录页面 。 后来我想了想,我觉得最好能写一个servlet,访问这个servlet的url,就能得到目录的HTML片段,然后在不同的页面中,只要加载这个url就相当于加载了目录的HTML片段 。这样的好处在于不同的controller里不再需要调用目录的dao了,只要有一个专门的目录Controller来处理目录的dao并设置request然后返回目录的page就行了 。然后我就想到了jsp:include 。 。 。 。 然后我就百度了一下烂大街的东西 。大部分文章都一个意思,jsp:include可以引用jsp,并动态编译 。 。blablabla 。 。 。可是它们都没有说明jsp:include可不可以引用servlet呢?我们现在不会去把逻辑放到jsp中的,一般都是放到servlet中然后再跳转到jsp中吧 。经过试验我发现是可以的 。但是有一些地方比较坑爹 。 。 。 。 。需要注意 。 。 。 jsp:include引用jsp的时候完全OK,就是网上大部分文章介绍的内容 。 jsp:include引用servlet的时候,这个servlet需要在web.xml里配置过,不然eclipse会给红色波浪线 。 不知道大家看了上面的总结有没有产生一个新的问题:现在我们写程序的时候都用一些框架,比如SpringMVC,我们没有在web.xml为每个Servlet单独配置,而是通过SpringMVC自己的配置文件去配置这些Controller(Servlet)的 。那么jsp:include还能用吗? 答案是可以的 。 。 。 。但是很坑 。 。 。坑就坑在eclipse里还是会划红线,eclipse觉得找不到这个url对应的servlet,但是实际上是可以访问的 。 另外还有个小问题,可能是我自己没设置对,我每次jsp:include的时候console里都会报java.io.IOException: Stream closed这个异常,我觉得可能是引用其他servlet的时候其他的servlet自动调用了out的close方法,导致包含其他page的page的内容不能被正常输出 。 。 。 。这个问题我没继续研究下去 。 。 。 。我想肯定是有解决办法的,但是不是我这篇文章要讨论的重点 。 这么说的话现在就有2个小问题了:一个异常,一个eclipse的红线报错 。 。 。虽然也能用,但是让人很不爽 。 。 所以就找一个替代方法吧 。 。那就是jstl的c:import 这个标签其实超级简单的 。 。 。比如我把目录HTML片段对应的url设置成了/menu,那我在包含目录的页面中只要 <c:import var="data" url="/menu" /> ${data} 就OK了 。目录就被包含到其他页面中了 。 。是不是超级简单呀! 以上这篇jsp页面中引用其他页面的简单方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家 。 |