【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路径重名了!导致地址加载不正确,报错。好低级的错误,但是为嘛本地测试居然通过了呢...想不通。

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