访问webapp之外的文件(Tomcat V6和Spring)

访问webapp之外的文件(Tomcat V6和Spring),spring,tomcat,Spring,Tomcat,我提供了上传图像的选项,并且图像被上传到opt/uploads/contactImages,在windows的情况下是C:/opt/uploads/contactImages 我想在JSP中显示图像。为此,我尝试通过在主机标记下添加以下标记来配置tomcat <Context docBase="/opt/uploads/contactImages/" path="/images" /> 我得到404错误。我错在哪里 更新 Servlet web.xml文件 <web-app

我提供了上传图像的选项,并且图像被上传到opt/uploads/contactImages,在windows的情况下是C:/opt/uploads/contactImages

我想在JSP中显示图像。为此,我尝试通过在主机标记下添加以下标记来配置tomcat

<Context docBase="/opt/uploads/contactImages/" path="/images" />
我得到404错误。我错在哪里

更新

Servlet web.xml文件

<web-app id="WebApp_ID" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

<display-name>Spring Web MVC Application</display-name>

<servlet>
    <servlet-name>mvc-dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>mvc-dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/mvc-dispatcher-servlet.xml</param-value>
</context-param>

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

SpringWebMVC应用程序
mvc调度器
org.springframework.web.servlet.DispatcherServlet
1.
mvc调度器
/
上下文配置位置
/WEB-INF/mvc-dispatcher-servlet.xml
org.springframework.web.context.ContextLoaderListener

Servlet或资源处理程序不能直接为文件系统中的文件提供服务。您需要编写自己的
@Controller
处理程序方法。比如说

@Controller
public class ImagesController {

    public static final String BASE_PATH = "/opt/uploads/contactImages";

    @RequestMapping(value = "/{fileName}" , method = RequestMethod.GET) 
    public ResponseEntity<FileSystemResource> getFile(@PathVariable("fileName") String fileName) {
        FileSystemResource resource = new FileSystemResource(new File(BASE_PATH, fileName));
        ResponseEntity<FileSystemResource> responseEntity = new ResponseEntity<>(resource, HttpStatus.OK);
        return responseEntity;
    }
}
我认为上述方法不适用于嵌套目录中的文件


请注意,中的
docBase
属性

<Context docBase="/opt/uploads/contactImages/" path="/images" />

这是不正确的。该属性指定

此文件的文档库(也称为上下文根)目录 web应用程序,或web应用程序存档文件的路径名 (如果此web应用程序直接从WAR执行 文件)。您可以为此目录或WAR指定绝对路径名 文件,或相对于的appBase目录的路径名 拥有主机


所以它必须指向您的web应用程序,而不是存储文件的随机目录。

我不知道Tomcat不能只提供这样的文件。你有我们可以看到的servlet web.xml描述符吗?@SotiriosDelimanolis我在问题中添加了web.xml,你有图像的
或其他处理程序吗?是的,我有
标记,我认为这个标签是用来访问webapp中的资源,而不是app之外的资源。试着把它放在/opt/uploads/contactImages/resources/file.png和access中,这应该可以工作。代码返回xml,奇怪。如果有帮助的话,该文件位于
e:
目录下的webapp之外。代码中的控制器返回xml/json,检查时发现注册了3个messageconverter,其中两个是jackson,一个是string converter。实际下载文件需要哪个转换器?尝试使用数组和资源,但现在我下载了大小为0字节的文件。@coding\u您需要
ResourceHttpMessageConverter
来正确序列化
资源。考虑一个新的问题,如果这对你不起作用。谢谢。对于其他的
products=“application/octet stream”
@RequestMapping
必须的。
http://localhost:8080/images/file.png 
<Context docBase="/opt/uploads/contactImages/" path="/images" />