访问webapp之外的文件(Tomcat V6和Spring)
我提供了上传图像的选项,并且图像被上传到opt/uploads/contactImages,在windows的情况下是C:/opt/uploads/contactImages 我想在JSP中显示图像。为此,我尝试通过在主机标记下添加以下标记来配置tomcat访问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
<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" />