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启动两个项目,控制台输出异常信息:Unable to open debugger port (127.0.0.1:50605): java.net.SocketException及解决方案
- 项目是通过DUBBO对外提供RPC调用,启动两个项目,控制台输出异常信息:Can not lock the registry cache file及解决方案
- tomcat 服务器参数配置:Xms.Xmx配置含义
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中项目构建后的war包存放路径:
-
总结
- 选择 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文件,有公共的父类项目