Java 具有映像Servlet配置的Spring DispatcherServlet

Java 具有映像Servlet配置的Spring DispatcherServlet,java,spring,servlets,spring-mvc,Java,Spring,Servlets,Spring Mvc,我正在尝试将我的应用程序设置为使用Spring和一个图像服务servlet。我浏览了其他帖子,发现了类似的主题,但似乎无法使我的配置正常工作。我使用Spring3.0和Tomcat7作为我的应用服务器。这是我的配置: <!-- The definition of the Root Spring Container shared by all Servlets and Filters --> <context-param> <param-name>con

我正在尝试将我的应用程序设置为使用Spring和一个图像服务servlet。我浏览了其他帖子,发现了类似的主题,但似乎无法使我的配置正常工作。我使用Spring3.0和Tomcat7作为我的应用服务器。这是我的配置:

<!-- 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>
}

我很好地进入了我的页面,我可以看到img标签上方的其他输出,但图像从未显示。我也没有从servelt中看到图像id的system.out.println。我的控制台中没有错误消息


如有任何建议,将不胜感激。谢谢

一切似乎都很好。与firebug一起检查图像请求的实际响应(或尝试使用浏览器打开它)

我觉得奇怪的是,您有
imgServlet context.xml

顺便说一下,不需要servlet来完成这项工作。您可以安全地将dispatcher servlet映射到
/*
,并使用spring控制器处理
@RequestMapping(“/images/{id}”)


指定URL时,最好使用
src=”“
-这将解析相对于当前上下文的URL。另一个选项是使用相对路径,即
src=“images/${..}”

一切似乎都很好。与firebug一起检查图像请求的实际响应(或尝试使用浏览器打开它)

我觉得奇怪的是,您有
imgServlet context.xml

顺便说一下,不需要servlet来完成这项工作。您可以安全地将dispatcher servlet映射到
/*
,并使用spring控制器处理
@RequestMapping(“/images/{id}”)


指定URL时,最好使用
src=”“
-这将解析相对于当前上下文的URL。另一个选项是使用相对路径-即,
src=“images/${..}”

使用标准标记库中的c:url标记,用于img和其他应该是web应用程序上下文相对的url。您使用“/images/${image.imageId}”指定的URL,因为前导“/”指向根上下文或/images上下文,而不是web应用上下文,并且仅当您将web应用部署为根上下文时,该URL才会起作用。使用c:url时,无论应用程序是根应用程序还是非根应用程序上下文,它都将始终有效。

使用标准标记库中的c:url标记来标记img和其他url,这些url应该是您的web应用程序上下文的相关内容。您使用“/images/${image.imageId}”指定的URL,因为前导“/”指向根上下文或/images上下文,而不是web应用上下文,并且仅当您将web应用部署为根上下文时,该URL才会起作用。对于c:url,无论应用程序是根目录还是非根目录,它都将始终有效。

感谢您的回复。我删除了imageServlet-context.xml。当我尝试其他东西时,我就把它放在那里了。我想我误解了其他一些帖子。我认为,如果映像在本地文件系统上的应用程序之外的某个地方,那么我需要通过servlet对其进行流式处理,并且不能在同一个请求中获取页面数据和映像?如果可以的话,这个例子就容易多了。我在模型中已经有byte[]格式的图像。@blong824是的,你是对的-你必须流式处理它。正如我所说的-检查firebug。我检查了firebug,也没有发现任何错误。图像的src是src=“/image/2”。再看一看,图像src是:哪个应该进入我的imageServlet的doGet方法正确?doGet只做System.out.println语句,但它不会显示在控制台中。我将尝试实现该方法并返回和映像,但我认为第一次测试将显示消息。很抱歉,一行中出现了所有注释。通过将这个url放在浏览器中,我能够进入servlet的doGet方法。因此,我的jsp-img-src标记和我如何定义映射之间存在一个断开连接。我是否必须将查看器(我的应用程序的名称)添加到img src标记中?再次感谢您的帮助。感谢您的回复。我删除了imageServlet-context.xml。当我尝试其他东西时,我就把它放在那里了。我想我误解了其他一些帖子。我认为,如果映像在本地文件系统上的应用程序之外的某个地方,那么我需要通过servlet对其进行流式处理,并且不能在同一个请求中获取页面数据和映像?如果可以的话,这个例子就容易多了。我在模型中已经有byte[]格式的图像。@blong824是的,你是对的-你必须流式处理它。正如我所说的-检查firebug。我检查了firebug,也没有发现任何错误。图像的src是src=“/image/2”。再看一看,图像src是:哪个应该进入我的imageServlet的doGet方法正确?doGet只做System.out.println语句,但它不会显示在控制台中。我将尝试实现该方法并返回和映像,但我认为第一次测试将显示消息。很抱歉,一行中出现了所有注释。通过将这个url放在浏览器中,我能够进入servlet的doGet方法。因此,我的jsp-img-src标记和我如何定义映射之间存在一个断开连接。我是否必须将查看器(我的应用程序的名称)添加到img src标记中?再次感谢你的帮助。
<!-- 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>
<img alt="Test" src="/images/${image.imageId}">
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);
}