【maven】webapp項目發佈到 weblogic 資源文件報錯404找不到

最近應用maven來改寫之前的傳統web工程,遇到一些小問題,好在這些問題都被解決了。但是遇到的時候真的很讓人抓狂,因爲之前的web項目從來沒遇到過這種問題,很奇怪。果然想偷懶想省事總是要付出代價的。=]

爲了以後用maven能省事,現在將這些問題記錄在這裏,把該踩的坑全部填平了,以後就一路狂奔吧。


/webapp下新建了一個indicators.jsp,引入了一些JS、CSS文件

    <!--JQuery-->
    <script type="text/javascript" charset="UTF-8" src="scripts/jquery-3.3.1.js"></script>
    <!--DataTable-->
    <script type="text/javascript" charset="UTF-8" src="scripts/jquery.dataTables.min.js"></script>
    <script type="text/javascript" charset="UTF-8" src="scripts/dataTables.fixedColumns.min.js"></script>
    <!--JQuery WEUI-->
    <script type="text/javascript" charset="UTF-8" src="scripts/jquery-weui.min.js"></script>
    <script type="text/javascript" charset="UTF-8" src="scripts/fastclick.js"></script>

    <!--DataTable CSS-->
    <link rel="stylesheet" type="text/css" href="css/jquery.dataTables.min.css">
    <link rel="stylesheet" type="text/css" href="css/fixedColumns.dataTables.min.css">
    <!--WeUI CSS-->
    <link rel="stylesheet" type="text/css" href="css/weui.css">
    <link rel="stylesheet" type="text/css" href="css/jquery-weui.min.css">
    <!--鏈接外部樣式表-->
    <link rel="stylesheet" type="text/css" href="css/style.css">

直接運行,瀏覽器端報錯

JS文件和CSS文件等靜態文件都被攔截了,沒有正常加載,原因是在web.xml中把<url-pattern>寫成了“/”,默認全部攔截

<servlet>
    <servlet-name>IndicatorServlet</servlet-name>
    <servlet-class>com.indicator.servlet.IndicatorServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>IndicatorServlet</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

解決方案

web.xml中添加JS、CSS等靜態資源的過濾代碼,注意本地用的是Tomcat服務器,所以<servlet-name>default

<!--不攔截靜態資源-->
<!-- tomcat 默認名稱default -->
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.css</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.js</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.png</url-pattern>
</servlet-mapping>

本地測試通過,發佈到服務器weblogic,發現發佈失敗

原因是本地用的Tomcat服務器,默認的<servlet-name>default,但現在服務端是weblogic默認的<servlet-name>就不一樣了。

解決方法:把 default 改成 FileServlet 就可以了。

<!-- weblogic 默認名稱FileServlet -->
<servlet-mapping>
    <servlet-name>FileServlet</servlet-name>
    <url-pattern>*.css</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>FileServlet</servlet-name>
    <url-pattern>*.js</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>FileServlet</servlet-name>
    <url-pattern>*.png</url-pattern>
</servlet-mapping>

參考資料

將tomcat部署的項目遷移到weblogic部署遇到的問題   https://blog.csdn.net/dyr_1203/article/details/82350425

tomcat遷移到weblogic的幾個問題  https://my.oschina.net/shuming/blog/784886

 


--------- 2020-05-26 -- 更新 --------

當有多個Servlet的時候,web.xml需要這樣配置

<servlet>
    <servlet-name>StarInfoServlet</servlet-name>
    <servlet-class>com.businesstrip.servlet.StarInfoServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>StarInfoServlet</servlet-name>
    <url-pattern>/StarInfo</url-pattern>
</servlet-mapping>

<servlet>
    <servlet-name>GetEmployeeInfoServlet</servlet-name>
    <servlet-class>com.businesstrip.servlet.GetEmployeeInfoServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>GetEmployeeInfoServlet</servlet-name>
    <url-pattern>/GetEmployeeInfo</url-pattern>
</servlet-mapping>

配置好以後,發現/pages/下所有的.jsp都找不到了,瀏覽器直接報錯404,因爲使用了UrlRewrite對方位地址進行改寫,我一直懷疑是這個文件的配置的問題,但其實不是。

最終發現只要把“不攔截靜態資源”那一段<servlet-mapping>刪掉就好了,所以上述那一段解決方式僅僅適用於一個只有一個Servlet的情況,且 <url-pattern>/</url-pattern>。

如果有多個Servlet或者<url-pattern>/name</url-pattern>就不需要單獨寫不攔截的那一段了。

--------- 2020-06-02 -- 更新 --------

自定義了一個文件夾【resources】專門用來放置.js.css和圖片資源,本地測試全部通過。

但是發佈到weblogic報錯,找不到靜態資源,原因是自定義的文件夾和默認resources路徑重名了!導致地址加載不正確,報錯。好低級的錯誤,但是爲嘛本地測試居然通過了呢...想不通。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章