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了。目录就被包含到其他页面中了。。是不是超级简单呀?!

瞬间感觉世界真美好.....

时间: 2024-08-02 02:49:44

jsp页面中引用其他页面的方法的相关文章

裴东辉-在jsp页面中使用&lt;%!%&gt;写java方法

<%!%>是声明标签 因为Jsp页在到tomcat的时候会被编译为java文件 jsp页面里面的所有东西都会包含在一个方法里 如果不用声明标签去声明这是个方法 就会报错了 因为方法里面不能有方法 裴东辉-在jsp页面中使用<%!%>写java方法

shell中引用其他脚本的方法

在Shell中引用其他脚本的方法是source   filename.sh 或    .    filename.sh 注意:      .   和   filename.sh之间必须有空格

HTML页面中常见的一些小方法

在<Head>标签中加 <meta http-equiv="pragma " content="no-cache"> <meta http-equiv="Cache-Control " content="no-cache,must-revalidate"> <meta http-equiv="expires " content="Wed,26 Feb 19

web.config中namespace的配置(针对页面中引用)

1,在页面中使用强类型时: @model GZUAboutModel @using Nop.Admin.Models//命名空间(注意以下) 2,可以将命名空间提到web.config配置文件中去,此时的引用变为: @model GZUAboutModel//页面中只需要这一行代码 2.1在web.config配置文件中需要这样做. 第一步,namespace中添加节点 <namespaces> <add namespace="Nop.Admin.Models" /&

Xamarin Android中引用Jar包的方法

新建一个Java Bingdings Library 将Jar包复制,或使用添加已存在的文件,到Jars文件夹中 确认属性中的“生成操作” 如果有类型转换不正确,请修改Transforms文件夹中的相应转换文件 之后编译此项目,在Android项目中引用 即可

在awk代码中引用shell变量的方法

一个香栗子胜过千言万语 #!/bin/bash foo="Good" # 不带空格 bar="Hello World" # 带空格 awk 'BEGIN { print "'$foo'"; "'"$bar"'" }' 上面的栗子中,保持了用单引号把awk代码包围起来的惯例. 在awk代码中引用shell变量时, 使用一对双引号,内嵌一对单引号, 再在这一对内层单引号里面按$var(适用于不含空格的shell

通过CSS控制页面中的内容垂直居中的方法

方法一:通过行高(line-height)定位 line-height通常是用于调节一段文字的行与行之间的距离,或者说两行文字之间的距离,如果行高是500px,那么每一行中的文字距离本行的顶部就是250px,如果将文字的行高设为500px,并且外面的容器高度也设为500px,就可以实现这行文字垂直居中,这样做的缺点是如果内容过多,文字就跑到了下一行,就不是居中了,所以限制较多. 具体代码: <html> <head> <style> body { margin: 0;

asp.net 页面中引用log4net,添加日志操作

最近在一个项目中使用到了log4net.dll用于记录操作日志,从网上找的大部分资料都是在每个需要输出日志的类中都先声明一下,然后再调用它的输出函数,如debug,error等等 如果是一个小的项目,这样比较简单,使用起来很容易,但是如果项目涉及多个解决方案,比如我现在的贸易系统项目,每天的流水会达到几个亿,会涉及多个操作类型,因此就需要有详细的日志记录信息, 如果还用以前的方式会比较麻烦,因此就按照项目需要,单独创建一个dll用于实现记录日志. 1.下载一个log4net.dll 2.创建一个

微信跳转手机默认浏览器提示 微信h5页面中下载第三方app的方法

由于微信的限制,应用文件在内置浏览器中下载全部被屏蔽掉,造成很多人用微信扫描二维码下载时点击下载按钮没反应,我想到的是做一个提示用户在浏览器中打开下载. 可以参考:微信打开网址添加在浏览器中打开提示 和 微信扫描打开APP下载链接提示代码优化. 其实原来很简单,就是判断当前是在微信内置浏览器中,然后将默认隐藏的提示层显示出来. 案例如下: 一.遮罩提示: 二.微信跳转:微信自动跳转手机默认浏览器打开下载链接 安卓展示:直接跳转浏览器下载APK 苹果展示:直接跳转打开苹果商店 部分关键代码 第一步