1. 程式人生 > >記第一次使用maven3.2 jstl1.2時包找不到和包衝突的解決

記第一次使用maven3.2 jstl1.2時包找不到和包衝突的解決

初學javaweb,在看孫衛琴老師的javaweb開發15章講JSTL core標籤庫的時候跑了一下書上的程式碼,window10,java 1.8,cmd+tomcat8.15,(剛開始,不想用IDE,所以都是cmd)。書本程式碼目錄結構

|--ch15: namelist.jstp, out.jsp

|--META-INF: context.xml

|--src

|-- mypack: CounterBean.java

|--WEB-INF: web.xml

|-- classes

|--mypack:null

|-- lib: jstl.jar, standard.jar

 chrome訪問http://localhost:8080/ch15/out.jsp執行出錯,大概是找不到jstl-el表示式出錯的問題。這裡詳細的錯誤不記得了。我檢查了程式碼確定沒有錯,/lib/jstl是1.1的包,按照網上說的jstl1.1就是這麼放的,應該沒問題。繼續搜,發現好多講了從jstl1.0到jstl1.2需要把out.jsp等使用tag的開始行<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>改為<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>,檢查沒有問題。

然後乾脆換1.2吧,就把上述lib下面的兩個jar檔案刪除了,從apache官網http://tomcat.apache.org/download-taglibs.cgi下載了jstl1.2的h包, 發現 網頁 上有4 個, 不管了全下,然後放在lib目錄下,reload ch15, 發現還是類似的錯誤。有點不開心。然後仔細看了一下官方的教程https://www.apache.org/dist/tomcat/taglibs/taglibs-standard-1.2.5/README_bin.txt,截圖如下

咦,發現貌似少了xalan和serializer是吧,於是就跑http://www.mvnrepository.com/這下載了最新版本的上面兩個包放在了lib下,reload在訪問,還是不行...這個時候就有點gg了。然後呢,網上還有說把jstl包放在%CATALINA_HOME%/lib然後刪除lib下面的包的,照做,預感中的繼續不對啊。這個時候就有點無奈了,睡覺了。

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

第二天再戰,留意到這個網搜的時候各種解決辦法都提到了maven(由於現在第一個專案剛開始,後面maven估計少不了),於是就抱著順帶maven看能不能搞定的想法配置了maven。安裝和PATH設定不說了,包括更早的jre PATH配置什麼的。cmd下mvn -version沒問題的話基本就行,到了建立web-app時(其實這裡還是有各種問題的,網上說的好多都是用IDE的,還好後面還是找到了用cmd來的,非常感謝,詳細見文末尾連結)。這裡就直接把過程說完吧。按照下面的來:

cmd到放置工程的目錄(我的在myproj/),執行

mvn archetype:generate -DgroupId=cn.luxh.app -DartifactId=mych15 -DarchetypeArtifactId=maven-archetype-webapp -DinteractivMode=false

這個過程可能有點,注意看下上面的mych15是新的工程名,然後把書本原始工程目錄(或者原工程目錄)ch15下的所有檔案拷貝到mych15\src\main\webapp下,刪除mych15\src\main\webapp\WEB-INF\classes\mypack\和mych15\src\main\webapp\WEB-INF\lib\下面的所有檔案,然後把mych15\src\main\webapp\src的mypack資料夾剪下到mych15\src\main\java\下(這是可能沒有\java,手動建立),然後刪除mych15\src\main\webapp\src。

然後(參考http://blog.csdn.net/haolongabc/article/details/50378611),修改mych15\pom.xml,在<dependencies>下加入

<dependency> <groupId>javax.servlet.jsp.jstl</groupId> <artifactId>jstl-api</artifactId> <version>1.2</version> </dependency> 然後再mvn compile,mvn package,把war包拷貝到%CATALINA_HOME%/webapps/下,reload再訪問還是錯滴,java.lang.NoClassDefFoundError。然後繼續按照參考中說的再改<dependency>,如下 <dependency> <groupId>javax.servlet.jsp.jstl</groupId> <artifactId>jstl-api</artifactId> <version>1.2</version> <exclusions> <exclusion> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> </exclusion> <exclusion> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.glassfish.web</groupId> <artifactId>jstl-impl</artifactId> <version>1.2</version> <exclusions> <exclusion> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> </exclusion> <exclusion> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> </exclusion> <exclusion> <groupId>javax.servlet.jsp.jstl</groupId> <artifactId>jstl-api</artifactId> </exclusion> </exclusions> </dependency> 說的大概是%CATALINA_HOME%/lib如果放了servlet-api,jsp-api,jstl-api了,現在需要<exclusion>一些重複引入的包,可能會衝突,此外還要注意參考裡面也大概講了為什麼只要加入jstl-api和jstl-impl。到此我以為就要成功了,再mvn compile, mvn package拷貝war, reload,訪問,結果是 org.apache.jasper.el.ELContextImpl cannot be cast to org.apache.jasper.runtime.ELContextImpl
果然還是驚喜不斷啊。 接下來在https://stackoverflow.com/questions/12384779/org-apache-jasper-el-elcontextimpl-cannot-be-cast-to-org-apache-jasper-runtime-e中看了一下第一個回答,應該是很有道理了,說的是WEB-INF/lib下的jasper,jetty,servlet和%CATALIAN_HOME%/lib下面的這些包衝突,我一看mych15工程下的WEB-INF/lib是空的啊,好像不太是這個問題。再搜,發現好幾個類似問題的回答最後都定向到了這條問答,絕望之中我就把往下翻了翻各種點贊不是很多的回答,發現了最後一條如下:
咦,難道我%CATALIAN_HOME%/webapps/下面還有其他工程有jstl衝突,不管了,一個一個查過去,終於啊,在example/WEB-INF/lib下面發現了兩個1.2.5版本jstl-spec和jstl-impl包,由於不知道這個examples是哪裡來的了,先剪下掉這兩個jar包到桌面備份這吧。重新編譯,訪問,這下總可以了吧。然而還是炸了。此刻我心裡這是一萬隻**馬,甚至想到了別人說程式設計師***之流的話。雖然絕望,但是報錯相同,說明基本上是包衝突了,繼續搜吧。 接下來https://stackoverflow.com/questions/16624487/http-status-500-java-lang-noclassdeffounderror-could-not-initialize-class-org最後一條,
講的還是衝突問題,不過這次可不是%CATALINA_HOME%/lib了,是jre/lib/ext。好,那就去找吧,果然在這個目錄下找到了jsp-api.jar和jsp-servlet.jar。刪了,重開,終於是正常運行了
這裡說一下,這個url裡面的ch15。上面在將maven建工程的時候說新的工程是mych15只是為了上面的表述和原始工程ch15區分,實際上我自己在maven建的還是ch15,所以這裡拷貝war過去訪問的也是ch15,。輸出就是簡單的jstl/core中的標籤替換。 然而為什麼我的jre/lib/ext裡面會有jsp和servlet呢,現在這兩個檔案在%CATALINA_HOME%/lib目錄下有了(但是不知道裝上tomcat的時候是否有)。我想起來,應該是我前幾天首次使用servlet和jsp的時候,不知道為啥編譯的錯誤說包缺失是吧,然後也是網搜,然後有說吧這兩個包放在/WEB-INF/lib下的額,有說放%CATALINA_HOME%/lib下的,當然還有說放在jre/lib/ext下的,然後我可能是%CATALINA_HOME%/lib和jre/lib/ext都放了,而且更加奇怪的是在使用jstl之前所有用到servlet的jsp都是正常執行,知道現在這次血崩事故。確實剛入門,java看了一週,javaweb一週,基本還是啥都不懂的狀態。 總結一下: 1.maven的cmd建立簡單工程和各個檔案的放置,另外\src\main\resource下放的檔案貌似是*.properties之類的,這個再搜搜。 2.jstl的依賴,如果用maven,可以在dependence使用 <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>
<dependency>
    <groupId>org.glassfish.web</groupId>
    <artifactId>jstl-impl</artifactId>
    <version>1.2</version>
    <exclusions>
        <exclusion>
            <artifactId>servlet-api</artifactId>
            <groupId>javax.servlet</groupId>
        </exclusion>
        <exclusion>
            <artifactId>jsp-api</artifactId>
            <groupId>javax.servlet.jsp</groupId>
        </exclusion>
        <exclusion>
            <artifactId>jstl-api</artifactId>
            <groupId>javax.servlet.jsp.jstl</groupId>
        </exclusion>
    </exclusions>
</dependency>

然後記得一定要把工程目錄下的WEB-INF/lib/和jre/lib/ext下的衝突包刪除了,不要再往jre/lib/ext下隨意匯入jar包,不知是否是這樣理解的:現在是tomcat執行在jre之上,tomcat自身lib包含servlet就行了? 另外https://stackoverflow.com/questions/12384779/org-apache-jasper-el-elcontextimpl-cannot-be-cast-to-org-apache-jasper-runtime-e提到了depenency的provided關鍵字使用。
第一次寫部落格,還沒學用高階編輯器...見諒。 附上參考連結: https://stackoverflow.com/questions/12384779/org-apache-jasper-el-elcontextimpl-cannot-be-cast-to-org-apache-jasper-runtime-e
https://stackoverflow.com/questions/16624487/http-status-500-java-lang-noclassdeffounderror-could-not-initialize-class-org
http://blog.csdn.net/wabiaozia/article/details/52858458
http://blog.csdn.net/edward0830ly/article/details/8748986
http://blog.csdn.net/haolongabc/article/details/50378611

相關推薦

第一使用maven3.2 jstl1.2不到和衝突解決

初學javaweb,在看孫衛琴老師的javaweb開發15章講JSTL core標籤庫的時候跑了一下書上的程式碼,window10,java 1.8,cmd+tomcat8.15,(剛開始,不想用IDE,所以都是cmd)。書本程式碼目錄結構 |--ch15: namelis

四周第一課(1月2日)

linux四周第一次課(1月2日)4.10/4.11/4.12 lvm講解LVM是 Logical Volume Manager(邏輯卷管理)的簡寫,它由Heinz Mauelshagen在Linux 2.4內核上實現。LVM將一個或多個硬盤的分區在邏輯上集合,相當於一個大硬盤來使用,當硬盤的空間不夠使用的時

軟工第一作業 進度記錄2

輸入 文件夾 mat 讀寫 orm 自己的 怎樣 打開文件 功能 1. 進度: 編碼真的真的真的完成了。再也不重構了。 將string改為char數組,增大了哈希表容量,加快了速度。 采用nunit框架單元測試,能夠通過自己的單元測試,但是對sample結果還是不一樣。

Linux 三周第一課(4月2日)Linux,windows 互傳文件 用戶配置文件密碼 組管理

用戶 組三周第一次課(4月2日)2.27linux和windows互傳文件3.1 用戶配置文件和密碼配置文件3.2 用戶組管理3.3 用戶管理Linux和windows文件互傳我通常使用的是ftp或者是其他文件管理方式這裏介紹一個辦法,但是只能在xshell下使用, 安裝 lrzsz工具包安裝好了之後就可以使

第一作業:Linux 2.6.32的進程模型與調度器分析

範圍 喚醒 最大 被調用 test ini writeback uid endif 1.前言 本文分析的是Linux 2.6.32版的進程模型以及調度器分析。在線查看 源碼下載 本文主要討論以下幾個問題: 什麽是進程?進程是如何產生的?進程都有那些? 在操作系統中,

走心One 2 One溝通

聊的比較零零碎碎,內容比較散,有些solution不錯,記一些要點吧(1)要學會彙報,就是坐你身邊的人,也未必知道你在幹啥 三個人都在砌牆。當人們分別問他們在做什麼,他們的答案卻不一樣:第一個人頭也沒擡的回答:砌牆。第二個人,笑了笑說:我在蓋樓。第三個人,擦了擦汗:我們在建設城市。   換個視

RAC資料節點2自動重啟故障解決

        最近生產上出了很多“奇怪”的問題,比如下面要分享的一個故障,一套11.2.0.4 兩節點RAC資料庫,2節點的叢集元件會不定日期的重啟,但重啟的時間段比較固定,都是凌晨4:50左右。而且幾分鐘就會恢復

poj 2104 <排序分塊,區間第k大>/<第一用主席樹>2個方法+整體二分

給一個序列,查詢區間第k大,用分塊來實現 首先將區間分為每塊block大小,也就有num=n/block塊,if(n%block==0)num++. 然後每次在定義每個塊其左右邊界的時候進行排序,那麼就得到一個每塊內排好序的塊。 查詢的時候因為是查詢區間第k大,那麼我們

第一一言難盡的前端面試

如何 .cn 鄙視 面試 技術 理解 菜鳥 col 沒有 不折不扣的應屆生 + 不折不扣的一年經驗 = 不折不扣的菜鳥,就是我!記錄一下珍貴的面試機會啦,這次踩的坑說不定下次還要踩呢 讓我仔細回味一下這次看似並不專業的面試是如何難住了智慧的我: Part One 面試官:請

第一面試

服務器 其中 這一 前後端 工程 入職 sta 我會 主動 想著這個大三暑假在合肥本地找個實習,就在實習僧投了好幾家 Java 實習生,可等了三天都沒反應。。然後聽說 Boss 直聘比較好,於是又上 Boss 直聘投了兩家。可信息全部有去無回。。 不過說來運氣也好,周五的時

第一在程序中埋彩蛋

ron time tin clas inter 變量 所有 。。 全局 記第一次在程序中埋彩蛋 寫在前面 相信進來的觀眾一定很想知道我究竟埋了什麽彩蛋??,這裏說的“彩蛋”,指的是程序裏的彩蛋(我的理解是一種區別於程序本身別有洞天的一番景象,並具有一定代表意義的小程序??)

第一面試經歷

最大 面試經歷 復雜 實現 面試官 層遍歷 決策 想要 靜態鏈接庫 筆試 傳值和傳引用的區別? 靜態鏈接庫和動態鏈接庫的區別?以及運行時在程序內存空間的位置? 死鎖的產生條件及寫一個簡單的死鎖程序 二叉樹分層遍歷算法手寫 實現@別人的功能,@後可加命令和發送的消息,設計高效

WordCount 第一系統分析與設計課程個人項目作業

win idea utf pub 做到 out 測試報告 第一個 buffer 作業成果 作業源碼-java-gitee. 作業要求 根據WordCount的需求描述,先編程實現,再編寫單元測試,最後撰寫博客。 WordCount需求分析 WordCount的需求可以概括為

第一成功逆向破解WINDOWS下軟體過程

下面是破解過程:   使用的工具有: Dotpeek, visual studio 使用dotpeek將啟動程式.exe反編譯成原始碼,並匯入出來。     找到啟動程式的Main函式,發現其做了一個檢測。將其註釋

第一接觸RSA加密----python

記python使用支付寶RSA生成祕鑰工具遇到的問題 報錯 AttributeError: ‘str’ object has no attribute ’ 我在和第三方對接介面時,第三方要求使用支付寶rsa祕鑰工具來生成公鑰和私鑰(由於第一次接觸,都不太懂)我需要對我請

第一機房收費登陸-執行錯誤'91'

背景 最近開始第一次機房收費專案了,這就需要配置源資料庫,但是網上對於配置已經有了很多解決辦法,再此我就不在說明。現在我要解決的問題是在配置完之後,當你登陸時,你會遇到執行時錯誤‘91’這個問題。 出現原因 出現這個問題是由於你資料庫中的sa登入名的密碼與機房收費源系統的密碼不一致,如果

第一使用jupyter建立python錯誤:Creating Notebook Failed An error occurred while creating a new notebook.

當我們用命令列在瀏覽器中啟動jupyter notebook後需要點選右上角的New建立新的python檔案,此時會報錯。在Linux下可以用命令列解決這個問題。首先需要找到anaconda2中jupyter檔案,在anaconda2中的share檔案中,對jupyter執行如下命令,來修改jupy

第一裝機

文章目錄 硬體 主機板 顯示卡 CPU 記憶體 硬碟 散熱 電源 過程 第一次點亮 安裝系統 安裝驅動 最後 硬體 主機板 華碩B

啟航 —— —— 第一自考的啟示:自考與自我改造

主幹:啟航 —— 記:一名初中學歷Java程式設計師的自考本科之路         人類通過勞動實現對自然界的改造,而自考者通過自考實現對自我的改造。         我們每個人從孩童時期開始,就一直在源源不

第一進入csdn

已經是大三上的中期了,才遇到csdn這個好的平臺。也早就接觸過,在找程式碼做練習的時候找到,但並未有做自己的部落格,上傳程式碼的想法。如今想好了棄考研改就業,只有專業的能力夠格,才能找到好工作啊。 感到裡就業季的日子越來越近,也後悔沒有早點意識到acm等競賽的重要性,只能靠臨時刷題來抱佛腳了