將Web專案War包部署到Tomcat伺服器基本步驟(完整版)
1. 常識:
1.1 War包
War包一般是在進行Web開發時,通常是一個網站Project下的所有原始碼的集合,裡面包含前臺HTML/CSS/JS的程式碼,也包含Java的程式碼。
當開發人員在自己的開發機器上除錯所有程式碼並通過後,為了交給測試人員測試和未來進行產品釋出,都需要將開發人員的原始碼打包成War進行釋出。
War包可以放在Tomcat下的webapps或者word目錄下,隨著tomcat伺服器的啟動,它可以自動被解壓。
1.2 Tomcat伺服器
Tomcat伺服器是一個免費的開放原始碼的Web應用伺服器,屬於輕量級應用伺服器,在中小型系統和併發訪問使用者不是很多的場合下被普遍使用,是開發和除錯JSP程式的首選,最新的Servlet和JSP規範總是能在Tomcat中得到體現。
2. 配置Java執行環境
2.1 下載並安裝JDK
從官網上下載最新的JDK:http://java.sun.com/javase/downloads/index.jsp ,下載後安裝,選擇想把JDK安裝到的目錄。JRE是包含在JDK中的,所以不需要再另外安裝JRE了。
2.2 設定JDK環境變數
右擊“計算機”,點選“屬性”,點選彈出視窗中左側的“高階系統設定”,在彈出的選項卡中選擇“高階->環境變數”。
假設你本地JAVA的JDK安裝的位置為:C:\Program Files\Java\jdk1.7.0_45。
在這裡,新建2個環境變數,編輯1個已有的環境變數。如下:
新建變數名:JAVA_HOME;
變數值:你安裝JDK的安裝目錄,在這裡為C:\Program Files\Java\jdk1.7.0_45。
新建變數名:CLASSPATH
變數值:
.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%TOMCAT_HOME%\BIN
(注意最前面有個.號)
編輯環境變數的路徑:
變數名:Path;
變數值:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
(將此處的字串貼上到變數值的最前面)
2.3 驗證是否JDK環境變數設定成功
點選開始並輸入CMD,在命令列分別輸入:java; javac; java –version.
如果分別顯示如下資訊,說明你的Java環境變數已經配置成功。
輸入Java,顯示:
輸入Javac,顯示:
輸入java –version,顯示:
3. 部署Tomcat伺服器
3.1 下載Tomcat到本地硬碟
從官網上下載Tomcat伺服器。官網上下載的檔案都是綠色免安裝的。
下載地址為:http://tomcat.apache.org/download-70.cgi。
下載後解壓縮,如E:\apache-tomcat-7.0.26。
3.2 設定Tomcat環境變數
依然是點開電腦的環境變數對話方塊。
新建一個環境變數:
變數名:TOMCAT_HOME
變數值:你的TOMCAT解壓後的目錄,如E:\apache-tomcat-7.0.26。
3.3 驗證Tomcat環境變數的配置是否成功
執行Tomcat解壓目錄下的 bin/startup.bat,啟動Tomcat伺服器。在任何一款瀏覽器的位址列中輸入http://localhost:8080 ,如果介面顯示如下圖,則說明Tomcat的環境變數配置成功。
tomcat啟動的視窗為:
4. 部署Web專案的War包到Tomcat伺服器
4.1 FTP獲取war包和sql指令碼
從本地FTP伺服器上下載Daily Building出的最新的專案包。解壓後一般由兩個檔案組成,database資料夾和projectName.war包。
執行database檔案中的xxxxx.sql指令碼檔案,便可以生成最新的資料庫和表結構。
4.2 配置Web專案的虛擬目錄
將projectName.war包,複製到Tomcat的webapp下。這樣當配置好後的訪問路徑便為:http://localhost:8080/projectName/login.jsp。
在訪問之前,需要修改tomcat伺服器的配置檔案,開啟:
tomcat解壓目錄\conf\context.xml。將執行該web專案時,需要配置的資料庫連線字串增加到該xml檔案中。增加後的context.xml為:
<Context>
<!-- Default set of monitored resources -->
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<!-- Uncomment this to disable session persistence across Tomcat restarts -->
<!--
<Manager pathname="" />
-->
<!-- Uncomment this to enable Comet connection tacking (provides events
on session expiration as well as webapp lifecycle) -->
<!--
<Valve className="org.apache.catalina.valves.CometConnectionManagerValve" />
-->
(這裡填寫本Web專案執行時,需要連線的資料庫配置。)
</Context>
4.3 訪問web專案的登入頁
連線串設定完畢後,便可以基於Tomcat伺服器來訪問web專案了。
首先執行Tomcat的bin目錄下的startup.bat,當Tomcat啟動完畢後,
在瀏覽器輸入:localhost:8080/projectName/login.jsp時,如果出現該Web專案的login介面時,則表明war包已成功地部署到tomcat伺服器上,並可成功訪問了。
(下面是Tomcat的具體配置方法)
Tomcat資料庫連線池的配置方法總結
資料庫連線是一種關鍵的有限的昂貴的資源,這在多使用者網頁應用程式中體現的尤為突出.對資料庫連線的管理能顯著影響到整個應用程式的伸縮性和健壯性,影響到程式的效能指標,資料庫連線池正是針對這個問題提出的.
資料庫連線池負責分配,管理和釋放資料庫連線,它允許應用程式重複使用一個現有的資料庫連線,而不是再重新建立一個;釋放空閒時間超過最大空閒時間的資料庫連線來避免因為沒有釋放資料庫連線而引起的資料庫連線遺漏,這樣可以明顯提高對資料庫操作的效能.
資料庫連線池在初始化的時將建立一定數量的資料庫連線放到連線池中,這些資料庫連線的數量是由最小資料庫連線數來設定的,無論這些資料庫連線是否被使用,連線池都將一直保證至少擁有這麼多的連線數,當應用程式向連線池請求的連線數超過最大連線數量時,這些請求將被加入到等待佇列中.
資料庫連線池的最小連線數和最大連線數的設定要考慮到下列幾個因素:
1.最小連線數是連線池一直保持的資料庫連線,所以如果應用程式對資料庫連線的使用量不大,將會有大量的資料庫連線資源被浪費.
2.最大連線數是連線池申請的最大連線數,如果資料庫連線請求超過次數,後面的資料庫連線請求將被加入到等待對列中,這會影響之後的資料庫操作
如果最小連線數與最大連線數相差太大,那麼最先的連線請求將會獲利,之後超過最小連線數量的連線請求等價於建立一個新的資料庫連線,不過,這些小於最小連線數的資料庫連線在使用完不會馬上被釋放,它將被放到連線池中等待重複使用或是空閒超時被釋放.
例項使用的Tomcat版本為6.0
方法一: 在Tomcat的conf/context.xml中配置
在Tomcat\apache-tomcat-6.0.33\conf目錄下的context.xml檔案中配置預設值如下:
<?xml version='1.0' encoding='utf-8'?> <Context> <WatchedResource>WEB-INF/web.xml</WatchedResource> </Context>
配置連線池:
<?xml version='1.0' encoding='utf-8'?>
<Context> <WatchedResource>WEB-INF/web.xml</WatchedResource> <!--配置oracle資料庫的連線池--> <Resource name="jdbc/oracleds" author="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="scott" password="tiger" driverClassName="oracle.jdbc.dirver.OracleDriver" url="jdbc:oracle:thin:@127.0.0.1:1521:ora9" /> <!--配置mysql資料庫的連線池, 需要做的額外步驟是將mysql的Java驅動類放到tomcat的lib目錄下 maxIdle 連線池中最多可空閒maxIdle個連線 minIdle 連線池中最少空閒maxIdle個連線 initialSize 初始化連線數目 maxWait 連線池中連線用完時,新的請求等待時間,毫秒 username 資料庫使用者名稱 password 資料庫密碼 --> <Resource name="jdbc/mysqlds" auth="Container" type="javax.sql.DataSource" username="root" password="root" maxIdle="30" maxWait="10000" maxActive="100" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://127.0.0.1:3306/db_blog" /> </Context>
配置好後需要注意的兩個步驟
1.將對應資料庫的驅動類放到tomcat的lib目錄下
2.重新啟動tomcat伺服器,讓配置生效
在web應用程式的web.xml中設定資料來源參考,如下:
在<web-app></web-app>節點中加入下面內容
<resource-ref>
<description>mysql資料庫連線池</description> <!-- 參考資料來源名字,同Tomcat中配置的Resource節點中name屬性值"jdbc/mysqlds"一致 --> <res-ref-name>jdbc/mysqlds</res-ref-name> <!-- 資源型別 --> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> <res-sharing-scope>Shareable</res-sharing-scope> </resource-ref>
錯誤解決:
javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:645) at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288) at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:325) at javax.naming.InitialContext.lookup(InitialContext.java:392) at com.iblog.util.DBPoolUtil.<clinit>(DBPoolUtil.java:34)
解決方案:
上面的異常資訊是配置檔案中JNDI沒有初始化造成的
如果下面的問題都不存在
1.要去檢查下配置檔案中連線資料庫的URL引數是否正確2.以及是否匯入了正常的包3.檢查在Tomcat中conf/server.xml檔案,檢查是否設定useNaming="false",如果是,去掉
2.那就是通過main方法測試的,這個資料來源不支援這樣的測試方法,程式要執行在Tomcat中才能找到相應的資料來源.[我在測試時犯這樣的錯導致上面錯誤出現]
<%@ page language="java" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%>
<%@ page import="java.sql.*" %> <%@ page import="javax.naming.*" %> <%@ page import="javax.sql.DataSource" %> <html> <head> <title>Tomcat6.0 JNDI!</title> </head> <body> Tomcat連線池測試,獲取資料來源 <br> <% try { //初始化查詢名稱空間 Context ctx = new InitialContext(); //引數java:/comp/env為固定路徑 Context envContext = (Context)ctx.lookup("java:/comp/env"); //引數jdbc/mysqlds為資料來源和JNDI繫結的名字 DataSource ds = (DataSource)envContext.lookup("jdbc/mysqlds"); Connection conn = ds.getConnection(); conn.close(); out.println("<span style='color:red;'>JNDI測試成功<span>"); } catch (NamingException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } %> </body> </html>
執行效果:
方法二:在Tomcat的conf/server.xml中配置
開啟tomcat的conf/server.xml檔案,找到<GlobalNamingResources></GlobalNamingResources>節點,預設的內容如下
<GlobalNamingResources>
<Resource name="UserDatabase" auth="Container" type="org.apache.catalina.UserDatabase" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" pathname="conf/tomcat-users.xml" /> </GlobalNamingResources>
在該節點中加入相關的池配置資訊,如下
<GlobalNamingResources>
<Resource name="UserDatabase" auth="Container" type="org.apache.catalina.UserDatabase" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" pathname="conf/tomcat-users.xml" /> <!--配置mysql資料庫的連線池, 需要做的額外步驟是將mysql的Java驅動類放到tomcat的lib目錄下 --> <Resource name="jdbc/mysqlds" auth="Container" type="javax.sql.DataSource" username="root" password="root" maxIdle="30" maxWait="10000" maxActive="100" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://127.0.0.1:3306/db_blog" /> </GlobalNamingResources>
在tomcat的conf/context.xml檔案中的<Context></Context>節點中加入如下內容
<ResourceLink name="jdbc/mysqlds" global="jdbc/mysqlds" type="javax.sql.DataSource"/>
然後在web專案中的WEB-INF目錄下的web.xml中配置
<resource-ref>
<description>mysql資料庫連線池</description> <!-- 參考資料來源名字,同Tomcat中配置的Resource節點中name屬性值"jdbc/mysqlds"一致 --> <res-ref-name>jdbc/mysqlds</res-ref-name> <!-- 資源型別 --> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> <res-sharing-scope>Shareable</res-sharing-scope> </resource-ref>
同樣配置好後,需要重新啟動伺服器,讓配置生效.
方法三:在Tomcat的conf/server.xml中配置虛擬目錄時配置
在配置虛擬目錄時,也就是在配置conf下面的server.xml時,在context標籤內新增池配置.
在說該方法之前,先說一下,如何用tomcat配置虛擬目錄
在tomcat\conf下server.xml中找到
<Host name="localhost" appBase="webapPS" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> </Host>
在其中新增:
<Context path="/website" docBase="F:/myweb" reloadable="true"></Context>
注意:
docBase要改成你的專案目錄。
path為虛擬路徑,訪問時的路徑,注意:一定要加“/” debug建議設定為0
reloadable設定為true。
這樣重新啟動tomcat
例項中如下配置
<Context path="/website" docBase="D:/program files/Tomcat/apache-tomcat-6.0.33/webapps/iblog.war" reloadable="true"> </Context>
接下來新增池配置,如下
<!--配置虛擬目錄-->
<Context path="/website" docBase="D:/program files/Tomcat/apache-tomcat-6.0.33/webapps/iblog.war" reloadable="true"> <Resource name="jdbc/mysqlds" auth="Container" type="javax.sql.DataSource" username="root" password="root" maxIdle="30" maxWait="10000" maxActive="100" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://127.0.0.1:3306/db_blog" /> </Context>
啟動伺服器,測試,注意因為我們配置了path值為”/website”,所以訪問的路徑應該為website.如下圖:
方法四:在Web專案中的META-INF目錄下新建一個檔案context.xml,寫入配置
注意:是META-INF目錄下,不是WEB-INF目錄下
<?xml version='1.0' encoding='utf-8'?>
<Context> <Resource name="jdbc/mysqlds" auth="Container" type="javax.sql.DataSource" username="root" password="root" maxIdle="30" maxWait="10000" maxActive="100" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://127.0.0.1:3306/db_blog" logAbandoned="true" /> </Context>