我對Spring沒有經驗,現在我需要做的所有事情都是訪問並獲取對webapp文件夾中文件和文件夾的引用。這裏是我的相關項目層次:在Spring中訪問webapp文件夾中的文件/目錄
-src
--main
---java (marked as source root)
----my
-----package
------controller
-------Home.java
---webapp
----images
-----avatars
我在Home.java代碼:
@Controller
@RequestMapping("/")
public class Home
{
@RequestMapping(method = RequestMethod.GET)
public String index(Model model,
HttpServletRequest request) throws Exception
{
String test1 = request.getSession().getServletContext().getRealPath("");
String test2 = request.getSession().getServletContext().getRealPath("/");
String test3 = request.getRealPath("");
String test4 = request.getRealPath("/");
String test5 = request.getSession().getServletContext().getRealPath(request.getServletPath());
return "index";
}
}
所有5個請求返回null。難道我做錯了什麼?
的web.xml:
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<display-name>Test</display-name>
<servlet>
<servlet-name>test</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>test</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<session-config>
<session-timeout>10</session-timeout>
</session-config>
</web-app>
我試圖實現(在本例中未顯示),用於編碼負責圖像的縮放控制器。爲此,我需要訪問src/main/webapp/_images文件夾。
謝謝!
更新:爲了更好地理解,簡化了示例。
Update2:感謝@gigadot的建議,我將應用程序部署爲爆炸WAR,問題部分解決。有人能告訴我在部署WAR時爆炸的區別是什麼?是否建議在生產服務器上執行某些操作?優點缺點?
我認爲值得用一個例子來解釋這種情況。假設我正在編寫一個社交網絡,我必須有可能上傳我的個人資料圖片。這張照片將被上傳到src/main/webapp/_images/avatars/[myid].jpg
文件夾。 是否建議將圖片上傳到webapp
文件夾?還是有更好的解決方案? 我希望能夠在訪問URL /images/[width]x[height]/[userid].jpg
時返回縮放的圖像實例。
部署WAR的爆炸和實施ResourceLoaderAware
(感謝@KevinSchmidt),我可以讓它工作中使用此:
resourceLoader.getResource("file:" + request.getSession().getServletContext().getRealPath("/") + "_images/avatars/");
對我來說,它看起來很骯髒,是它在生產服務器是個好主意?有更好的解決方案嗎?
我在乎目錄是否存在 – satoshi 2012-02-07 10:08:49
任何人......?謝謝 – satoshi 2012-02-09 10:39:02
你想如何處理這些文件,只需將它們返回給客戶端,或處理其內容? – Ralph 2012-02-20 07:52:32