zoukankan      html  css  js  c++  java
  • 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:UsersAdministrator.IntelliJIdea2017.2system omcatUnnamed_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项目	argetxxx-web" />

    其中,path是指在访问此项目时,是否需要添加额外的路径,如果为空,则直接使用域名或者ip就可以访问到该项目:127.0.0.1。这个值在ieda中的Run/Debug Configurations中可以配置:

     

    docBase是指要运行的项目的部署位置,D:work项目 就是我的项目源代码的位置,target是由maven构建后生成的,D:work项目 argetxxx-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运行程序不是真正的程序启动路径。

    如果错过太阳时你流了泪,那你也要错过群星了。
    在所有的矛盾中,要优先解决主要矛盾,其他矛盾也就迎刃而解。
    不要做个笨蛋,为失去的郁郁寡欢,聪明的人,已经找到了解决问题的办法,或正在寻找。
  • 相关阅读:
    对于Python中self的看法
    SpringBoot整合MyBatis-Plus快速开始
    Hive原理--体系结构
    Docker Compose + Traefik v2 快速安装, 自动申请SSL证书 http转https 初次尝试
    记录:更新VS2019后单元测试运行卡住无法运行测试的问题。
    黑帽来源页劫持代码以及如何防范
    OFFICE 2010 每次打开提示安装的问题
    Mssql 查询某记录前后N条
    验证邮箱正则表达式,包含二级域名邮箱,手机号正则表达式支持170号段
    删除TFS上的团队项目
  • 原文地址:https://www.cnblogs.com/szrs/p/12574121.html
Copyright © 2011-2022 走看看