当前位置: 代码迷 >> Java Web开发 >> 求指点,怎么访问应用目录以外的外部资源
  详细解决方案

求指点,怎么访问应用目录以外的外部资源

热度:20   发布时间:2016-04-16 22:17:07.0
求指点,如何访问应用目录以外的外部资源
今天给网站加了一个favicon.ico文件,用的是tomcat,前面一级是nginx
目录大概结构:
d:/web
      /static   (nginx根目录)
              /image/webXXX.ico  (favicon.ico图标)
      /root      (tomcat根目录)

网站的静态资源全部放在static目录中,全部交给了nginx处理,nginx处理不了的就交给tomcat处理。
由于这个图标地址不是固定的,要程序去处理然后才能给出实际ico文件地址,而且要求静态文件资源不能放到root目录中。
当访问//web.com/favicon.ico时,如何把不在自己目录的/image/webXXX.ico返回给客户端?

我试了forward,他只能重定向到项目内的文件中,失败。
然后试了301重定向到//static.com/image/webXXX.ico,chrome在标签上正常显示图标,我电脑里IE9为最高版本,IE系列全部不支持,失败。
考虑过用File API把文件数据读取出来再发送给客户端,不过感觉有点复杂,tomcat能自己处理就好了。

访问程序外部资源这种问题感觉应该会经常遇到,有好的解决方法到时就都能迎刃而解了。
求指点
------解决方案--------------------
这个描述感觉就很奇怪。icon是静态文件,访问地址却是动态的,这是一种什么情况,能否举例说明。
你说的静态文件不能放到root下,还是不能用tomcat提供的服务访问?这是两回事,如果属于第一个,那简单ln -s p1 p2建软连接可以实现。如果是不能用tomcat提供的服务访问,那只能在nginx上做文章了。不知道你的访问地址是动态的是什么意思。
------解决方案--------------------
为什么直接访问不能给客户端下载呢,就为了不泄漏这个文件吗?就算使用防盗链技术他直接访问你的网站也能拿到这个文件。
------解决方案--------------------
引用:
Quote: 引用:

这个描述感觉就很奇怪。icon是静态文件,访问地址却是动态的,这是一种什么情况,能否举例说明。
你说的静态文件不能放到root下,还是不能用tomcat提供的服务访问?这是两回事,如果属于第一个,那简单ln -s p1 p2建软连接可以实现。如果是不能用tomcat提供的服务访问,那只能在nginx上做文章了。不知道你的访问地址是动态的是什么意思。


可能写的描述太烂,只有自己看得懂,想起以前上学时写的作文了。。。
比如程序里有2个域名可以访问,一个域名对应一个ico图标,如果nginx上配置,直接写域名对应的文件就行了,但如果是3、4。100个域名,就不现实了。还有对应的文件也不可能去一一管理,太累了。
这个功能可能是冰山一角,别的情景下也可能要访问程序外部的资源。
“不知道你的访问地址是动态的是什么意思”,额。。好像没哪里看到了这句话

其实我想说的是“要程序去处理然后才能给出实际ico文件地址”这句,引用错了。
------解决方案--------------------
引用:
Quote: 引用:

这个描述感觉就很奇怪。icon是静态文件,访问地址却是动态的,这是一种什么情况,能否举例说明。
你说的静态文件不能放到root下,还是不能用tomcat提供的服务访问?这是两回事,如果属于第一个,那简单ln -s p1 p2建软连接可以实现。如果是不能用tomcat提供的服务访问,那只能在nginx上做文章了。不知道你的访问地址是动态的是什么意思。


可能写的描述太烂,只有自己看得懂,想起以前上学时写的作文了。。。
比如程序里有2个域名可以访问,一个域名对应一个ico图标,如果nginx上配置,直接写域名对应的文件就行了,但如果是3、4。100个域名,就不现实了。还有对应的文件也不可能去一一管理,太累了。
这个功能可能是冰山一角,别的情景下也可能要访问程序外部的资源。
“不知道你的访问地址是动态的是什么意思”,额。。好像没哪里看到了这句话

icon和域名对应,那是不是能通过urlrewrite的方法建立和icon存放地址的映射规则?或者所有的icon都放到一起,各个应用引用自己决定用哪个,想起以前做网站系统的时候静态资源都在一起,不过我们那个域名再多,应用再多也是一个icon,有个别子站点有自己的静态服务器(应用大,分管系列不一样),那就是另外的范畴了。
------解决方案--------------------
引用:
Quote: 引用:
其实我想说的是“要程序去处理然后才能给出实际ico文件地址”这句,引用错了。


嗯,就是这个文件名不是预先知道的(就算知道会用这个名字也当不知道),不能在写代码时候写死,需要通过别的渠道获取,比如数据库

那就是引用的资源是动态的,被引用的资源(icon)是静态的。其实你这个情况我们之前会用ssi,用cms管理,不会用到数据库,能静态化的页面就静态化。主要是我不了解你那边的一个具体情况有点不好说。
------解决方案--------------------
出于安全原因,是不会让你随意访问应用外文件的
  相关解决方案