最近找了个视频学习SSM整合的练习,在引入JSTL的时候卡了我小半天,就是导包后不报错运行时候就报错。报的错就是The absolute uri: be resolved in either web.xml or the jar files deployed with this application。找了一些资料,说的不是很清楚,倒不是说人家说的不对,而是没说清具体该怎样做。比如哪个文件该放在哪里(就因为这个我瞎调了好几个小时)。

  这里放一张错误的图片,看看是不是似曾相识:

如何在maven项目中使用jsonobject maven jstl_jstl

1.导包

在pom.xml中添加jstl1.2.jar的依赖。

如何在maven项目中使用jsonobject maven jstl_jstl_02

<!-- 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文件夹的位置。

如何在maven项目中使用jsonobject maven jstl_导包_03


  接下来以standard1.1.2.jar为例,我们看一下。为什么看这个版本,因为它的版本与jstl1.1.2.jar版本是对应着的。而且要使用这个版本就要把这两个jar包都引进项目中。我们看一下下面的对比图就知道咋回事了。

  jstl1.1.2.jar的包结构:

如何在maven项目中使用jsonobject maven jstl_maven_04


  jstl1.2.jar的包结构:

如何在maven项目中使用jsonobject maven jstl_导包_05


  所以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。

如何在maven项目中使用jsonobject maven jstl_xml_06

2.解压jar包,将后缀为.tld的文件,放到自己项目的WEB-INF文件夹下

使用jstl1.1.2.jar的就直接解压standard-1.1.2.jar,然后进到解压出来文件的META-INF文件夹中:

如何在maven项目中使用jsonobject maven jstl_jar_07


  使用jstl1.2.jar的,直接解压它就行,然后进到解压出来文件的META-INF文件夹中:

如何在maven项目中使用jsonobject maven jstl_xml_08


  

  这里以c标签为例,直接复制c.tld,放到项目的WEB-INF文件夹中(用到啥了就复制进去就行了),基本就是这个样子:

如何在maven项目中使用jsonobject maven jstl_maven_09


  到这一步,我的项目就可以运行起来了,而且也不用配置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实在是太老了,但没找到靠谱的。