1.前言
近期接觸到公司一個(gè)jsp項(xiàng)目,用到了jstl1.2园担,著實(shí)踩了一把坑旨椒,在這簡(jiǎn)單記錄一下排雷經(jīng)過(guò)。
2.jstl使用
2.1 簡(jiǎn)介
jstl是jsp標(biāo)準(zhǔn)標(biāo)簽庫(kù)魔吐,支持SQL扎筒、XML標(biāo)簽,需要安裝酬姆,與web.xml的設(shè)置有關(guān)系嗜桌,不同版本安裝不一樣〈巧可參見:stackoverflow關(guān)于jstl的介紹骨宠。
jstl1.2 比之前版本的安裝簡(jiǎn)化了很多,有關(guān)資料:jstl的maven依賴相满,jstl教程层亿,standard jar包下載。
2.2 環(huán)境
本機(jī)環(huán)境是:Mac立美,Idea匿又,Tomcat 8.5.54,Maven 3.6.3建蹄,JDK8碌更,jstl1.2
pom.xml
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.1.2</version>
</dependency>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
</web-app>
jsp中taglib使用如下
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
2.3 問(wèn)題
如果你看過(guò)上文2.1 簡(jiǎn)介
中提供的資料裕偿,那么關(guān)于jstl是怎么回事、各版本之間的差異痛单,想必你已經(jīng)心中有數(shù)了嘿棘。下面介紹我碰到的問(wèn)題。
我拿到的是公司線上運(yùn)營(yíng)的項(xiàng)目旭绒,幫忙改bug鸟妙,代碼肯定是沒(méi)有問(wèn)題的,項(xiàng)目中關(guān)于jstl的配置在上文2.2 環(huán)境
中已經(jīng)介紹到了快压,但當(dāng)我在Idea中配置好Tomcat圆仔,嘗試啟動(dòng)項(xiàng)目時(shí),得到錯(cuò)誤信息如下:
- 無(wú)法在web.xml或使用此應(yīng)用程序部署的jar文件中解析絕對(duì)uri:[http://java.sun.com/jsp/jstl/core]蔫劣;
- java.lang.ClassNotFoundException: org.apache.jsp.views.login_jsp坪郭;
2.4 錯(cuò)誤排查
在網(wǎng)上各種百度,基本上都是說(shuō)jstl的jar包在Tomcat編譯時(shí)沒(méi)用用到脉幢。
通過(guò)「jstl教程」的介紹歪沃,可知,jstl各版本在安裝時(shí)是不一樣的嫌松,所以得按照自己的情況進(jìn)行排查沪曙。
- 首先,確認(rèn)項(xiàng)目中使用的jstl的配置沒(méi)有問(wèn)題萎羔,我這里使用的是jstl1.2液走,只需要添加依賴即可;
- 根據(jù)你使用的項(xiàng)目構(gòu)建工具贾陷,添加依賴到對(duì)應(yīng)文件缘眶,我這里使用的是maven,添加依賴到pom.xml
- 檢查jsp中taglib
- web.xml 髓废,version的版本與jstl要對(duì)應(yīng)
溫馨提示巷懈,若使用jstl1.2之前版本,需要下載對(duì)應(yīng)jstl版本的standard的壓縮包慌洪,解壓后將 jstl.jar 與 standard.jar 添加到項(xiàng)目 WEB-INF/lib下顶燕,啟動(dòng)項(xiàng)目即可
-
其次,file -> project struct -> artifacts -> output layout 冈爹,在 WEB-INF/lib 下看看有沒(méi)有你使用的jstl的jar包涌攻,如果沒(méi)有說(shuō)明Tomcat在編譯時(shí)沒(méi)有把jar包加載進(jìn)來(lái),那么需要手動(dòng)添加频伤。
上述檢查都沒(méi)有問(wèn)題癣漆,而且因?yàn)槲疫@個(gè)項(xiàng)目是公司線上項(xiàng)目,不存在是代碼問(wèn)題剂买,只可能是環(huán)境問(wèn)題惠爽。再三檢查自己機(jī)器上的Tomcat、maven配置等瞬哼,都沒(méi)有問(wèn)題婚肆。最后跟其他可以成功運(yùn)行該項(xiàng)目的同事對(duì)比了本機(jī)使用環(huán)境的區(qū)別,發(fā)現(xiàn)是Tomcat版本的問(wèn)題坐慰,切換成Tomcat 8.5.50即可正常啟動(dòng)较性,原因未知。Tomcat版本相差無(wú)幾结胀,這個(gè)結(jié)果也是我萬(wàn)萬(wàn)沒(méi)有想到的赞咙!