IDEA + Tomcat

IDEA + Tomcat


IDEA中项目部署及启动方式

  • MVN:Maven插件自动部署项目
  • Tomcat :IDEA + Tomcat
  • Application Server
    • 通过 org.eclipse.jetty.webapp.WebAppContext 配置相应环境参数
    • 通过 org.eclipse.jetty.server.Server 启动项目

IDEA + TOMCAT 部署服务时添加 WAR 与 WAR Exploded 的区别

  • Tomcat部署时war和war exploded区别以及平时踩得坑

    • WAR:将项目以 war 包形式上传到服务器;发布模式
    • WAR Exploded :将项目以当前文件夹的位置关系上传到服务器,开发模式,支持热部署
    • String contextPath = request.getSession().getServletContext().getRealPath(“/”);
      WAR :获取的是 Tomcat 本地安装位置
      WAR Exploded :获取的是项目TARGET文件夹在本地的位置
  • 热部署: DEBUG模式支持修改的内容及时可见


tomcat


IDEA通过Tomcat部署项目,在Tomcat中无法找到部署的项目

  • 问题:使用 Eclipse + Tomcat(非IDE自带Tomcat) 部署项目,在 {%tomcat_path%}/webapps/ 文件夹内可以找到部署的项目;但使用IDEA后却找不到
      -
  • 前提:
    • IDEA通过Tomcat部署服务时,有两个选项 war 及 war exploded ,项目开发调试时选择 war exploded
    • 原因在于可以将项目以当前项目文件的结构部署到服务器,支持服务器热启动,即修改代码后无需重新启动服务,就可以在浏览器看到修改后的效果
  • 解释:

    • IDEA中项目构建后的war包存放路径:
      • File –> Project Structure –> Project Settings –> Artifacts –> 选择本次发布的 war 包名称 –> 右侧 Output directory 显示此war exploded 放置的磁盘路径地址
    • IDEA中项目对应Tomcat文件存放路径:

      C:\Users\username.IntelliJIdea14\system\tomcat\

      • 在该路径下,每个项目一个对应的文件夹;即每个项目对应一个Tomcat,互不干扰;
      • 打开具体的某个项目文件夹,有 logs / conf / work 三个文件夹,是IDEA拷贝Tomcat中的三个文件;其中 conf\Catalina\localhost 目录下有一个 ROOT(project_name).xml ,配置信息如下;
      • <?xml version="1.0" encoding="UTF-8"?>
        <Context path="/hello" docBase="D:\work\project\hello\hello\hello.web\target\ROOT" />
      • 其中 path 是项目部署后的访问域名path ;docBase 指向 IDEA 导出的 war exploded 包的地址;即上方 Output directory 配置的地址
    • IDEA 中关联Tomcat的启动命令:启动tomcat、关闭tomcat都是调用的catalina.bat
      IDEA中配置Tomcat
      IDEA中关联Tomcat的启动命令
      Tomcat安装路径中bin文件夹
  • 总结

    • 选择 war exploded 部署项目后,项目会新增Target文件夹
    • idea复制一份tomcat的conf、logs和work文件夹到${user.home}/.IntelliJIdea/system/tomcat 中
    • 启动tomcat安装目录下的catalina.sh文件
    • tomcat读取配置文件,找到项目位置,然后就运行起来了

参考资料


项目加载

  • 多模块项目按照层级划分为多个子项目
    • xxx.dal :对应SpringMVC 的数据处理层,包含 po 、mapper.java 、mapper.xml 及数据库连接配置
    • xxx.service :对应接口层
    • xxx.biz :对应业务处理层
    • xxx.web :对应 controller 层
    • xxx.common :公共组件
    • xxx.api :dubbo RPC 接口,对外提供接口
    • xxx.server :RPC 接口实现
  • 项目部署加载到Tomcat时的war包中只包含 web 部分,那么其他部分是如何加载到服务器中的?
  • 项目的war包存放在项目路径下对应target文件夹中,文件夹内各个文件夹的内容及作用
文件夹 内容 其他
classes src/main/java 类的编译结果.class ; src/main/resources 中配置文件 -
maven-archiver pom.xml(Maven 自动生成此文件) pom.xml 中包含version/groupId(项目组织唯一标识)/artifactId(项目唯一标识)
maven-status createFiles.lst:src/main/java 包中所有类的包路径及类名,即类所在磁盘上的相对路径;inputFiles.lst:src/main/java 包中所有类的物理路径,即类所在磁盘上的绝对路径 -
test-classes src/test目录 -
ROOT web项目中webapp目录中的内容 -

- web 项目的pom.xml 文件添加了其他项目的依赖
- File –> Project Structure –> Artifacts –> 选择 war exploded –> 展开WEB-INF –> lib –> 可以查看到其他项目被打成jar包添加web项目的依赖中
- 每个项目有独立的pom.xml文件,有公共的父类项目

参考资料

猜你喜欢

转载自blog.csdn.net/mingyundezuoan/article/details/79672516