1. 程式人生 > >SpringMVC 的使用對映路徑展示檔案伺服器上的圖片

SpringMVC 的使用對映路徑展示檔案伺服器上的圖片

接上一篇提到的部署中的問題,可以採用 <mvc:resources>即可解決,然而使用這種方式也不是一帆風順的,需要解決其他的一些配置問題。

首先,spring mvc 的<mvc:resources mapping="***" location="***">標籤是在spring3.0.4出現的,主要是用來進行靜態資源的訪問。我們專案中是這樣使用的:

<mvc:resources mapping="/${mapping_path}/**" location="file:${local_path}/">

對應的xx.propterties檔案中的值如下:

mapping_path=poster

local_path=D:/poster

但是發現這樣,在<img src="http://localhost:7001/pad-sces/poster/xxx.jpg"/>下並沒有成功展示圖片,百思不得其解。後來發現原來這個還與org.springframework.web.servlet.DispatcherServlet的中的url-pattern配置有關,期初在web.xml中我們專案的配置如下:

	<servlet>
		<servlet-name>springMVC</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param> 
  		<param-name>contextConfigLocation</param-name> 
  		<param-value>classpath:/spring/spring-mvc-servlet.xml</param-value> 
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>

	<servlet-mapping>
		<servlet-name>springMVC</servlet-name>
		<url-pattern>*.do</url-pattern>
	</servlet-mapping>
這樣是沒有效果的,*.do是攔截了所有*.do的請求到servlet中,後來改成
<url-pattern>/</url-pattern>

這樣就可以成功展示了,但是問題又出現了,就是頁面上引用的css,js等效果不起作用了,報錯如下:

WARNING: No mapping found for HTTP request with URI [/pad-sces/js/login.js] in DispatcherServlet with name 'springMVC'

原因是:使用 / 攔截了所有的請求,會影響到靜態資原始檔的獲取,這樣就需要用mvc:default-servlet-handler和mvc:resources來幫住分類完成獲取靜態資源的責任。在spring-mvc-servlet.xml中配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"  
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd   
	http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">   

	<mvc:default-servlet-handler />
	<mvc:resources mapping="/${mapping_path}/**" location="file:${local_path}/">
	<mvc:resources mapping="/js/**" location="/js/"/>
	<mvc:resources mapping="/css/**" location="/css/"/>
	<mvc:resources mapping="/images/**" location="/images/"/>
	<mvc:resources mapping="/plugin/**" location="/plugin/"/>
</beans>

這樣就可以成功展示了圖片了,也能正常顯示其他效果。

注意:引用上述js、css等效果的page頁面目錄不需要對映。location是工程路徑地址,mapping是對映後的訪問地址,建議js、css等效果的對映地址和工程路徑地址一致,這樣訪問起來比較容易。

此外還要注意,file:是針對非專案工程中的檔案訪問,本專案工程中的檔案路徑不要加file:

============================================================================

當然,web.xml的DispatcherServlet還可以配置多個url-pattern,如上面所述的,我們可以改成:

<servlet>
		<servlet-name>springMVC</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param> 
  		<param-name>contextConfigLocation</param-name> 
  		<param-value>classpath:/spring/spring-mvc-servlet.xml</param-value> 
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>

	<servlet-mapping>
		<servlet-name>springMVC</servlet-name>
		<url-pattern>*.do</url-pattern>
		<url-pattern>/poster/*</url-pattern>
	</servlet-mapping>
這樣在spring-mvc-servlet.xml可以直接這樣配置:

<mvc:resources mapping="/**" location="file:${local_path}/">

不過,有個不好之處在於web.xml必須是寫死的url-pattern值/poster/* 而不能像上述方法那樣配置引數值,可配置性不高。

==============================================================================

以下內容是分享網友的:

如果你的DispatcherServlet攔截 *.do這樣的URL,就不存在訪問不到靜態資源的問題。如果你的DispatcherServlet攔截“/”,攔截了所有的請求,同時對*.js,*.jpg的訪問也就被攔截了。

目的:可以正常訪問靜態檔案,不要找不到靜態檔案報404

方案一:啟用TomcatdefaultServlet來處理靜態檔案

<span style="font-size:12px;"> <servlet-mapping>
 	<servlet-name>default</servlet-name>
 	<url-pattern>*.jpg</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>*.css</url-pattern>
 </servlet-mapping></span>

要寫在DispatcherServlet的前面, 讓 defaultServlet先攔截,這個就不會進入Spring了。

方案二:spring3.0.4以後版本提供了mvc:resources 的使用方法:

<span style="font-size:12px;"> <!-- 對靜態資原始檔的訪問 -->
 <mvc:resources mapping="/images/**" location="/images/" /></span>

/images/**對映到ResourceHttpRequestHandler進行處理,location指定靜態資源的位置.可以是web application根目錄下、jar包裡面,這樣可以把靜態資源壓縮到jar包中。cache-period 可以使得靜態資源進行web cache 如果出現下面的錯誤,可能是沒有配置<mvc:annotation-driven />的原因。 報錯WARNING: No mapping found for HTTP request with URI [/mvc/user/findUser/lisi/770] in DispatcherServlet with name 'springMVC'

使用<mvc:resources/>元素,把mappingURI註冊到SimpleUrlHandlerMappingurlMap中,keymappingURI pattern值,而valueResourceHttpRequestHandler,這樣就巧妙的把對靜態資源的訪問由HandlerMapping轉到ResourceHttpRequestHandler處理並返回,所以就支援classpath目錄,jar包內靜態資源的訪問.另外需要注意的一點是,不要對SimpleUrlHandlerMapping設定defaultHandler。因為對static uridefaultHandler就是ResourceHttpRequestHandler,否則無法處理static resources request

方案三 ,使用<mvc:default-servlet-handler/>

<span style="font-size:12px;"> <mvc:default-servlet-handler/></span>

會把"/**" url,註冊到SimpleUrlHandlerMappingurlMap,把對靜態資源的訪問由HandlerMapping轉到org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler處理並返回DefaultServletHttpRequestHandler使用,就是各個Servlet容器自己的預設Servlet

補充說明:多個HandlerMapping的執行順序問題:

DefaultAnnotationHandlerMappingorder屬性值是:0

<mvc:resources/ >自動註冊的SimpleUrlHandlerMappingorder屬性值是:2147483646

<mvc:default-servlet-handler/>自動註冊的SimpleUrlHandlerMappingorder屬性值是:2147483647

spring會先執行order值比較小的。當訪問一個a.jpg圖片檔案時,先通過DefaultAnnotationHandlerMapping來找處理器,一定是找不到的,我們沒有叫a.jpgAction。再按order值升序找,由於最後一個SimpleUrlHandlerMapping是匹配"/**"的,所以一定會匹配上,再響應圖片。

注:如果DispatcherServlet攔截 *.do這樣的URL,就不存上述問題了。





相關推薦

SpringMVC 的使用對映路徑展示檔案伺服器圖片

接上一篇提到的部署中的問題,可以採用 <mvc:resources>即可解決,然而使用這種方式也不是一帆風順的,需要解決其他的一些配置問題。 首先,spring mvc 的<mvc:resources mapping="***" location="***

詳解SpringMVC使用MultipartFile實現檔案

本篇文章主要介紹了SpringMVC使用MultipartFile實現檔案的上傳,本地的檔案上傳到資源伺服器上,比較好的辦法就是通過ftp上傳。這裡是結合SpringMVC+ftp的形式上傳的,有興趣的可以瞭解一下。 如果需要實現跨伺服器上傳檔案,就是將我們本地的檔

SpringMVC + AJAX 實現多檔案非同步

轉自:https://www.jianshu.com/p/f3987f0f471f 今天,我就這個問題來寫一篇如何用 SpringMVC + AJAX 實現的多檔案非同步上傳功能。基本的程式碼還是沿用上篇文章中所用到的專案,需要的朋友可以點選前面的連結檢視。在這裡只貼出關鍵程式碼。 首先

C#+WPF+oracle 檢查檔案伺服器檔案是否存在

  現在有個需求,有個FTP/HTTP網站上有一堆檔案,記錄存在資料庫。   但根本無法知道那些檔案在資料庫中不存,那些檔案在庫裡面,但不存在實體檔案。   現在做了個程式,可以做到讀取資料庫檔案列表,然後檢查網上鍊接是否有效,也可以反向檢查。 <Window x

SpringMVC+MongoDB+Layui實現檔案傳、下載、刪除功能

       應專案要求,使用MongoDB的GridFS來儲存檔案資料。 需求點:1、

圖片檔案傳到伺服器或從伺服器讀取(圖片可根據路徑src回顯展示,從伺服器讀出來)

不需要配置虛擬路徑,存的時候資料庫裡只存了圖片的名稱(隨機重新命名的形式),存在指定伺服器上,取的時候也是根據圖片名稱從伺服器上找到,並用OutputStream 讀出來 前臺頁面(用的bootstrap): html程式碼(可回顯,回顯的時候也是去後臺根據路徑查詢到圖片):

SpringMVC圖片檔案伺服器

圖片檔案跨伺服器上傳(我使用的公司雲桌面作為上傳伺服器,自己的筆記本作為儲存伺服器測試的) 一、上傳伺服器: 1、pom檔案(使用jersey外掛) <!-- 上傳元件包 --> <dependency> <gro

SpringMVC 的使用映射路徑展示文件服務器圖片

file div 文件的 local 解決 home resources 遇到 配置 需求: 前端上傳圖片,返回路徑給前端,前端通過路徑來訪問圖片的資源。 解決方案: <mvc:resources mapping="/${mapping_path}/**"

Nodejs把接收圖片base64格式儲存為檔案儲存到伺服器

下面一小段程式碼給大家分享Nodejs把接收圖片base64格式儲存為檔案儲存到伺服器上的方法,具體程式碼如下所示: 前端精品教程:百度網盤下載 ? 1

1. 瀏覽器中訪問Linux伺服器圖片(虛擬路徑) + 重啟tomcat (測試可用)

首先需要配置的java,Tomcat的這個以後會發,此外還要確保埠的開放 1.上傳圖片到伺服器 建議使用WinSCP賦予這個軟體,圖形化拖動檔案,十分方便 路徑:USR /本地/ EasyFit /圖片/下是我的圖片 2.配置的tomcat的伺服器檔案 路徑:USR /本地/ tomc

基於Tomcat如何顯示伺服器圖片檔案

修改tomcat中conf資料夾下的server.xml檔案,在 <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"           

JAVA中建立HTTP通訊,從伺服器獲取HTML程式碼,通過HTTP請求來下載圖片或其他二進位制檔案的程式,下載結果要按下載到的檔案型別進行存檔中。

通過HTTP請求來下載圖片或其他二進位制檔案的程式,下載結果要按下載到的檔案型別進行存檔 將程式碼從伺服器的中獲取下來的程式碼,在我之前已經講過了這裡寫連結內容 這裡我們就直接將原始碼稍加改動,加入一個檔案並請將builder 寫入即可。 import

(十二)springMvc 處理圖片,視訊等檔案

導包 需要匯入如下的包 commons-fileupload-1.3.3.jar commons-io-2.6.jar 修改表單型別 想要上傳圖片、文字、電影、音樂等資源的時候,需要將 form 的

springmvc路徑引數,springmvc-json-ajax使用,springmvc檔案傳,springmvc檔案下載,springmvc攔截器(內容較多)

按照操作,絕對都可以實現,親測。。。。。(專案所有檔案和目錄結構全都放上去了) idea工具,建立maven專案 第一步: 放置各種配置檔案: pom.xml <?xml version="1.0" encoding="UTF-8"?> <p

vue 電腦端調攝像頭拍照,canvas轉base64,base64轉圖片檔案傳到伺服器

VUE(用了iview):  <template> <div id='cameraUpload'> <Form ref='member' :label-width='120' :model='member' :rules='memb

SpringMVC實現FTP伺服器圖片和富文字

上傳流程為: jsp(上傳檔案)->springMVC的servlet.xml(解析成二進位制Mulitfile)->Controller->service(連線ftp,檔案打包按格式二進位制流上傳)->ftp 注:本文的程式

利用 Javascript 實現圖片並向伺服器獲取圖片路徑後顯示的 demo

       由於某些特殊原因,有時需要從服務端請求到圖片路徑,需要給該介面傳遞對應圖片的base64 dataURL,並且有時需要將其上傳圖片的型別統一為 jpeg 格式時,可採用以下方式。 HTM

資料庫儲存路徑,資原始檔放在伺服器,前臺如何展示(已成功解決)

當前接觸的專案是前後端分離的,我現在需要將圖片檔案的路徑存在資料庫,在前臺展示時將資料庫的路徑拿出來,將伺服器上的圖片檔案展示出來 一開始我的做法是將圖片檔案放在前端頁面程式碼目錄中,然後想到一般情況下,資原始檔都是放在伺服器上的,然後一個同事(妹子呦)告訴我了一個辦法,在tomcat的配置檔案

伺服器釋出網站時,提示“未能對映路徑

網站開發工具與環境:win7旗艦版、SQL Server2008、vs2010(使用SQLEXPRESS完成角色授權) 伺服器環境:Win Server Enterprise、Sql server2008 在伺服器上已有的網站上掛一個子應用程式,選擇預設的DefaultAp