我刚刚接触了一下jstl标签,在用jstl标签库使用的时候,感觉其他的标签还挺顺手,但在用到XML标签操作XML文件时,发现了一个小小的问题,然后上网查询了N多次还是无法解决,后来我无意中发现了解决的方法,其实方法就是很简单!但是我总结一下我的经过吧!
我的例子:
<%@page contentType="text/html" pageEncoding="GB2312"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>
<html>
<head>
<title>JSTL与XML解释</title>
</head>
<body>
<x:parse var="xmlbody">
<customer>
<customerid>2002</customerid>
<customername>tea</customername>
</customer>
</x:parse>
<b><u>解释XML本体内容</u></b><br>
客户编号(customerid):
<x:out select="$xmlbody/customer/customerid"/><br>
客户姓名(customername):
<x:out select="$xmlbody/customer/customername" /><br>
</body>
</html>
运行后报错在红色的部分!!
错误显示为:javax.servlet.ServletException: java.lang.NoClassDefFoundError: org/apache/xpath/VariableStack
我上网查了语法,但是没有发现错误,我就奇怪什么原因,
后来才知道原来是我用的包少了一个,但是为什么书和网上的解说很多的不同呢?
经过我仔细的观察,网上的uri地址原来是:uri="http://java.sun.com/jstl/xml" 而且其他标签库德引用地址都少了那个/jsp/,然后我打开了那个jar看了里面的tld文件,才知道正确的写法是有uri="http://java.sun.com/jsp/jstl/xml" jsp这个地址的,我就不明白为什么其他人写的都没有,后来寻根问底了一下,我发现原来可能跟版本有关系。不过这只是插曲,没有进入正题呢,因为我的问题还没解决。
再过后我翻了很多其他的网站和教科书,都没有发现我的错误是在那里!之后我就上官网看了一下(之前为什么不上呢,那是我英文太烂了,官网的都是鸡肠,我看的太费力了),无意中给我发现(又是无意!!我披视自己哈哈……),原来教科书说的用jstl所要用的包是:jstl.jar、standard.jar这两个包,但是不知道为什么官网上有说要加xalan.jar、serializer.jar这个包!给我尝试了一下,终于没问题了。我就是气愤啊,就因为少用加jar,我搞了差不多2天2夜(有点夸张……其实就是经历2天2夜,其中共用时就那几个小时,哈哈……)。
不过终于搞好了,心安哦,总结了一下学jstl的过程,其他什么核心标签、sql标签、函数标签都只用两个包就可以了,但涉及到操作xml,就要加上xalan.jar、serializer.jar,原因在那啊?那你上官网看看就知道了,不过全部是鸡肠,反正我是看到头晕了—_—
还有就是关于用jstl在WEB-INF\web.xml的配置,其实就不用配置什么,将那jar全部拷到WEB\INF\lib下就可以了,不过要注意你的版本问题哦,最好找比较新的,而且要看看版本更新的说明书(不过又是鸡肠,晕啊……),因为在包里的就包含了配好了tld文件。
其它就靠自己罗,看书很重要,但是我看过很多书,不知道书上为什么老是会出现这些无聊的错误!唉…………