Я неопытен в 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/");
Для меня это выглядит довольно грязно, это хорошая идея для производственного сервера? Есть ли лучшее решение?