最近找了个视频学习SSM整合的练习,在引入JSTL的时候卡了我小半天,就是导包后不报错运行时候就报错。报的错就是The absolute uri: be resolved in either web.xml or the jar files deployed with this application。找了一些资料,说的不是很清楚,倒不是说人家说的不对,而是没说清具体该怎样做。比如哪个文件该放在哪里(就因为这个我瞎调了好几个小时)。
这里放一张错误的图片,看看是不是似曾相识:
1.导包
在pom.xml中添加jstl1.2.jar的依赖。
<!-- jstl -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
导包这里我直接到的jstl1.2版本的。因为在jstl1.2中直接就有standard.jar。为啥这么说,因为我把jstl1.2.jar下了下来,解压看了一下,发现standard.jar已经在jstl1.2.jar中,这里给大家分享一下。先看一下下面这张图。我们来看一下standard文件夹的位置。
接下来以standard1.1.2.jar为例,我们看一下。为什么看这个版本,因为它的版本与jstl1.1.2.jar版本是对应着的。而且要使用这个版本就要把这两个jar包都引进项目中。我们看一下下面的对比图就知道咋回事了。
jstl1.1.2.jar的包结构:
jstl1.2.jar的包结构:
所以jstl1.1.2需要这样引入:
<!-- jstl -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
导入结果跟jstl1.2.jar基本就一样了,只不过1.2是一个jar。1.1.2是两个jar。
2.解压jar包,将后缀为.tld的文件,放到自己项目的WEB-INF文件夹下
使用jstl1.1.2.jar的就直接解压standard-1.1.2.jar,然后进到解压出来文件的META-INF文件夹中:
使用jstl1.2.jar的,直接解压它就行,然后进到解压出来文件的META-INF文件夹中:
这里以c标签为例,直接复制c.tld,放到项目的WEB-INF文件夹中(用到啥了就复制进去就行了),基本就是这个样子:
到这一步,我的项目就可以运行起来了,而且也不用配置web.xml。
3.配置web.xml(没深究,反正不配也好使)
<jsp-config>
<taglib>
<taglib-uri>http://java.sun.com/jsp/jstl/core</taglib-uri>
<taglib-location>/WEB-INF/c.tld</taglib-location>
</taglib>
</jsp-config>
总结
总感觉肯定有新的配置方式,因为这个jar实在是太老了,但没找到靠谱的。