如何用JavaScript读取服务器完整路径文件?远程文件404问题求解
问题2:Tomcat路径导致的404错误解决办法
先帮你理清核心误区:Tomcat的URL访问路径和服务器本地文件系统路径完全是两码事!
你说文件实际存在于var/lib/tomcat/webapps/tpi/documents/D773.JPG,这里的webapps/tpi是Tomcat的一个Web应用根目录——也就是说,当你把tpi应用部署到Tomcat后,这个应用的根URL是http://5.135.140.184:8080/tpi/,应用内的所有资源路径都是相对于这个根来解析的。
你之前用window.open('http://5.135.140.184:8080/tpi/documents/D773.JPG', '_blank')能正常打开,是因为这个URL正好对应webapps/tpi/documents/D773.JPG的文件;而你加了/var/lib/tomcat/webapps/之后,Tomcat会把这部分当成URL路径的一部分,去默认应用(ROOT)下找var/lib/tomcat/webapps/tpi/documents/D773.JPG,显然不存在,所以返回404。
分两种场景给你解决办法:
场景1:文件就在tpi应用的documents目录下(你的当前场景)
直接用你之前能正常访问的URL就行,完全不需要加服务器本地的/var/lib/tomcat/webapps/路径:
window.open('http://5.135.140.184:8080/tpi/documents/D773.JPG', '_blank');
Tomcat会自动从tpi应用的根目录去匹配资源。
场景2:文件不在webapps目录下,需要访问服务器其他位置的文件
如果你的文件存在Tomcat的webapps之外(比如/var/data/photos/),可以通过配置Tomcat的虚拟目录来实现访问:
- 打开Tomcat的
conf/server.xml文件,找到<Host>标签,添加一个<Context>子标签:
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <!-- 其他原有配置 --> <!-- path是URL中要使用的路径,docBase是服务器本地的文件目录 --> <Context path="/external-photos" docBase="/var/data/photos" reloadable="true" /> </Host>
- 重启Tomcat后,你就能通过
http://5.135.140.184:8080/external-photos/D773.JPG访问目标文件了。
⚠️ 补充:如果不想修改全局的server.xml,可以只针对tpi应用配置——在tpi应用的META-INF目录下创建context.xml文件,添加同样的<Context>配置即可,这样只会影响tpi应用。
内容的提问来源于stack exchange,提问作者Sara Sessa

