最近應用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路徑重名了!導致地址加載不正確,報錯。好低級的錯誤,但是爲嘛本地測試居然通過了呢...想不通。