1. 程式人生 > >weblogic下部署工程靜態資原始檔 *.js不能訪問

weblogic下部署工程靜態資原始檔 *.js不能訪問

最近把工程部署 到webogic容器下,問題頗多,在Tomcat下執行正常的應用,在weblogic下頻頻抽風,先是部署不起來報錯,具體報錯原因參看上篇文章java web專案Tomcat轉移到weblogic部署失敗解決  ,解決完部署問題,終於可能訪問頁面了,又出現頁面所有的js頁面無法解析,試著訪問js路徑,報404錯誤,日誌中頻報

####<2015-12-25 上午10時03分17秒 CST> <Error> <HTTP> <yao-pc> <AdminServer> <[ACTIVE] ExecuteThread: '15' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <e00ce85f4675ab26:6ad8874a:151d6cde952:-8000-000000000000009a> <1451008997598> <BEA-101083> <Connection failure.
java.net.ProtocolException: Didn't meet stated Content-Length, wrote: '0' bytes instead of stated: '-1' bytes.
	at weblogic.servlet.internal.ServletOutputStreamImpl.ensureContentLength(ServletOutputStreamImpl.java:457)
	at weblogic.servlet.internal.ServletResponseImpl.ensureContentLength(ServletResponseImpl.java:1448)
	at weblogic.servlet.internal.ServletResponseImpl.send(ServletResponseImpl.java:1530)
	at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1498)
	at weblogic.work.ExecuteThread.execute(ExecuteThread.java:256)
	at weblogic.work.ExecuteThread.run(ExecuteThread.java:221)
> 

百度搜了很久,終於解決了:

spring mvc - 對靜態資源的處理

spring對靜態資原始檔(js css htm html jpg jepg png bmp)等的處理方式如下:

一、交由上級web容器處理,在web.xml中的org.springframework.web.servlet.DispatcherServlet 配置之前加入如下程式碼:

?
1 2 3 4 <servlet-mapping>    <servlet-name>FileServlet</servlet-name>    <url-pattern>*.js</url-pattern>   
</servlet-mapping>

根據不同的資原始檔制定不同的對映機制,其中servlet-name在tomcat中預設是default,該servlet在tomcat\config\web.xml檔案中預設配置,不同的應用伺服器對應的靜態資原始檔處理的servlet名稱不盡相同,如下:

?
1 2 3 4 5 tomcat,jboss,glassfish,jetty : defaut;   weblogic : FileServlet;   websphere : SimpleFileServlet;   resin : resin-file;  
GAE : _ah_default

二、交由spring mvc:resources 處理
在dispatchServlet.xml檔案中增加
<mvc:resources location="/WEB-INF/resource/" mapping="/resource/**"/>
該方式雖然靜態資原始檔可以訪問了,但是如果系統配置了萬用字元的攔截器,靜態資源還是會被攔截器攔截,如下:

?
1 2 3 4 5 6 <mvc:interceptors>   <mvc:interceptor>   <mvc:mapping path="/*"/>    <bean  class="com.xinlong.cms.front.interceptor.CmsFrontInterceptor"></bean>   </mvc:interceptor>   </mvc:interceptors>

因此需要修改,如下:

?
1 2 3 4 5 6 7 <mvc:interceptors>   <mvc:interceptor>   <mvc:mapping path="/*"/>    <mvc:exclude-mapping path="/resource/**"/>   <bean  class="com.xinlong.cms.front.interceptor.CmsFrontInterceptor"></bean>   </mvc:interceptor>   </mvc:interceptors>

到此還有個問題mvc:exclude-mapping 標籤不被spring-mvc-3.0.xsd支援,該配置在spring-mvc-3.2.xsd中,可以通過http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd獲取,因此需要在spring-mvc-3.0.xsd檔案中增加該標籤,處理辦法很簡單,從網上下載spring-mvc-3.2.xsd,找到標籤後,再找到spring.web.servlet-3.0.5.jar中的spring-mvc-3.0.xsd檔案,將標籤加入即可

原文地址:http://my.oschina.net/ydsakyclguozi/blog/468980