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