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页面中引用其他页面的方法的更多相关文章
- 在一个jsp页面中引用另一个jsp文件的路径的问题
为了提高代码的重用性,经常需要在一个jsp页面中引用另一个jsp文件的代码.关于引用时的路径的问题.下面只介绍动态引用的,我觉得静态引用的应该也一样. 相对路径: 一.在同一个文件夹下,a.jsp中引 ...
- nodejs之获取客户端真实的ip地址+动态页面中引用静态路径下的文件及图片等内容
1.nodejs获取客户端真实的IP地址: 在一般的管理网站中,尝尝会需要将用户的一些操作记录下来,并记住是哪个用户进行操作的,这时需要用户的ip地址,但是往往当这些应用部署在服务器上后,都使用了ng ...
- Python抓取页面中超链接(URL)的三中方法比较(HTMLParser、pyquery、正则表达式) <转>
Python抓取页面中超链接(URL)的3中方法比较(HTMLParser.pyquery.正则表达式) HTMLParser版: #!/usr/bin/python # -*- coding: UT ...
- shell中引用其他脚本的方法
在Shell中引用其他脚本的方法是source filename.sh 或 . filename.sh 注意: . 和 filename.sh之间必须有空格
- HTML页面中常见的一些小方法
在<Head>标签中加 <meta http-equiv="pragma " content="no-cache"> <met ...
- web.config中namespace的配置(针对页面中引用)
1,在页面中使用强类型时: @model GZUAboutModel @using Nop.Admin.Models//命名空间(注意以下) 2,可以将命名空间提到web.config配置文件中去,此 ...
- VS中引用第三方库的方法(配置sqlite数据库)
我们在编写程序时,,不可避免的会使用第三方的库文件,很少使用源文件(.cpp),大部分是使用对类进行声明的头文件和封装了类的链接库(静态lib或动态dll),比如我们写程序用的iostream这个库, ...
- React中引用CSS样式的方法
相对于html中引用css的三种方法,react中也有三种方法,一一相对: 1. 行内样式:直接在组件内部定义 <div style={{width:'20px',height:'30px'}} ...
- Xamarin Android中引用Jar包的方法
新建一个Java Bingdings Library 将Jar包复制,或使用添加已存在的文件,到Jars文件夹中 确认属性中的“生成操作” 如果有类型转换不正确,请修改Transforms文件夹中的相 ...
随机推荐
- mybatis 配置返回集合collection时只有一条记录
查询语句配置如下: <select id="selectCustomerList" resultMap="CustomerDtoMap" paramete ...
- MariaDB的GTID复制和多源复制
什么是GTID? GTID就是全局事务ID(global transaction identifier ),最初由google实现,官方MySQL在5.6才加入该功能.GTID实际上是由UUID+TI ...
- 利用keepalived和haproxy配置mysql的高可用负载均衡
实验系统:CentOS 6.6_x86_64(2.6.32-504.30.3.el6.x86_64) 实验前提:防火墙和selinux都关闭 实验说明:本实验共有4台主机,IP分配如拓扑 实验软件:k ...
- JAVA中内部类和同文件非内部类的总结
java文件的顶层类(即非其它类的内部类),可见范围只有public和非public(包内可见)2种,不能用private或protected修饰.1个Java文件只能有一个public类,且必须与文 ...
- 第27章 java I/O输入输出流
java I/O输入输出流 1.编码问题 import java.io.UnsupportedEncodingException; /** * java涉及的编码 */ public class En ...
- Unity Shader入门
Unity Shader入门 http://www.cnblogs.com/lixiang-share/p/5025662.html http://www.manew.com/blog-30559-1 ...
- 深入理解Java:类加载机制及反射
说明:本文乃学习整理参考而来. 一.Java类加载机制 1.概述 Class文件由类装载器装载后,在JVM中将形成一份描述Class结构的元信息对象,通过该元信息对象可以获知Class的结构信息:如构 ...
- 基于Xenomai的实时Linux分析与研究
转自:http://blog.csdn.net/cyberlabs/article/details/6967192 引 言 随着嵌入式设备的快速发展,嵌入式设备的功能和灵活性要求越来越高,很多嵌入式设 ...
- Windows操作系统组策略应用全攻略
作者:佚名出处:IT专家网论坛2007-07-23 13:31 一.什么是组策略 (一)组策略有什么用? 说到组策略,就不得不提注册表.注册表是Windows系统中保存系统.应用软件配置的数据库,随着 ...
- 【原创】相对完美的垂直居中popup(modal/dialog),无需监听window.resize事件
<table class="popup" style="position: absolute; background-color: black; border-ra ...