Spring DispatcherServlet с конфигурацией сервлета изображения - PullRequest
0 голосов
/ 28 февраля 2011

Я пытаюсь настроить мое приложение на использование Spring, а также сервлета обслуживания изображений. Я просмотрел другие посты и нашел похожие темы, но не могу заставить мою конфигурацию работать правильно. Я использую Spring 3.0 и использую Tomcat 7 в качестве сервера приложений. вот мой конфиг:

<!-- The definition of the Root Spring Container shared by all Servlets and Filters -->
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/spring/app-context.xml</param-value>
</context-param>

<!-- Creates the Spring Container shared by all Servlets and Filters -->
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<!-- Processes application requests -->
<servlet>
    <servlet-name>viewer</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet>
    <servlet-name>imageServlet</servlet-name>
    <servlet-class>com.billy.viewer.servlet.ImageServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/imageServlet/imgServlet-context.xml</param-value>
    </init-param>       
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>viewer</servlet-name>
    <url-pattern>/web/*</url-pattern>
</servlet-mapping>

<servlet-mapping>
    <servlet-name>imageServlet</servlet-name>
    <url-pattern>/images/*</url-pattern>
</servlet-mapping>

<welcome-file-list>
    <welcome-file>list.jsp</welcome-file>
</welcome-file-list>

сервлет-context.xml

<!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->

<!-- Enables the Spring MVC @Controller programming model -->
<annotation-driven />

<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
<resources mapping="/resources/**" location="/resources/" />

<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <beans:property name="prefix" value="/WEB-INF/views/" />
    <beans:property name="suffix" value=".jsp" />
</beans:bean>

<!-- Imports user-defined @Controller beans that process client requests -->
<beans:import resource="controllers.xml" />

<beans:bean id="imageService" class="com.billy.viewer.service.ImageService"></beans:bean>

displayImage.jsp содержит это в теле

<img alt="Test" src="/images/${image.imageId}">

ImageServlet

public class ImageServlet extends HttpServlet {

private static final int DEFAULT_BUFFER_SIZE = 10240;

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    int imageId = Integer.valueOf(request.getPathInfo().substring(1));

    System.out.println("Image id: "+imageId);
}

}

Я попадаю на страницу нормально и вижу другой вывод над тегом img, но изображение никогда не появляется. Я также не вижу свой system.out.println идентификатора изображения из сервлета. У меня нет сообщения об ошибке в моей консоли.

Любые предложения будут оценены. Спасибо

Ответы [ 2 ]

2 голосов
/ 28 февраля 2011

Все вроде нормально.Проверьте с помощью firebug, каков фактический ответ на запрос изображения (или попробуйте открыть его с помощью браузера).

Мне странно, что у вас есть imgServlet-context.xml.

Кстати,для этого не нужен сервлет.Вы можете безопасно отобразить свой сервлет диспетчера на /* и использовать контроллер пружины для обработки @RequestMapping("/images/{id}").

Когда вы указываете URL, вам лучше использовать src="<c:url value="/images/${..}" />" - это разрешит URL относительнотекущий контекст.Другим вариантом является использование относительного пути - т.е. src="images/${..}"

1 голос
/ 28 февраля 2011

Используйте тег c: url из стандартной библиотеки тегов для img и других URL-адресов, которые должны соответствовать контексту вашего веб-приложения.URL-адрес, который вы указали с помощью "/images/$ndomimage.imageId}" из-за того, что "/" указывает на корневой контекст или / images-контекст вместо контекста вашего веб-приложения, и он будет работать, только если вы развернете свое веб-приложение в качестве корневого контекста.С помощью c: url он всегда будет работать, когда приложение является пользователем root и когда он не является корневым контекстом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...