Eclipse Java EE+Tomcat問題和Apache整合Tomcat

來源:互聯網
上載者:User
Eclipse Java EE IDE 中使用Tomcat 5X / 6X 的一些問題(配置,發布相關)

一直都是使用MyEclipse,因為涉及都著作權,都是在“學習和交流”的名義之下使用MyEclipse。但是實際的商業開發中,團隊要考慮項目的成本以及項目的需要(效率或者功能需要),所以Eclipse對於一些中小型項目應該是夠用了,比起MyEclipse整合化的IDE,方便自然不用說,但是效能可能是一個值得考慮的因素,所以Eclipse用來開發也可以作為一種不錯的選擇。

用習慣了MyEclipse的開發人員換為用Eclipse開發web項目,突然有些不習慣了,JavaWeb項目變成了Dynamic/ Static Web Project, 安裝了sysdeo的TomcatPlugin之後還有有Tomcat Project。 讓人一下子不習慣了。其實從這很可以理解MyEclipse收費的原因了:要方便,請花錢。

這裡不再熬述。

最近使用Eclipse J2EE IDE +Tomcat 5.5開發部署了幾個小項目,有些心得給大家分享,其中很多都是在網上查的文的,也解決了不少問題,感謝網友的協助。

1、 Web Project的部署

前提:(1)安裝配置好tomcat, 環境變數,TOMCAT_HOME

         (2)配置好EClipse IDE的 Installed JREs

          (3) 確保tomcat可以正常跑起來(%TOMCAT_HOME%/bin/startup.bat)

建立一個簡單Web Project(例如 Dynamic Web Project),簡單編寫,加一個JSP之類的,編寫好了之後, 怎麼發布。 習慣性的開啟了Eclipse的 Sever視圖,可是裡面什麼都沒有,右鍵點擊NEW-->Server, 按照一般正常步驟建立。建立之後就會在Project視圖裡面看到Server的項目,而且有自己的設定檔。(這裡有有一個問題,待會說)

               

然後正常做法,把項目在Tomcat裡面跑起來。Console裡面顯示正常啟動之後,開啟瀏覽器,輸入tomcat首頁地址測試tomcat正常跑起來沒有,例如 Http://localhost:8080/  ,結果卻是404,很讓人詫異,再檢查tomcat console, 沒有問題啊。 嘗試檢查%TOMCAT_HOME%的webapp目錄,webapp的ROOT目錄是有資源的,但是發現沒剛剛發布的項目,work目錄也沒有。。這是怎麼回事。 嘗試訪問Test項目的資源例如Http://localhost:8080/Test/index.jsp, 卻可以正常訪問。。這是為什麼。

原來是如果使用了Eclipse建立的Server和tomcat來發布Web項目, 預設的發布路徑不是原tomcat安裝路徑,而是eclipse自己設定的路勁,而且使用的是Server自己的設定檔,即上面的右邊的圖例的設定檔,所以相關配置是在這裡設定的,在tomcat的設定將無法生效。

Server發布路徑是:workplace\.metadata\.plugins\org.eclipse.wst.server.core\tmpx

這裡workplace 就是Eclipse的Workplace,   tmpx中x從0開始命名,即配置多個服務時的命名

PS。解釋一下剛才的輸入Http://localhost:8080/ 報404而訪問項目資源卻可以:大家都知道Http://localhost:8080/  這個地址最後的“ / ” 代表的是tomcat的webapp裡面的ROOT資源,相關的管理介面在manager裡面,這是tomcat預設的。但是eclipse的Server發布tomcat web項目時,相當於使用了tomcat的一個副本,這個tomcat在使用時按照自己的配置來處理,所有的資訊自己複製了一遍到workplace, 但是我們發現在 這個副本tomcat(即上圖後邊的相關設定檔)的設定檔web.xml 以及 ROOT目錄(workplace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\ROOT)會發現,web.xml配置了<welcome-file-list>,但是在ROOT目錄裡面卻沒有任何資源,所以包404是正常的。如果你需要它顯示tomcat首頁,到%TOMCAT_HOME%的webapp裡面把docs,manager,ROOT目錄都拷貝過來就OK了。

當然,要修改這個發布目錄也是可以的。在Server視圖裡面雙擊已經配置好的Tomcat 或者右鍵-->Open ,在Overview選項卡裡面就會看到項目的配置,例如port , path , name等等,, 在Server Location裡面 就是這個Tomcat容器的的發布路徑,根據需要修改,預設的就是剛才說的那個workplace的地址。這裡會有一個問題,當tomcat已經載入了項目的時候就不能修改了,必須把 tomcat clean一下,才可以修改。

本文為原創,自己的心得,歡迎討論學習。

如需轉載,請標明源地址。謝謝。 cnblogs.com/lzsu1989

  Tomcat啟動--警告: [SetPropertiesRule]

2010-8-20 21:41:03 org.apache.catalina.core.AprLifecycleListener init
嚴重: An incompatible version 1.1.9 of the APR based Apache Tomcat Native library is installed, while Tomcat requires version 1.1.17
2010-8-20 21:41:05 org.apache.tomcat.util.digester.SetPropertiesRule begin
警告: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:WebDemo1' did not find a matching property.
2010-8-20 21:41:06 org.apache.coyote.http11.Http11Protocol init
資訊: Initializing Coyote HTTP/1.1 on http-8080
2010-8-20 21:41:06 org.apache.catalina.startup.Catalina load
資訊: Initialization processed in 5730 ms
2010-8-20 21:41:07 org.apache.catalina.core.StandardService start
資訊: Starting service Catalina
2010-8-20 21:41:07 org.apache.catalina.core.StandardEngine start
資訊: Starting Servlet Engine: Apache Tomcat/6.0.26
2010-8-20 21:41:10 org.apache.coyote.http11.Http11Protocol start
資訊: Starting Coyote HTTP/1.1 on http-8080
2010-8-20 21:41:11 org.apache.jk.common.ChannelSocket init
資訊: JK: ajp13 listening on /0.0.0.0:8009
2010-8-20 21:41:12 org.apache.jk.server.JkMain start
資訊: Jk running ID=0 time=0/968  config=null
2010-8-20 21:41:12 org.apache.catalina.startup.Catalina start
資訊: Server startup in 5414 ms
2010-8-20 21:43:31 org.apache.catalina.core.StandardContext reload
資訊: Reloading this Context has started

 

解決辦法:

雙擊Tomcat v6.0 Server at localhost 會開啟Tomcat v6.0 Server at localhost-config對話方塊

1.在Server Option選項下勾選上Public moudle context to spareate XML files

2.重啟TOMCAT後這個警告: [SetPropertiesRule]就沒有了

   Apache整合Tomcat

 一、先從J2EE工程的通用架構說起

這是一個通用的Web即B/S工程的架構,它由:

ü   Web Server

ü   App Server

ü   DB Server

三大部分組成,其中:

²  Web Server

置於企業防火牆外,這個防火牆,大家可以認為是一個CISCO路由器,然後在CISCO路由器上開放了兩個連接埠為:80和443。

80連接埠:用於正常的http訪問

443連接埠:用於https訪問,即如果你在ie裡打入https://xxx.xxx.xx這樣的地址,預設

走的是443這個連接埠。

         WebServer專門:

用於解析HTML、JS(JavaScript)、CSS、JPG/GIF等圖片格式檔案、TXT、

VBSCRIPT、PHP等一切一切“靜態”網頁內容。

²  App Server

置於企業防火牆內,它和Web Server之間的串連必須且一定為內部IP串連。

外部IP:即Internet IP地址,我們的web伺服器一般會有一個內部IP一個外部IP,因此在這裡,我們的App Server沒有任何外部IP,只有內部IP,所以我在這邊說App Server與Web Server只能以內部IP形式串連。

打比方說我們用的是tomcat,它的連接埠為8080,那麼這個ip地址上的8080連接埠只能由任何內部ip才能訪問,外部的internet是訪問不了的,這樣做就是為了安全。

App Server用於解析我們的任何需要Java編譯器才能解析的“動態”網頁,其實App Server本身也能解析任何靜態網頁的。

那麼我們這樣來想一下:

我們讓負責專門解析靜態網頁的Web Server來解析html等內容,而讓App Server專門用於解析任何需要Java編譯器才能解析的東西,讓它們“兩人”各司其職。這樣作的好處:

1)    為App Server“減壓”,同時也提高了performance

2)    不用再把8080這個連接埠暴露在internet上了,也很安全,必經我們的app server上可是有我們的代碼的,就算是編譯過的代碼也容易被“反編譯”,這是很不安全的。

3)    為將來的進一步的“叢集擴充”打好了基礎

²  DB Server

打比方說我們用的是Oracle,它需要通過1521與App Server進行串連是不是。那麼這個1521我們稱為資料庫連接連接埠,如果把它暴露在Internet上,是不是在危險了點。就算我們的密碼很複雜,但對於高明的駭客來說,要攻破你的口令也只是時間上的問題而己。

因此我們把我們的DB Server也和App Server一樣,置於內網的防火牆。任何的DB串連與管理只能通過內網即在公司企業內部來訪問,就是這個道理。

二、動手來架構

 

2.1 Oracle 資料加的安裝與配置

DB(Oracle)我已經為大家準備好了,串連資訊為:

IP:

10.225.10x.xx

Port:

1521

Username/Password:

xxx/xxx

Sid:

Jcoedb1

url:

jdbc:oracle:thin:@10.225.10x.xx:1521:xxx

所以,根據上述的架構,我們可以把如下這樣的一份清單丟給NSS或者是相關的網路管理部門,讓他們給我們開通相應的連接埠:

Web Server

對外IP: xxx.xxx.xxx.xxx
對內IP:10.225.xxx.xxx

向internet開通80與443連接埠

App Server

對內IP: 10.225.xxx.xxx

只對10.225.段的ip開放8080,8009等連接埠,

Db Server

對內IP: 10.225.xxx.xxx

只對10.225.段的ip開放1521連接埠

2.2 App Server的安裝

直接解壓tomcat至你的本地如:d:\tomcat,我這邊用的目錄名叫tomcat2,大家隨意,最好名字能夠越簡單越好d:\tomcat或者c:\tomcat就行,不要放得太“深”。

2.3 Web Server的安裝

我們在這邊將安裝Apache For Win 2.2.x,它將佔用你機器的80和443連接埠。因此如果你機器上有任何程式佔用你的80和443連接埠,必須將它關閉掉,比如說:

我們裝有微軟的IIS,這本身也是一個WebServer,那麼請你將它關閉:

ControlPanel->Administrative Tools->Service,找到IISAdmin和,將它全部關閉並將啟動方式設為:manual以便於不用每次重啟後再要去手動關閉一下。

然後用netstat –ano找到任何還在佔用80連接埠的程式,將它關閉掉。

2.4開始安裝Apache Http Server

我們將安裝這個版本的apache http server作為我們今後一直使用的Web Server


這邊的server name你們要填入自己的server的真實名,不能用我這個,這個servername如:shnlap93.cts.com只能夠我用,這個名稱是全域唯一的,和你的IP一樣。


選全部安裝


裝完後你會多出一個這樣的表徵圖來,點擊該表徵圖,裡面有用於控制apache http server的啟動、停止與重啟等操作選項。同時在你們的“服務”面板中,也能發現這樣的一個服務項,它啟動時預設是隨著系統的啟動而啟動的,我們把它改成“手動”吧,因為將來我們還要安裝IBM Http Server來作練習。

裝完後,在Apache2.2啟動的前提下,開啟一個ie輸入http://localhost,你將會得到這樣的一個頁面,就說明你的Apache的安裝是成功的。


2.5 Apache的配置

學Java的人,必須會這個Apache的配置,要不然你怎麼類比環境、搭建環境和架構環境。光會Coding是遠遠不夠的,你將永遠只配作個碼農。。。嘿嘿嘿。有很多人發覺到了後面JAVA學不上去了,關鍵因素在於:配置。

你會配環境了,那麼你就能類比任何客戶方、開發方的環境。

你會配環境了,你的代碼將來上線時才能成功運行。

你會配環境了,所以整個工程的技術核心就是你。

跟著我的教程,你們將會安裝和運行達近百個各種軟體與配置,搞得你一股臭味一股臭味。。

你準備好了沒有。

當然,不用怕,因為我的配置都是實際啟動並執行環境,所以網上的一些東西你可以不用去看,因為很多人都是在網上進行拷貝、複製,有時也不經過驗證,會讓你走很多的彎路到頭來還是落得個BUG一天世界,就看我的教程吧。

Apache的配置主要集中在httpd.conf檔案,它位於你的安裝目錄,比如:

D:\tools\httpd\conf\

我們用ultraedit或者相關文本編輯工具開啟它,來看它的內容:

先來尋找到如下這一行:

#ServerName

我們可以得到如下這一行內容:

#ServerName shnlap93.cts.com:80

這就是我們的主機名稱了,我們可以將前面的“#”去掉,並將其改為:

ServerName 10.225.106.35:80

改完後存檔,在重啟你的Apache2.2前我們先測試一下我們的Apache的設定檔是否改得對:


如果在你點了Test Configuration後,黑屏一閃而過,說明你的改動無誤,否則這個黑屏會一直停留在目前狀態,並且告訴你,你的配置改動有錯,錯在哪裡。

重新啟動你的Apache


找到如下這行:

DocumentRoot

你會發下有這樣的一行內容:

DocumentRoot "D:/tools/httpd/htdocs"

這個叫作DocumentRoot即webroot,即:發布目錄,發布在這個目錄下的任何工程都會在Apache服務開啟時被裝載成標準的web工程,我們現在動手來把這個WebRoot定位到我們自己的發布目錄中去吧。

DocumentRoot "d:/www"

我們把它改到了d盤的www目錄中去了,然後我們在該目錄中放入一個index.html檔案,內容為:

<html><body><h1>Hey man, apache works!</h1></body></html>

重啟我們的Apache服務,來測試一下:


嘿嘿,我們得到了什麼。禁止訪問,為什麼。

找到下面這一段:

<Directory />

    Options FollowSymLinks

    AllowOverride None

    Order deny,allow

    deny from all

</Directory>

看到了沒。

現在,把這個”deny from all”改成”allow fromall’吧。

<Directory />

    Options FollowSymLinks

    AllowOverride None

    Order deny,allow

    allow from all

</Directory>

修改完後重啟你的Apache服務


Ok,我們的Apache的發布目錄已經成功更改到了d:\www目錄下了,我們再來做一個實驗:

我們在IE瀏覽器中輸入: http://localhost/css/,我們看到了什麼。


這還了得,使用者如果是個初級駭客都可以知道我們的伺服器上有哪些檔案,哪些目錄甚至可以直接看到我們的檔案內容,怎麼辦。

找到下面這行

Options FollowSymLinks indexes

把它注掉改成下面這樣

#Options FollowSymLinks indexes

Options None

不要急,再往下找,還有

Options Indexes FollowSymLinks

又來一個,再改掉

#Options Indexes FollowSymLinks

Options None

改完這兩條後重啟你的Apache服務

再次開啟一個新的IE,輸入:http://localhost/css/,我們看到了如下的介面:


好了,Apache的基本配置完成了即:

1)  基本的安全配置,不允許目錄訪問

2)  把WebRoot改到另一個物理目錄上而不使用Apache內建的WebRoot目錄

2.6整合Apache與Tomcat

Apache(Web Server)負責處理HTML靜態內容;

Tomcat(App Server)負責處理動態內容;

其實就是上述這樣的一個架構,下面是原理

1)      Apache裝有一個模組,這個模組叫mod_jk

2)      Apache通過80連接埠負責解析任何靜態web內容

3)      任何不能解析的內容,用運算式告訴mod_jk,讓mod_jk派發給相關的app server去解釋。

通過上述的文字描述我們可以得知:

1)  我們需要在Apache中先裝一個mod_jk

2)  我們需要在httpd.conf中寫點運算式

下面來實現。

1)      把mod_jk-1.2.31-httpd-2.2.3.so手工copy進我們的Apache安裝目錄的modules目錄下,這個檔案的全名叫: mod_jk-1.2.31-httpd-2.2.3.so,大家可以從ftp上的“/JavaArchitect/mod_jk/”目錄中擷取,因為這個檔案是我用C++在本地重新編譯過的,網上下載的是src即源碼,省去大家再去編譯的時間了,而且一些其它網上下載的mod_jk.so是無法使用的。

2)      用ultraedit開啟httpd.conf檔案,跑到檔案最後面加入以下幾行:

LoadModule jk_module modules/mod_jk-1.2.31-httpd-2.2.3.so

JKWorkersFile conf/workers.properties

JkLogFile logs/mod_jk.log

<VirtualHost *>

ServerAdmin localhost

DocumentRoot d:/www/

ServerName localhost

DirectoryIndex index.html index.htm index.jsp index.action

ErrorLog logs/shsc-error_log.txt

CustomLog logs/shsc-access_log.txt common

 

JkMount /*WEB-INF ajp13

JkMount /*j_spring_security_check ajp13

JkMount /*.action ajp13

JkMount /servlet/* ajp13

JkMount /*.jsp ajp13

JkMount /*.do ajp13

JkMount /*.action ajp13

 

JkMount /*fckeditor/editor/filemanager/connectors/*.* ajp13

JkMount /fckeditor/editor/filemanager/connectors/* ajp13

</VirtualHost>

關鍵的是這兩句:

LoadModule jk_module modules/mod_jk-1.2.31-httpd-2.2.3.so

JKWorkersFile conf/workers.properties

代表:

ü   Apache載入一個額外的外掛程式,用於串連tomcat。

ü   串連時的配置參數描述位於Apache安裝目錄的/conf目錄下的一個叫workers.properties檔案中,mod_jk一般使用ajp13協議串連,使用的是tomcat的8009連接埠。

3)      Worker.properties檔案內容如下:

workers.tomcat_home=d:/tomcat2

workers.java_home=C:/jdk1.6.32

ps=/

worker.list=ajp13

worker.ajp13.port=8009

worker.ajp13.host=localhost

worker.ajp13.type=ajp13

4)      告訴我們的Apache,哪些是要交給tomcat來解析,除此之外都由Apache本身來解析

<VirtualHost *>

ServerAdmin localhost

DocumentRoot d:/www/

ServerName localhost

DirectoryIndex index.html index.htm index.jsp index.action

ErrorLog logs/shsc-error_log.txt

CustomLog logs/shsc-access_log.txt common

 

JkMount /*WEB-INF ajp13

JkMount /*j_spring_security_check ajp13

JkMount /*.action ajp13

JkMount /servlet/* ajp13

JkMount /*.jsp ajp13

JkMount /*.do ajp13

JkMount /*.action ajp13

 

JkMount /*fckeditor/editor/filemanager/connectors/*.* ajp13

JkMount /fckeditor/editor/filemanager/connectors/* ajp13

</VirtualHost>

大家看到沒,所有的/servlet/*都由tomcat負責解析,所有的jsp, .do, .action都由tomcat解析。

此處還有一個特殊的/fckeditor,這個是我們使用的一個部落格編輯器,這個因為是servlet的,因此也需要交給tomcat鐵析。

5)      將/cbbs工程布署到tomcat的webapps目錄下

6)      將/cbbs同樣手工copy一份到d:/www目錄下

7)      刪除d:/www/cbbs/WEB-INF這個目錄,嘿嘿,因為d:/www下的東西是由Apache解析的,所有的WEB-INF下的都是Java,我們只需要布署在tomcat下即可,是不是。

8)      重啟tomcat,重啟Apache,在ie中直接輸入: http://localhost/cbbs,使用sally/abcdefg登入,操作一下,一切成功

Oh…yeah, tomcat+apache一步搞定。

三、用於實驗的cbbs工程配置

最後附上cbbs布署需要用到的配置,相關的工程可通過ftp的” /Java Architect/Project/”下的cbbs.zip來擷取。

ü   在tomcat中開啟server.xml加入:

<Resource

driverClassName="oracle.jdbc.OracleDriver"

factory="org.apache.commons.dbcp.BasicDataSourceFactory"

maxActive="25" maxIdle="100" maxWait="5000" name="jdbc/eltds"

password="xxx"

type="javax.sql.DataSource"

url="jdbc:oracle:thin:@10.225.101.51:1521:jcoedb1"

         username="xxx"/>

<Context crossContext="true" docBase="D:/upload" path="/uploadpic" reloadable="true"/>

<Context docBase="cbbs" path="/cbbs" reloadable="true"/>

ü   手工在d盤根目錄建立一個upload目錄,在此目錄內再建立一個image目錄。

ü   在tomcat中開啟context.xml加入

<ResourceLink   name="jdbc/cbbsds"   type="javax.sql.DataSource"   global="jdbc/cbbsds"/>

 
apache與tomcat整合方式

Apache HTTP Server 與 Tomcat 的三種串連方式介紹

    整合 Apache Http Server 和 Tomcat 可以提升對靜態檔案的處理效能、利用 Web 服務器來做負載平衡以及容錯、無縫的升級應用程式。本文介紹了三種整合 Apache 和 Tomcat 的方式。

    首先我們先介紹一下為什麼要讓 Apache 與 Tomcat 之間進行串連。事實上 Tomcat 本身已經提供了 HTTP 服務,該服務預設的連接埠是 8080,裝好 tomcat 後通過 8080 連接埠可以直接使用 Tomcat 所啟動並執行應用程式,你也可以將該連接埠改為 80。

    既然 Tomcat 本身已經可以提供這樣的服務,我們為什麼還要引入 Apache 或者其他的一些專門的 HTTP 伺服器呢。原因有下面幾個:

    1. 提升對靜態檔案的處理效能

    2. 利用 Web 服務器來做負載平衡以及容錯

    3. 無縫的升級應用程式

    這三點對一個 web 網站來說是非常之重要的,我們希望我們的網站不僅是速度快,而且要穩定,不能因為某個 Tomcat 宕機或者是升級程式導致使用者訪問不了,而能完成這幾個功能的、最好的 HTTP 伺服器也就只有 apache 的 http server 了,它跟 tomcat 的結合是最緊密和可靠的。

    接下來我們介紹三種方法將 apache 和 tomcat 整合在一起。

    JK

    這是最常見的方式,你可以在網上找到很多關於配置JK的網頁,當然最全的還是其官方所提供的文檔。JK 本身有兩個版本分別是 1 和 2,目前 1 最新的版本是 1.2.19,而版本 2 早已經廢棄了,以後不再有新版本的推出了,所以建議你採用版本 1。

    JK 是通過 AJP 協議與 Tomcat 伺服器進行通訊的,Tomcat 預設的 AJP Connector 的連接埠是 8009。JK 本身提供了一個監控以及管理的頁面 jkstatus,通過 jkstatus 可以監控 JK 目前的工作狀態以及對到 tomcat 的串連進行設定,如下圖所示:

    圖 1:監控以及管理的頁面 jkstatus

    

    

    在這個圖中我們可以看到當前JK配了兩個串連分別到 8109 和 8209

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.