2011-02-27 52 views
0

我试图设置我的应用程序使用Spring,并且还提供了一个servlet图像服务。我浏览过其他文章,发现类似的主题,但似乎无法让我的配置正常工作。我使用Spring 3.0并使用tomcat 7作为我的应用程序服务器。这里是我的配置:带图像Servlet配置的Spring DispatcherServlet

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

的servlet-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图像ID从servelt要么。我的控制台中没有错误消息。

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

回答

2

一切似乎很好。用萤火虫检查图像请求的实际响应是什么(或尝试使用浏览器打开它)。

我觉得很奇怪你有imgServlet-context.xml

顺便说一句,没有必要使用servlet来做到这一点。您可以安全地将您的调度程序servlet映射到/*,并使用弹簧控制器来处理@RequestMapping("/images/{id}")

当您指定网址时,最好使用src="<c:url value="/images/${..}" />" - 这将解析相对于当前上下文的网址。另一个选项是使用相对路径 - 即src="images/${..}"

+0

感谢您的回复。我删除了imageServlet-context.xml。当我尝试别的东西时,我在那里。我想我误解了其他一些帖子。我认为,如果图像位于本地文件系统的应用程序之外,需要通过servlet进行流式处理,并且我无法在同一请求中获取页面数据和图像?如果我可以,那么这个例子就容易多了。我已经在模型中使用byte []格式的图像。 – blong824 2011-02-28 14:36:45

+0

@ blong824是的,你是对的 - 你必须流式传输它。正如我所说 - 检查萤火虫。 – Bozho 2011-02-28 14:56:26

+0

我检查了萤火虫,我也没有看到任何错误。图像的src是src =“/ image/2”。 – blong824 2011-03-01 01:45:53

1

使用标准标记库中的c:url标记作为img和其他URL,这应该是您的Web应用程序上下文相对的。由于前导“/”指向根上下文或/图像上下文而不是您的Web应用上下文,因此您使用“/images/${image.imageId}”指定的URL,并且仅当您将Web应用作为根上下文部署时才会起作用。使用c:url时,它始终可以工作,当应用程序是根目录并且它是非根上下文时。

相关问题