关于Java获取Tomcat7和Tomcat8根目录路径webapps的不同

项目需要用到上传功能,所以想把上传后的图片保存在Tomcat的根目录下,发现Tomcat和Tomcat获取根目录有所不同,特此记录。


Java获取Tomcat根目录示例代码如下

  private HttpServletRequest request = ServletActionContext.getRequest();
  String path = request.getSession().getServletContext().getRealPath("/");
  System.out.println("path = " + path);
            
  String picturePath = request.getSession().getServletContext().getRealPath("/picture");
  System.out.println("picturePath = " + picturePath);

  String url = request.getSession().getServletContext().getRealPath("");
  System.out.println("url = " + url);

  int ch = url.lastIndexOf("\\");
  String webapp = url.substring(0, ch);
  System.out.println("webapp = " + webapp);

  String home = System.getProperty("catalina.home");
  System.out.println("home = " + home);

  String home2 = System.getProperty("catalina.home");
  System.out.println("home2 = " + home2 + "\\webapps");

使用的测试工具为postman
在这里插入图片描述
测试结果如下

Tomcat7:
在这里插入图片描述
Tomcat8:
在这里插入图片描述
此时,我们可以发现 request.getSession().getServletContext().getRealPath("/") Tomcat7和8获取的路径是一样的,都是获取你项目路径xxx,但是 request.getSession().getServletContext().getRealPath("") 获取的路径有所不同,而且 webapp在Tomcat可以直接获取,而Tomcat8则不能,需要使用其他方法来实现。

我们可以用更好的方法来实现,就是

 String home2 = System.getProperty("catalina.home");
 System.out.println("home2 = " + home2 + "\\webapps");

这样无论是Tomcat7还是Tomcat8都可以获取到正确的webapps路径了。

或者配置Tomcat的server.xml文件配置虚拟映射路径

1、修改Tomcat的server.xml文件,添加Context 字段

    <Host name="localhost"  appBase="webapps"  unpackWARs="true" autoDeploy="true">
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
               
			    <!-- 设置虚拟路径[访问时路径为/picture] -->  
         <Context path="/picture" docBase="F:\picture" reloadable="true" />  

其中path是映射的虚拟路径(可视具体情况配置),docBase是静态资源存放的真实物理路径,reloadable指有文件更新时,是否重新加载,一般设置为true后,tomcat不需要重启启动,自动热加载

2、此时,直接打开 http://localhost:8080/picture/xxxxxxxx.jpg 即可打开图片或上传文件到 http://localhost:8080/picture/ 即可。
在这里插入图片描述


结论:一般获取路径都是用于上传或者下载内容,我们可以用上面代码获取路径,也可以直接配置Tomcat的虚拟路径,但最好的方法就是使用云储存,使用云储存存储图片或者文件,可以很大程度减轻服务器压力,也不需要怎么去管理,非常方便,并且现在的云存储大多数都是10G免费试用。


猜你喜欢

转载自blog.csdn.net/qq_25595025/article/details/82783150