Доступ к файлам/каталогам в папке webapp в Spring

Я неопытен в 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 в виде exploded? Это то, что не рекомендуется делать на рабочем сервере? Преимущества/недостатки?

Думаю, стоит пояснить ситуацию на примере. Допустим, я разрабатываю социальную сеть, и у меня есть возможность загрузить картинку своего профиля. Эта картинка будет загружена в папку src/main/webapp/_images/avatars/[myid].jpg. Рекомендуется ли загружать картинки в папку webapp? Или есть лучшее решение? Я хотел бы иметь возможность возвращать масштабированный экземпляр изображения при обращении к URL /images/[width]x[height]/[userid].jpg.

Развернув WAR как exploded и реализовав ResourceLoaderAware (спасибо @KevinSchmidt), я могу заставить его работать, используя следующее:

resourceLoader.getResource("file:" + request.getSession().getServletContext().getRealPath("/") + "_images/avatars/");

Для меня это выглядит довольно грязно, хорошая ли это идея для производственного сервера? Есть ли лучшее решение?

15
задан satoshi 23 February 2012 в 15:58
поделиться