Lniux上的tomcat部署web项目路径问题
一、项目路径及部署、启动位置
1、在tomcat下部署应用,部署路径:一般直接部署在tomcat/webapps/ROOT下即可。
2、默认访问路径:tomcat的默认访问路径为webapps/ROOT下的index.jsp页面。
可以通过修改tomcat/conf/server.xml下的配置信息来修改项目的默认访问路径。
3、准备金项目直接解压在tomcat/webapps/ROOT路径下:其实就是相当于把准备金项目命名为ROOT。
4、webapps下的每个文件夹,都可以看做一个web项目。
5、准备金系统的logback.xml中设置的路径是:
<!-- 定义日志文件 输出位置 --> <property name="log_dir" value="E:\logs" />
在Windows环境下,会识别E:为系统的E盘,默认在E盘下创建logs文件夹。但是正在Linux环境下,不存在E盘,会将E:\logs识别为E:logs文件夹。此时为相对路径,而tomcat在创建文件时:会从程序启动的地方去创建这个文件(Java项目中也是如此),那么web应用是从有tomcat来执行的,tomcat这个程序是从哪里启动文件是startup.bat?位置是tomcat/bin。会在bin目录下创建E:logs文件夹,而不是在tomcat的默认根路径故tomcat文件夹下创建E:logs文件夹。(验证:若是用sh bin/startup.sh命令,在tomcat目录下启动tomcat,则会在tomcat路径下创建E:logs文件夹。)
所以为了使日志文件在我们指定的目录下,有两只方式:
【1】我们可以使用绝对路径: /
【2】也可以使用相对路径:
./ 当前目录。
../ 父级目录。
/ 根目录。
但是并不及建议用E:这种写死的路径。可以用以下方式创建日志文件的路径:
方式一:
value="${catalina.home}/logs":
本地:会在tomcat目录下创建logs文件。
Linux:Linux上会在tomcat目录下创建logs文件。
方式二:
value="${catalina.base}/logs":
本地:会在C:\Users\Administrator\.IntelliJIdea2017.2\system\tomcat\Unnamed_reserve_10目录下创建logs文件。(因为
本地tomcat为每个idea项目在这里创建了一个副本,项目是在这里启动的)
Linux:会在tomcat目录下创建logs文件。
方式三:
value="logs":会在tomcat/bin目录下创建logs文件。 ../webapps/工程名:会在工程名目录下创建logs文件。
注意:我上次本地启动项目是在E盘创建的logs文件夹,这次可能是改啥东西了?我也不知道,反正本地的logs文件夹又跑tomcat/bin目录下了。奇怪。

这个是用tomcat启动的web项目。我在这个项目里建了个main主方法,创建的logs文件又跑项目的根路径下了:

邪了门了,本地启动项目,好像配置的路径不起作用了。。。
7、项目里获取Tomcat服务器的根路径:
String property = System.getProperty("catalina.home");
System.out.println(property);
8、运行位置
String property1 = System.getProperty("catalina.base");
System.out.println(property1);
以前一直很好奇,在idea中运行tomcat,把项目部署到其中,运行起来,然后我去tomcat目录下去看,根本找不到我部署的项目 那我的项目是咋运行的啊… - -
后来我就查啊查 ,纠结啊纠结,然后大概知道是咋回事了:
在idea中配置的tomcat,在运行时idea不会把项目放到该路径下,而是复制一份足够的配置文件,到 ${user.home}/.IntelliJIdea/system/tomcat 目录下:

也就是说每个项目都有属于自己的一份tomcat配置,互不干扰。
每个项目的配置文件夹中有一个 /conf/Catalina/localhost/ROOT.xml 文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<Context path="" docBase="D:\work\项目\target\xxx-web" />
其中,path是指在访问此项目时,是否需要添加额外的路径,如果为空,则直接使用域名或者ip就可以访问到该项目:127.0.0.1。这个值在ieda中的Run/Debug Configurations中可以配置:

docBase是指要运行的项目的部署位置,D:\work\项目 就是我的项目源代码的位置,target是由maven构建后生成的,D:\work\项目\target\xxx-web 目录就是maven build完成之后生成的项目,结构如下:

而idea启动tomcat的命令为:

也就是说,整个项目运行过程为:首先maven build项目,将构建结果写到项目的target目录下,然后idea复制一份tomcat的配置文件到${user.home}/.IntelliJIdea/system/tomcat 中,之后启动tomcat安装目录下的catalina.bat文件,tomcat读取配置文件,找到项目位置,然后就运行起来了。
原文链接:https://blog.csdn.net/joenqc/article/details/58044953
二、tomcat修改默认访问项目名称和项目发布路径
1、修改项目发布路径
tomcat默认的而发布路径为 tomcat/webapps/目录,但是这个目录下有一些默认的项目,在tomcat启动的时候会跟着一起加载。如果不想删除这些项目,可以把tomcat发布的路径修改到其他地方。
找到tomcat/conf/server.xml文件,修改里面这一行的appBase为其他路径即可。
<Host name="localhost" appBase="/root/webfile/webapps" unpackWARs="true" autoDeploy="true">
其中:
- name是虚拟主机名,对应目录 /conf /Catalina /localhost
- unpackWARs 为是否自动解压war文件,如果设置为true,表示把war文件先展开再运行。如果为false则直接运行war文件
- autoDeploy,默认为true,表示如果有新的WEB应用放入appBase并且Tomcat在运行的情况下,自动载入应用
特地别:
这里既可以用相对路径,也可以用绝对路径。
相对路径默认tomcat目录为根目录
2、修改默认访问项目
最简单的,可以直接把项目名称修改为ROOT,放在 tomcat/webapps/目录即可。
如果不想修改。那么在第1步中的
<Host name="localhost" appBase="/root/webfile/webapps" unpackWARs="true" autoDeploy="true">
下面加上下面这句即可,其中
<!-- 设置默认项目名称 -->
<Context path="" docBase="/root/webfile/web" reloadable="true"/>
path代表用浏览器访问的时候的的路径,如http://localhost:8080/web来访问path=”/web”docBase为你的项目的路径,这里同样既可以用相对路径,也可以用绝对路径。设置好了之后就会把项目自动映射到ROOT- reloadable,如果这个属性设为true,tomcat服务器在运行状态下会监视在WEB-INF/classes和WEB-INF/lib目录下class文件的改动,如果监测到有class文件被更新的,服务器会自动重新加载Web应用
三、JavaWeb创建的文件夹默认在tomcat/bin中
系统项目中需要设置缓存目录,原本项目中的目录设置为D:/cache目录,这怎么成?于是手动改成了cache目录,原本想使用了相对路径,web项目能够把缓存路径设置到tomcat的webapp的具体项目中,谁知道项目启动后在web项目目录中根本找不到这个目录,什么原因?
原来这是java读取文件机制的问题,如果直接这样写路径new File("a.***"),那么tomcat就会从程序启动的地方去创建这个文件(Java项目中也是如此),那么web应用是从有tomcat来执行的,tomcat这个程序是从哪里启动文件是startup.bat,位置是tomcat/bin。
我们前面说了,普通java项目也是如此,从程序启动的地方创建文件,那么文件路径不会是JDK中bin路径吧?不是这样的,看实验结果:
1 package io.guangsoft.file;
2 import java.io.File;
3 public class CreateFile {
4 public static void main(String args[]) {
5 File file = new File("location.txt");
6 System.out.println(file.getAbsolutePath());
7 }
8 }

结果表明,默认的文件路径是eclipse项目路径,因为我们的项目从main函数启动,而main函数在eclipse项目中,同理web项目的启动入口main函数在tomcat的bin中的某个jar包。而jdk提供的仅是java运行程序不是真正的程序启动路径。
Lniux上的tomcat部署web项目路径问题的更多相关文章
- Tomcat部署web项目,如何直接通过域名访问,不加项目名称
问题:下面的问题是互联网上问得比较多的,但是显然都是同一个问题. JavaWeb项目部署到tomcat服务之后设置不需要输入项目名称即可访问? Tomcat部署web项目,如何直接通过域名访问,不加项 ...
- Intellij IDEA通过tomcat部署web项目的机制
问题 以前使用eclipse调用tomcat运行web项目时,eclipse的方式非常直接了当,就是直接将项目更新到%TOMCAT_HOME%/webapps目录下即可.然而在使用Intellij I ...
- tomcat部署web项目方法
一.tomcat部署web项目之静态配置: 方法一:直接将为web项目放到webapps下: 如图所示:在webapps文件下,存放了一个html文件,启动tomcat,访问http://localh ...
- tomcat部署web项目的方式 转
JavaWeb开发Tomcat中三种部署项目的方法,开始Java web开发必不可少的步骤,经过查找,觉得有篇文章介绍的不错 1.在conf目录中新建Catalina\localhost目录,在该目录 ...
- eclipse,tomcat部署web项目,以及本地文件访问
1.直接把项目复制到Tomcat安装目录的webapps目录中,这是最简单的一种Tomcat项目部署的方法,也是初学者最常用的方法. 2.在tomcat安装目录中有一个conf文件夹,打开此文件夹,其 ...
- Tomcat 部署 Web 项目的本质理解
手动创建Web项目 不借助集成开发工具IDE,直接手动创建一个Web项目,有助于理解Web项目的本质. 1.首先建立一个myweb文件夹(自己定义项目名). 2.然后可以建一个html文件(文件里面只 ...
- Tomcat部署web项目
在Myeclipse中,我们很容易做到这一步:把一个web项目生成war文件 其实在eclipse中,实现这样的功能,也是很简单的. 下面就看一下是怎样操作的吧! 新建一个web项目: 取名为:ecl ...
- linux安装tomcat部署web项目
我用的是如下图的两个软件,连接linux服务器. 其中WinSCp是传输文件用的,SecureCRT是用来输入命令的. 1.复制tomcat到指定目录(可复制到你想要的目录下),命令如下: cp /路 ...
- Tomcat 部署web 项目
转载,原文链接: https://www.cnblogs.com/ysocean/p/6893446.html 侵删 回到顶部 3.Tomcat 的目录结构 回到顶部 4.部署项目的第一种方法(项目直 ...
随机推荐
- 重新整理 .net core 实践篇—————静态中间件[二十一]
前言 简单整理一下静态中间件. 正文 我们使用静态文件调用: app.UseStaticFiles(); 那么这个默认会将我们根目录下的wwwroot作为静态目录. 这个就比较值得注意的,可能刚开始学 ...
- 微信小程序 -- 基于 movable-view 实现拖拽排序
微信小程序 -- 基于 movable-view 实现拖拽排序 项目基于colorui样式组件 ColorUI组件库 (color-ui.com) 1.实现效果 2. 设计思路 movable-vie ...
- python django框架+vue.js前后端分离
本文用于学习django+vue.js实现web前后端分离协作开发.以一个添加和删除数据库书籍应用为实例. django框架官方地址:https://www.djangoproject.com/ vu ...
- ubuntu 如何更改 grub 界面主题
ubuntu 如何更改 grub 界面主题 安装 Liunx 系统的人都知道,系统引导是通过 grub 去引导的,但是 grub 这个界面就很单调,大概是这样子的 这肯定不符合我们潮流青年的审美的~ ...
- 【NX二次开发】移动WCS坐标系
说明:移动WCS坐标系 用法: #include <uf.h> #include <uf_csys.h> extern DllExport void ufusr(char *p ...
- 大厂面试必问!HashMap 怎样解决hash冲突?
HashMap冲突解决方法比较考验一个开发者解决问题的能力. 下文给出HashMap冲突的解决方法以及原理分析,无论是在面试问答或者实际使用中,应该都会有所帮助. 在Java编程语言中,最基本的结构就 ...
- 01 . Varnish简介,原理,配置缓存
简介 Varnish是高性能开源的反向代理服务器和HTTP缓存服务器,其功能与Squid服务器相似,都可以用来做HTTP缓存.可以安装 varnish 在任何web前端,同时配置它缓存内容.与传统的 ...
- LuatOS | 全新在线模拟器,随时随地发挥创意
LuatOS --运行在嵌入式硬件的实时操作系统,开启全新物联网生态. 聚焦嵌入式应用生态,内置功能可支持绝大多数物联网应用场景.深度整合Lua语言,只需少量内存和Flash空间就能运行.不局限于合宙 ...
- 【模板】O(nlongn)求LIS
合理运用单调性降低复杂度 平常用的都是O(n^2)的dp求LIS(最长不下降子序列)这里介绍O(nlogn)的算法 分析 对于可能出现的x<y<i且A[y]<A[x]<A[i] ...
- Binding(二):控件关联和代码提升
上节我们讲到,使用Binding,我们可以关联后台代码中的属性,在某些情况下,我们可能需要将两个控件关联起来,借助Binding,我们也可以轻松的实现. 关联控件 设想这样一个场景,界面中有个Chec ...