在javaweb项目开发中,图片上传是个比较常见的场景。一般都是在项目路径下建个文件夹,然后上传到该文件夹下;这样这个图片就可以和静态资源一样被直接访问。这样的好处就是访问这图片特别方便;缺点是重新部署时要手动把图片备份,不然图片就丢失了。

        今天通过在网上查阅一些资料,找到了如下2个方案:
        (1)配置tomcat虚拟目录
      • 该方案的好处是虚拟目录下的文件也可以类似于静态资源一样这样访问
      • 美中不足的是上传图片还需要上传到虚拟目录的绝对路径,在网上没看到怎么获取虚拟目录的绝对路径的方法;个人想到的解决方案就是配置一个properties文件,里面放绝对路径。

更多相关内容可以在网上查阅。。参考:http://blog.csdn.net/l1028386804/article/details/52389722


        (2)通过linux的软连接实现
      • 该方案的好处就是可以和类似静态文件一样访问,上传就直接上传到项目根目录下的文件夹即可。和文章开头说的那种方案在代码上来说是一样的。
      • 缺点是需用通过linux命令对上面项目根目录的上传文件夹做软连接,连接完之后上传的文件其实是上传到了软连接的文件夹去了。
      • 还有个问题是需要配置tomcat支持软连接

综合上面2种情况,我选择采用软连接的方式,下面谈谈linux软连接。

一、软连接介绍

        软连接命令:
ln -s 源文件 目标文件 
 
1
ln -s 源文件 目标文件 
        具体介绍可参考:http://www.cnblogs.com/crazylqy/p/5821105.html

二、实际案例

        (1)代码中,我们把文件上传到项目路径(webRoot或者webapp)的下的images/ 文件夹中;这个上传怎么实现,不介绍。
        (2)linux中的处理
    • 在linux中建立一个名为images的文件夹。(这个文件夹名字要和你准备软连接的文件夹名字一样,这个文件夹的位置随便在那都可以,但是一般都在tomcat的外面。)

    • 进入到tomcat下的部署好的项目路径下,创建软连接。源文件夹是上面创建的该文件夹,目标文件夹是后面我们上传的文件夹。

建立成功后就可以看到images文件夹下有个箭头,用图形界面看其实就是个快捷方式。

                
 
    • 建立软连接后,可以测试上传文件,会发现文件上传后跑到tomcat外面的文件夹里面去了。但是用访问静态文件的方式现在还是访问不到,会报404。原因是tomcat默认不支持软连接,需要在conf/context.xml中开启。配置方法如下:

tomcat5、6、7版本:

                        <Context allowLinking="true" />

          tomcat8、9版本:

<Context> <Resources allowLinking="true" /> </Context>

         更多配置参考:http://www.cnblogs.com/wuxun1997/p/6769971.html

    • 配置完后,就大功告成了。

更多软连接的案例可参考:http://blog.csdn.net/ggmmqq/article/details/8253570  

http://www.cnblogs.com/wuxun1997/p/6769971.html

三、软连接的注意事项

(1)软连接的删除需要特别注意,具体可参考

http://www.cnblogs.com/cartsp/p/6437046.html

http://blog.csdn.net/zhenwenxian/article/details/16369767

(2)笔者发现eclipse的重新部署还是会把软连接的源目录下的文件删除,这个是个很奇怪的地方。不过运维人员重新部署肯定不是用eclipse的。所以不用担心。

(3)重新部署项目后,软连接需要重新建立


后续还有一篇介绍linux软连接的文章,推荐阅读。


                 

linux下通过软连接实现访问项目路径外面的资源的更多相关文章

  1. Linux下SVN创建新的项目

    Linux下SVN创建新的项目   Linux环境下的SVN创建新的项目 一.前置条件: 1)有安装了linux系统的服务器,123.*.*.29 2)服务器上安装了svn,本人服务器的svn的数据安 ...

  2. Windows 与 Linux下关于端口不能访问的问题

    自己写的一个HTTP文件服务器,在端口 50000上监听HTTP连接请求,在Eclipse里面将程序正常地启动之后,能够在自己的机器上(Eclipse启动该程序的机器上)访问 50000端口,即Fil ...

  3. linux下使用SVN上传项目

    linux下使用SVN上传项目 摘自:https://blog.csdn.net/puppet_/article/details/78259591 2017年10月17日 13:51:33 puppe ...

  4. Linux 下指定端口开放访问权限

    Linux 下指定端口开放访问权限 作者:Grey 原文地址: 博客园:Linux 下指定端口开放访问权限 CSDN:Linux 下指定端口开放访问权限 环境 CentOS 系和 Debian 系的防 ...

  5. linux下使用软连接之案例二

           在笔者的上一篇文章介绍过怎么通过linux的软连接在不修改上传代码的情况下,将上传到项目路径下的图片改为上传到项目外面,防止重新部署后图片被删除了.同时还可以直接通过类似访问静态资源的方 ...

  6. Linux下tomcat的安装与项目部署

    最近在linux下安装了jdk,为了圆我以前的心愿,把tomcat也安装了,顺便部署个项目,也算是小又成就感 废话不说了,直接上过程 一.下载安装对应的jdk,并配置Java环境. 有关jdk的安装请 ...

  7. linux下c/c++方式访问curl的帮助手册

    自:http://blog.chinaunix.net/u1/47395/showart_1768832.html 有个业务需求需要通过curl 代理的方式来访问外网 百度了一把,测试可以正常使用.记 ...

  8. linux 下添加库的加载路径的方式

    linux 下有两种添加加载库路径的方式: 1.修改环境变量: export LD_LIBRARY_PATH=path_name 2.修改配置文件 修改 /etc/ld.so.conf 的内容在最后添 ...

  9. Linux下的软连接和硬链接

    由于教学上的原因,需要下载Android源码,后来使用repo时,系统提示需要python2,我的系统中是两个都有的,但是默认是python3,无法下载,通过创建了个链接搞定,下面就来说说linux下 ...

随机推荐

  1. react native中的聊天气泡以及timer封装成的发送验证码倒计时

    今天看来情书写的文章,研究了一下大佬写的文章,自己做一点总结. 其实,今天我想把我近期遇到的坑都总结一下:1.goBack的跨页面跳转,又两种方法,一可以像兔哥那样修改navigation源码,二可以 ...

  2. nodejs设置NODE_ENV环境变量(2)

    引的人家的,原文地址:http://sorex.cnblogs.com/p/6200940.html 环境变量 环境变量是操作系统运行环境的一些参数.在开发环境或者部署环境中都需要使用到.本文讲述了使 ...

  3. tali -f 和 tail -F 之间的区别

    tail -f      等同于--follow=descriptor,根据文件描述符进行追踪,当文件改名或被删除,追踪停止 tail -F     等同于--follow=name  --retry ...

  4. No module named 'MySQLdb' Python3 + Django 2.0.3 + mysql 无法连接

    问题概览: 学习Django连接mysql数据库的时候遇到了问题 首先安装mysql(Python 3不支持MySQL-python): pip install pymysql 进入编辑 settin ...

  5. 【C语言】 使用Beep() 函数 演奏歌曲

    #include <windows.h> int main(){ ){ Beep(, ); Beep(, ); Beep(, ); Beep(, ); Beep(, ); Beep(, ) ...

  6. SP--report存储过程

    USE [edison_prc] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ),),),),),@day1 int,@day2 int) ...

  7. libcurl.dll 7.60.0静态库包含openssl/zlib

    最近做个QT的小程序需要使用LIBCURL支持HTTPS,结果查资料发现官方默认的是不支持的,需要手动重新编译,编译的时候加入SSL支持. 看着就好麻烦的样子, 找了一圈,还真有现成的,但是现在写程序 ...

  8. Redis系列九:redis集群高可用

    Redis集群的概念: RedisCluster是redis的分布式解决方案,在3.0版本后推出的方案,有效地解决了Redis分布式的需求,当一个服务挂了可以快速的切换到另外一个服务,当遇到单机内存. ...

  9. BZOJ4894:天赋(矩阵树定理)

    Description 小明有许多潜在的天赋,他希望学习这些天赋来变得更强.正如许多游戏中一样,小明也有n种潜在的天赋,但有一些天赋必须是要有前置天赋才能够学习得到的. 也就是说,有一些天赋必须是要在 ...

  10. 【正则表达式】用js实现千位分隔符,怎么实现?

    (?=pattern)  正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串.这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用.例如,'Windows (?=95|98|NT| ...