Tomcat 下构建 Web 应用时,常犯的一些通用错误
Tomcat 下構(gòu)建 Web 應(yīng)用時,常犯的一些通用錯誤
- 這些錯誤可以引發(fā)的問題
- 常犯的通用錯誤
筆者報錯時的運行環(huán)境:
-
JDK 13.0.2
-
Maven 3.6.3
-
Tomcat 9.0.41(Servlet 4.0,JSP 2.3)
-
IntelliJ IDEA 2020.1.2 (Ultimate Edition)
??重新開始在 Tomcat 下部署 Web 應(yīng)用,很容易遇到各種問題。筆者也經(jīng)常被這些沒有技術(shù)含量的問題困擾,有時甚至浪費幾個小時的時間才得到解決。為了防止自己以后再犯,同時也為了減少其它人的工作量,本文列出了構(gòu)建 Web 應(yīng)用時,常犯的一些通用錯誤以及它們可以引發(fā)的問題。
??(通用錯誤指的是,雖然對于不同的項目,瀏覽器的報錯各不相同,但是它們可能是同一類錯誤導(dǎo)致的。)
這些錯誤可以引發(fā)的問題
?? Tomcat下useBean類屬性[…]的值無效
?? getInitParameter返回null
?? 源服務(wù)器未能找到目標(biāo)資源的表示或者是不愿公開一個已經(jīng)存在的資源表示
常犯的通用錯誤
-
運行 Web 應(yīng)用應(yīng)該使用的 URL 路徑為:
Web 應(yīng)用的基路徑/Web 應(yīng)用名/Web 應(yīng)用相對路徑
其中:
-
Web 應(yīng)用的基路徑:指在 Tomcat 中設(shè)置的路徑。
-
Web 應(yīng)用名:默認(rèn)為文件夾 WEB-INF 的上一級文件夾的文件夾名,但有時也可以選擇在服務(wù)器中設(shè)置。
-
Web 應(yīng)用相對路徑:指在 Web 程序中指定的相對路徑。如果沒有在程序中指定,則默認(rèn)為打開某文件的路徑,即 Web 應(yīng)用文件夾下的某文件的路徑。
例如:如果通過將 Web 應(yīng)用放置到本地 Tomcat 安裝目錄下的文件夾 webapps 中來部署,且 Tomcat 中設(shè)置的端口號為 8080,文件夾 webapps 下有一個文件夾 myweb,而文件夾 myweb 中有一個文件 demo.jsp。那么,使用本地瀏覽器訪問文件 demo.jsp 的 URL 路徑如下:
-
Web 應(yīng)用的基路徑:localhost:8080
-
Web 應(yīng)用名:myweb
-
Web 應(yīng)用相對路徑:demo.jsp
-
完整 URL:http://localhost:8080/myweb/demo.jsp
-
-
文件夾 WEB-INF 的位置:必須為 Web 應(yīng)用的目錄(文件夾)的下一級目錄(文件夾)(注意:是下一級,不是下 N 級)。
-
部署方式為 Tomcat 安裝目錄下的文件夾 webapps:
如果通過將 Web 應(yīng)用放置到 Tomcat 安裝目錄下的文件夾 webapps 中來部署,且 Web 應(yīng)用的名稱為 myweb,那么,文件夾 myweb 需要放到 webapps 中,而文件夾 WEB-INF 需要放到 myweb 中。如果把文件夾 WEB-INF 放到文件夾 myweb 中更深層次的文件夾,這將導(dǎo)致文件夾 WEB-INF 不被識別。(即 Tomcat 下的 webapps 里放 myweb,myweb 里放 WEB-INF。)
注意:只有使用這種方式可以同時在一個文件夾下部署多個 Web 應(yīng)用。使用本文提到的其它方式就只能在一個文件夾下部署一個 Web 應(yīng)用,因此該文件夾內(nèi)需直接放置該 Web 應(yīng)用的相關(guān)文件(如文件夾 WEB-INF)。
-
部署方式為 Tomcat 安裝目錄下的文件夾 conf 內(nèi)的 XML 配置文件:
如果 Web 應(yīng)用是通過在路徑 Tomcat 的安裝路徑\conf\Catalina\localhost\Web 應(yīng)用名.xml 中的 XML 文件中配置路徑部署的,那么請注意,此 XML 文件指定的路徑是 Web 應(yīng)用的路徑,不是 Web 應(yīng)用的路徑的上一級文件夾的路徑。
- 比方說,如果上述 XML 文件命名為 router.xml ,且在該 XML 文件中指定的路徑是 <Context docBase=“D:\Tomcat\myweb” debug=…/> 。那么, Web 應(yīng)用名是 router(不是 myweb ),且文件夾 WEB-INF 需要放到文件夾 myweb 中。如果把文件夾 WEB-INF 放到文件夾 myweb 中更深層次的文件夾,這將導(dǎo)致文件夾 WEB-INF 不被識別。
-
部署方式為 IntelliJ IDEA 中的 Maven 原型:
如果 Web 應(yīng)用是通過在 IntelliJ IDEA 中的 Maven 原型(archetype)中建立的,則應(yīng)用的部署文件夾為 IntelliJ IDEA 工程中的文件夾 webapp。此時,文件夾 WEB-INF 需要直接放到文件夾 webapp 中。如果把文件夾 WEB-INF 放到文件夾 webapp 中更深層次的文件夾,這將導(dǎo)致文件夾 WEB-INF 不被識別。
-
- 文件夾 WEB-INF 中的配置文件只會在 Tomcat 開始啟動時才會生效。如果更改了WEB-INF文件夾中的任何內(nèi)容,則需要重啟 Tomcat 服務(wù)器。
- Tomcat 可以處理的是 .class 文件,而不是 .java 文件。如果不使用 IDE,直接使用 Tomcat ,那么需要在文件夾 WEB-INF 下的文件夾 classes 下提供相應(yīng)的.class文件,其中.class文件還需要按 Java 包名目錄的規(guī)則存放。
- 在 Tomcat 9 及之前,在地址欄輸入的 URL 需要輸入完整的路徑名,而不能選擇先輸入 Web 應(yīng)用(Web 文件夾)的路徑,然后在瀏覽器中選擇要訪問的文件( 從 Tomcat 10 開始才可以這么做)。
總之,在 Tomcat 9 及之前,凡是在地址欄輸入沒有設(shè)置過的路徑,瀏覽器均會報此錯誤。
總結(jié)
以上是生活随笔為你收集整理的Tomcat 下构建 Web 应用时,常犯的一些通用错误的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 解决Tomcat下源服务器未能找到目标资
- 下一篇: 解决IntelliJ IDEA报错Err