1. 程式人生 > >Intellij IDEA通過tomcat部署web專案的機制

Intellij IDEA通過tomcat部署web專案的機制

問題

以前使用eclipse呼叫tomcat執行web專案時,eclipse的方式非常直接了當,就是直接將專案更新到%TOMCAT_HOME%/webapps目錄下即可。然而在使用Intellij IDEA時,該目錄下看不到任何專案檔案,%TOMCAT_HOME%/conf/Catalina/localhost目錄下也看不到任何專案配置檔案,那麼問題來了,web專案到底是如何部署到tomcat上的呢?

思路

通過仔細觀察Intellij啟動tomcat時的輸出日誌(MAC OS下),可以發現一些端倪。

25-Oct-2016 17:14:10.698 INFO [main] org.apache
.catalina.startup.VersionLoggerListener.log Server version: Apache Tomcat/8.0.33 25-Oct-2016 17:14:10.744 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built: Mar 18 2016 20:31:49 UTC 25-Oct-2016 17:14:10.745 INFO [main] org.apache.catalina.startup.VersionLoggerListener
.log Server number: 8.0.33.0 25-Oct-2016 17:14:10.746 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name: Mac OS X 25-Oct-2016 17:14:10.747 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version: 10.11.1 25-Oct-2016 17:14:10.748 INFO [main] org.apache
.catalina.startup.VersionLoggerListener.log Architecture: x86_64 25-Oct-2016 17:14:10.752 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home: /Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home/jre 25-Oct-2016 17:14:10.756 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version: 1.8.0_77-b03 25-Oct-2016 17:14:10.757 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor: Oracle Corporation 25-Oct-2016 17:14:10.765 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE: /Users/didi/Library/Caches/IntelliJIdea2016.1/tomcat/Unnamed_didi-code 25-Oct-2016 17:14:10.766 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME: /opt/apache-tomcat-8.0.33 25-Oct-2016 17:14:10.767 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.file=/Users/didi/Library/Caches/IntelliJIdea2016.1/tomcat/Unnamed_didi-code/conf/logging.properties .....

其中的關鍵在這句:

CATALINA_BASE: /Users/didi/Library/Caches/IntelliJIdea2016.1/tomcat/Unnamed_didi-code

CATALINA_BASE指向了一個目錄(我的專案名為didi-code,應用上下文為code),在這個目錄下有以下檔案
.
├── conf
│ ├── Catalina
│ │ └── localhost
│ │ └── code.xml
│ ├── catalina.policy
│ ├── catalina.properties
│ ├── context.xml
│ ├── logging.properties
│ ├── server.xml
│ ├── tomcat-users.xml
│ ├── web.xml
│ └── web.xml.0
├── logs
└── work
└── Catalina
└── localhost
└── code

這個目錄和tomcat的配置目錄很相似,那和我們的專案有什麼關係呢?我們需要先從CATALINA_HOMECATALINA_BASE的區別入手。

CATALINA_HOME與CATALINA_BASE

簡單的說,CATALINA_HOME是Tomcat的安裝目錄,CATALINA_BASE是Tomcat的工作目錄。當我們想要執行多個Tomcat例項,但是不想拷貝多個Tomcat副本時,那麼我們可以配置多個不同工作目錄,在執行tomcat時對每個例項指派不同的工作目錄,它們共享安裝目錄的執行檔案(bin目錄下)。

這麼看來CATALINA_BASE所指向的就是conf、logs、temp、webapps、work和shared目錄。 而CATALINA_HOME則包括了Tomcat的二進位制檔案和指令碼目錄,也就是bin和lib目錄。

在我們解壓tomcat壓縮包後,這兩個目錄是混合在一起的,所以它們的路徑是相同的。但當我們希望再執行另一個Tomcat例項時,那麼我們可以再建立一個目錄,把conf、logs、temp、webapps、work和shared拷貝到該目錄下,然後在執行catalina.sh啟動tomcat例項時指定或修改環境變數中的CATALINA_BASE路徑即可。

分析

這時,我大致分析出了Intellij IDEA通過tomcat部署web專案原理了。

首先Intellij會為每個web專案建立一個單獨的資料夾,以“Unnamed_專案名”命名(可在.idea/workspace.xml中修改)。在每次啟動專案時,它先將tomcat目錄下原始的CATALINA_BASE目錄拷貝一份到該目錄下,也就是將當前tomcat的配置檔案拷貝到“Unnamed_專案名”資料夾下。然後將CATALINA_BASE的路徑修改為該目錄的路徑,再在 Unnamed_專案名/conf/Catalina/localhost下新增專案的配置檔案,如 code.xml,內容為

<?xml version="1.0" encoding="UTF-8"?>
<Context path="/code" docBase="/Users/didi/project/CODE-PROJ/didi-code-web/target/code" />

最後啟動tomcat,tomcat除了會啟動webapps下應用外還會載入/conf/Catalina/localhost下配置的應用,而Intellij就是通過這種方式“隱蔽”地載入web專案。

看到這兒你可能還會發現為什麼在tomcat安裝目錄下始終找不到專案log檔案的原因了,因為CATALINA_BASE指向了/Users/didi/Library/Caches/IntelliJIdea2016.1/tomcat/Unnamed_didi-code,所以指定相對路徑${catalina.base}的log檔案就存在了該目錄下。

相關推薦

Intellij IDEA通過tomcat部署web專案機制

問題 以前使用eclipse呼叫tomcat執行web專案時,eclipse的方式非常直接了當,就是直接將專案更新到%TOMCAT_HOME%/webapps目錄下即可。然而在使用Intellij IDEA時,該目錄下看不到任何專案檔案,%TOMCAT_HOM

IntelliJ IDEA 配置Tomcat 執行Web專案

以前都用MyEclipse寫程式的 突然用了IDEA各種不習慣的說  借鑑了很多網上好的配置辦法,感謝各位大神~ 前期準備  IDEA、JDK、Tomcat請先在自己電腦上裝好 好麼~  部落格圖片為主 請多看紅框框 開始 1.建立、配置專案  1.1建立專案  New

ideatomcat部署web專案遇到的兩個問題

系統:centos6.8 idea:ideaIU-15.0.6.tar.gz tomcat:apache-tomcat-7.0.90 一、報錯: Server is not connected. Deploy is not available sudo vim /

IntelliJ IDEA 配置Tomcat執行web專案

1. IDEA Run/Edit Configurations 中點選“+”號沒有tomcat server... 解決辦法:File--->Setting--->Build,Execution,Deployment---->Application Servers--->"+"

Idea通過tomcat執行web專案報Exception in thread "http-apr-8082-exec-2"

執行專案,一直報Exception in thread "http-apr-8082-exec-2" Exception in thread "commons-pool-EvictionTimer" 發現是tomcat記憶體溢位問題在網上找了相關解決資料,在tomcat

Idea 2018 使用tomcat部署web專案

1.在IDEA的settings( Ctrl + Alt + S )選項中配置Tomcat 2.建立Artifact 點選綠色+圖示選擇第二項Web Application:exploded 3.在選單欄Run---->Edit Configurations

Idea通過tomcat執行web專案報Exception in thread "http-apr-8082-exec-2"

執行專案,一直報Exception in thread "http-apr-8082-exec-2" Exception in thread "commons-pool-EvictionTimer" 發現是tomcat記憶體溢位問題在網上找了相關解決資料,在tomcat新增以下內容即可解決

IntelliJ IDEA通過Tomcat啟動專案過程分析

Tomcat部署專案的多種方式 Tomcat安裝目錄${TOMCAT_HOME} 常規的webapps下 直接部署到${TOMCAT_HOME}/webapps下 外部部署 修改${TOMCAT_HOME}/conf/server

轉載IntelliJ IDEA 2017.3建立Web專案,解決無自動生成web.xml問題

轉載於https://blog.csdn.net/u010758410/article/details/78780144/ 問題描述:建立Web專案後沒有create web.xml 解決辦法: 開啟Project Structure,在facets中選中次級的web或者在M

WebStorm + BootStrap 安裝 用 Tomcat 部署Web專案(圖文詳解 + 例項 )

                                 WebStorm安裝和破解 1.官網下載 2.安裝

Eclipse 安裝+ 用 Tomcat 部署Web專案(圖文詳解 + 例項 )

                                          Ecl

[Intellij] 在IntelliJ IDEA 中建立執行web專案

安裝工具 1、JDK7+ 2、IntelliJ Idea 工具(下載安裝後,網上找註冊碼破解即可) 3、tomcat7+ 解壓縮版   明確兩個概念: 1、Project:類似於eclipse的workspace概念 2、Module:類似於eclipse的工程專案概念 當然,實

IntelliJ IDEA建立springboot_mybatis3_ junit4 web專案

本文主要使用圖解介紹使用IntelliJ IDEA17.3.2建立Java Web專案的過程。 開發工具:IntelliJ IDEA17.3.2                     JD

Nginx 反向代理配合Tomcat部署web專案

ps: nginx是一個高效能的 Web 和反向代理伺服器, 它具有有很多非常優越的特性 作為 Web 伺服器:相比 Apache,Nginx 使用更少的資源,支援更多的併發連線,體現更高的效率,這點使 Nginx 尤其受到虛擬主機提供商的歡迎。能夠支援高達

Jetty與tomcat部署web專案的區域

這兩種本質的區別就是一個用jetty來部署,一個用tomcat來部署,具體區別請參照百度百科:http://baike.baidu.com/link?url=uDkHhJQPCV92WQy9b5j-zv1Mvpq06TDYgyx1ztH9oNb8Lx0VjiHjstaX5wF7CWk6FJ6zyJqXVb1v

Ti:關於Idea模組化部署web專案(非maven)

        問題由來:接到某個所謂“將web工程中部分程式碼抽出打包,但待打包部分程式碼還需要在現場部署時能做微調”的需求。         解決方法:將待打包部分程式碼作為一個module,讓工程依賴該模組,滿足抽離打包與現場可除錯的需求。         步驟方法:

MyEclipse下用tomcat部署web專案時,tomcat專案資料夾webapps下的專案釋出的不完整

昨天因為弄過濾器,不知道怎麼修改了web專案的一些配置,結果myeclipse部署專案時老師出現專案資料夾不完整正常的部署後文件夾和檔案大概如此: 但是我部署後的專案開啟webapps下的專案資料夾後是這樣的:只有 Web-INF、WebRoot兩個資料夾。webRoot

IntelliJ IDEA上建立Maven Web專案的時候,EL表示式無法解析異常

部署一個專案時,報了這樣的異常:  org.apache.jasper.JasperException: Unable to convert string "${topic.postTime}" to class "java.util.Date" for attribute

tomcat部署web專案(eclipse自動部署專案tomcat,訪問URL中不包含部署名)

最近專案中需要把專案部署到tomcat中,並且訪問路徑中不包含不署名,且想實現Eclipse中的自動部署,扒了好久資料,最終實現了自己的需求,呵呵,如下:1. 把專案context root設定為/:右鍵專案做如下修改[img]http://dl2.iteye.com/upl

使用Intellij IDEA 和maven建立web專案webapp全過程

安裝Maven 下載安裝 解壓到安裝目錄。 配置 右鍵桌面的計算機圖示,屬性–>高階系統設定–>環境變數,新增M2_HOME的環境變數,然後將該變數加入的PATH中。 注意 必須要有JAVA_HOME和個環境變數,不然maven會提示錯誤。