War包通常是在進行Web開發時,一般是一個網站Project下的全部源碼的集合,裏面包含前臺HTML/CSS/JS的代碼,也包含Java的代碼。html
當開發人員在本身的開發機器上調試全部代碼並經過後,爲了交給測試人員測試和將來進行產品發佈,都須要將開發人員的源碼打包成War進行發佈。java
War包能夠放在Tomcat下的webapps或者word目錄下,隨着tomcat服務器的啓動,它能夠自動被解壓。mysql
Tomcat服務器是一個免費的開放源代碼的Web應用服務器,屬於輕量級應用服務器,在中小型系統和併發訪問用戶不是不少的場合下被廣泛使用,是開發和調試JSP程序的首選,最新的Servlet和JSP規範老是能在Tomcat中獲得體現。web
從官網上下載最新的JDK:http://java.sun.com/javase/downloads/index.jsp ,下載後安裝,選擇想把JDK安裝到的目錄。JRE是包含在JDK中的,因此不須要再另外安裝JRE了。sql
右擊「計算機」,點擊「屬性」,點擊彈出窗口中左側的「高級系統設置」,在彈出的選項卡中選擇「高級->環境變量」。數據庫
假設你本地JAVA的JDK安裝的位置爲:C:\Program Files\Java\jdk1.7.0_45。apache
在這裏,新建2個環境變量,編輯1個已有的環境變量。以下:瀏覽器
新建變量名:JAVA_HOME;tomcat
變量值:你安裝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;
(將此處的字符串粘貼到變量值的最前面)
點擊開始並輸入CMD,在命令行分別輸入:java; javac; java –version.
若是分別顯示以下信息,說明你的Java環境變量已經配置成功。
輸入Java,顯示:
輸入Javac,顯示:
輸入java –version,顯示:
從官網上下載Tomcat服務器。官網上下載的文件都是綠色免安裝的。
下載地址爲:http://tomcat.apache.org/download-70.cgi。
下載後解壓縮,如E:\apache-tomcat-7.0.26。
依然是點開電腦的環境變量對話框。
新建一個環境變量:
變量名:TOMCAT_HOME
變量值:你的TOMCAT解壓後的目錄,如E:\apache-tomcat-7.0.26。
運行Tomcat解壓目錄下的 bin/startup.bat,啓動Tomcat服務器。在任何一款瀏覽器的地址欄中輸入http://localhost:8080 ,若是界面顯示以下圖,則說明Tomcat的環境變量配置成功。
tomcat啓動的窗口爲:
從本地FTP服務器上下載Daily Building出的最新的項目包。解壓後通常由兩個文件組成,database文件夾和projectName.war包。
運行database文件中的xxxxx.sql腳本文件,即可以生成最新的數據庫和表結構。
將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>
鏈接串設置完畢後,即可以基於Tomcat服務器來訪問web項目了。
首先運行Tomcat的bin目錄下的startup.bat,當Tomcat啓動完畢後,
在瀏覽器輸入:localhost:8080/projectName/login.jsp時,若是出現該Web項目的login界面時,則代表war包已成功地部署到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>