2010-04-22 55 views
4

我試圖將存儲在Web應用程序文件夾中的所有圖像移動到數據庫中。並用一個servlet調用它們。是否有可能從我的CSS調用一個servlet?或者有沒有辦法從css調用遠程存儲的圖像文件?是否可以從css調用一個servlet?

我試圖從CSS調用一個servlet方法,但無法成功。有沒有可能調用這樣的方法?我們可以使用GetImage('abc','123'));我們可以使用GetImage('abc','123'))。

回答

2

這是可能的。只需在這裏創建一個像this example的圖像服務器。至此,您只需從DB獲取InputStream的圖像ResultSet#getBinaryStream()並將其寫入HttpServletResponse#getOutputStream(),usual Java IO way獲得的響應的OutputStream。不要忘記添加HTTP內容類型和內容長度標題。如果您省略內容類型,瀏覽器不知道如何處理這些信息。如果您省略了內容長度,則會以分塊傳輸編碼的形式發送,但效率不高。

至於引用CSS文件中的servlet,只需在URL文件中指定URL 相對即可。這樣你就不必擔心上下文路徑。確定相對URL並不困難,它與在命令控制檯中訪問本地磁盤文件系統路徑的方式相同。 cd ../../foo/bar/file.ext等。你曾經在學校學過,是嗎?

OK,假設imageservlet位於http://example.com/context/image?id=x和CSS文件位於http://example.com/context/css/globalstyle.css(因此,當前文件夾是css),再右邊的相對網址imageservlet從CSS文件中是:

background-image: url('../image?id=123'); 

../進了一步向後的目錄結構,使您從文件夾http://example.com/context/csshttp://example.com/context。如果您在確定正確的相對路徑方面仍然很困難,那麼讓我們知道該servlet和CSS文件的絕對URL,然後我們將爲您提取正確的相對路徑。

+0

hi..Here是CSS和servlet的url。 的http://本地主機:8080/ /myStyle.css 的http://本地主機:8080/ /servlet/com.abc.def.servlet.FileServlet?pictureType=common&pictureName=home.gif 我可能知道如何得到路徑.. – coder247 2010-04-22 12:18:22

+0

它在同一個父文件夾中。你可以使用'background-image:url('servlet')'。 – BalusC 2010-04-22 12:24:25

+0

謝謝..現在其餘的工作很容易.. :) – coder247 2010-04-22 12:27:06

5

是的。只要圖像有url,你可以在你的css中使用它。

例如:

background-image:url('/getimage.ashx?id=3'); 

你甚至可以更進一步的重新路由其網址 - 你甚至可以用你今天有相同的URL,而是將自己的服務器從數據庫中處理請求和加載文件。

另一個提示:確保你設置正確的標題。您想要使用正確的內容類型,並且可能需要在客戶端正確緩存圖像。

+0

關於標題的好處。 – 2010-04-22 09:30:38

+0

是否有任何可能的方式從CSS獲取上下文路徑?像jsp中的request.getContextPath()。 – coder247 2010-04-22 09:57:59

+0

這是可能的,但這意味着CSS是動態的,並在服務器端確定 - 您必須相應地配置您的服務器。當然,一個* CSS *文件可以是動態的,就像圖像一樣。它不一定是一個物理的'.css'文件。 – Kobi 2010-04-22 10:03:46

5

是的。指定的象的CSS規則都可以包含任何一種 URL的瀏覽器可以解析和獲取:

body { 
background-image: 
url(http://www.domain.com/servlets/my_servlet.jsp?argument=value) 
} 
相關問題