本文只是简单介绍<c:import />标签的用法,并不详细介绍这个标签是怎么一个原理、和其他相似功能标签的区别等等问题,因为我自己也没有去深入了解过。
0、场景
早前,我也不知道这个标签,直到有一个场景,我才开始使用这个标签,但是也仅仅是简单使用,并没有过多深入的了解,所以对希望了解这个标签详细使用事项的朋友们说声“对不住了”。
当时的场景是这样的:项目是使用Spring MVC和jsp做的页面展现相关的工作,用过Spring MVC的应该知道,所有的页面相关的资源包括图片、css、js、jsp等等都是放在<web>/WEB-INF下面的,用户直接输入路径是访问不到的,必须通过界面控制器实现访问;这个本来很不错,便于权限控制,同时也想用户隐藏了真实的目录结构等,好处先就说到这里,接下来是问题;下载页面中有一处需要在页面加载过程中,动态加载一个页面的内容进来。
1、解决办法
想来也容易啊,直接来一个
<jsp:include />
但是,经过试验,以前使用的各种包含页面的方式都不行,原因就是根本访问不到那个页面文件。
这个简单的问题,要是在struts2里面,一个简单的
<s:action />
也就是分分钟的事,但是这里是Spring MVC,技术不能说换就换,于是乎上网查询解决办法。
由于过去有一段时间了,忘记是在哪里找到的了,反正解决办法就是使用JSTL的一个标签:
<c:import />
2、具体的使用
下面说一说我的具体使用,供大家参考。
页面所在的路径是
<webapp>/WEB-INF/jsp/home/foot.jsp
如前所述,直接访问是不行的,所以我写了一个控制器,也简单,就是直接返回这个页面就是了,
@Controller
@RequestMapping(value = "/home")
public final class HomeController extends BaseController {
//省略其他不相关代码
//……
@RequestMapping(value = "/foot")
public String footPage() {
return "home/foot";
}
}
这个控制器的访问地址就是
<ROOT>/home/foot
拿在需要加载foot.jsp页面的jsp文件的对应位置添加如下代码
<c:import url="/home/foot"/>
当然,为了能够正常使用这个标签,还需要导入相关的JAR包,在jsp文件头部加上引入标签,
在pom.xml文件中加入
<dependency>
<groupId>org.apache.taglibs</groupId>
<artifactId>taglibs-standard-spec</artifactId>
<version>1.2.5</version>
</dependency>
<dependency>
<groupId>org.apache.taglibs</groupId>
<artifactId>taglibs-standard-impl</artifactId>
<version>1.2.5</version>
</dependency>
没有使用maven的朋友请去这个地址下载http://tomcat.apache.org/download-taglibs.cgi
在jsp文件头部加入
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
3、注意事项
①该标签会直接将请求来的结果插入到标签所在位置,所以放对位置很关键,影响布局;
②在标签中可以使用<c:param name=""></c:param>标签来传递参数,不过我没有试验过;
③你可能注意到了,我在标签中写的地址是直接的相对于项目根路径的地址,而不是相对于服务器访问根路径的地址,这个具体的原理我也没有搞清楚;
④虽然我是加载一个页面,但是完全可以用在所请求的url结果是任意文本的情况,也有可能只是请求了,没有返回内容;
4、后记
这篇文章本打算很久之前就该写的,但是由于一直没有去深入的研究这个标签的用法,又很想将它很详细的写出来,所以就一拖再拖,直到今天,我觉得我不会再去深究它的用法和原理以及与其他类似标签的区别了,如果再不写以后估计就忘了,所以就写了下来,还有很多不足之处,还望大家不吝赐教。
enjoy!