Tomcat全攻略

tommcat配置

Tomcat全攻略
 

隨着java的流行,其在 web上的應用也愈來愈廣,tomcat做爲一個開源的servlet容器,應用前景愈來愈廣,本文將向你講述tomcat的一些 知識。  
一:簡介  
tomcat是jakarta項目中的一個重要的子項目,其被JavaWorld雜誌的編輯選爲2001年度最具創新的java產品(Most Innovative Java Product),同時它又是sun公司官方推薦的servlet和jsp容器(具體能夠見[url]http://java.sun.com/products/jsp/tomcat/[/url]),所以其愈來愈多的受到軟件公司和開發人員的喜好。servlet和jsp的最新規範均可以在tomcat的新版本中獲得實現。  

二:安裝及配置 
tomcat最新版本爲4.0.1,這個版本用了一個新的servlet容器Catalina,完整的實現了servlet2.3和jsp1.2規範。注意安裝以前你的 系統必須安裝了jdk1.2以上版本。  

(一):安裝  
1:windows平臺  
從tomcat網站下載jakarta-tomcat-4.0.1.exe,按照通常的windows程序安裝步驟便可安裝好tomcat,安裝時它會自動尋找你的jdk和jre的位置。  

2:linux平臺  
下載jakarta-tomcat-4.0.1.tar.gz,將其解壓到一個目錄。  

(二):配置  
運行tomcat須要設置JAVA_HOME變量  
set JAVA_HOME=c:/jdk (win98,在msdos方式下使用,或者放入autoexec.bat中)  
export JAVA_HOME=/usr/local/jdk (linux下使用,放到/etc/bashrc或者/etc/profile中)  

(三):運行  
設置完畢後就能夠運行tomcat服務器了,進入tomcat的bin目錄,win98下用startup啓動tomcat,linux下用startup.sh,相應的關閉tomcat的命令爲shutdown和shutdown.sh。  

啓動後能夠在瀏覽器中輸入[url]http://localhost:8080/[/url]測試,因爲tomcat自己具備web服務器的功能,所以咱們沒必要安裝apache,固然其也能夠與apache集成到一塊兒,下面會介紹。  

下面你能夠測試其自帶的jsp和servlet示例。  

三:應用  

(一):目錄結構  
tomcat的目錄結構以下: 目錄名 簡介  
bin 存放啓動和關閉tomcat腳本  
conf 包含不一樣的配置文件,server.xml(Tomcat的主要配置文件)和web.xml  
work 存放jsp編譯後產生的class文件  
webapp 存放應用程序示例,之後你要部署的應用程序也要放到此目錄  
logs 存放日誌文件  
lib/japser/common 這三個目錄主要存放tomcat所需的jar文件  


(二):server.xml配置簡介  
下面咱們將講述這個文件中的基本配置信息,更具體的配置信息見tomcat的文檔 元素名 屬性 解釋  
server port 指定一個端口,這個端口負責監聽關閉tomcat的請求  
shutdown 指定向端口發送的命令字符串  
service name 指定service的名字  
Connector  
(表示客戶端和service之間的鏈接) port 指定服務器端要建立的端口號,並在這個斷口監聽來自客戶端的請求  
minProcessors 服務器啓動時建立的處理請求的線程數  
maxProcessors 最大能夠建立的處理請求的線程數  
enableLookups 若是爲true,則能夠經過調用request.getRemoteHost()進行DNS查詢來獲得遠程客戶端的實際主機名,若爲false則不進行DNS查詢,而是返回其ip地址  
redirectPort 指定服務器正在處理http請求時收到了一個SSL傳輸請求後重定向的端口號  
acceptCount 指定當全部可使用的處理請求的線程數都被使用時,能夠放處處理隊列中的請求數,超過這個數的請求將不予處理  
connectionTimeout 指定超時的時間數(以毫秒爲單位)  
Engine  
(表示指定service中的請求處理機,接收和處理來自Connector的請求) defaultHost 指定缺省的處理請求的主機名,它至少與其中的一個host元素的name屬性值是同樣的  
Context  
(表示一個web應用程序,一般爲WAR文件,關於WAR的具體信息見servlet規範) docBase 應用程序的路徑或者是WAR文件存放的路徑  
path 表示此web應用程序的url的前綴,這樣請求的url爲[url]http://localhost:8080/path/[/url]****  
reloadable 這個屬性很是重要,若是爲true,則tomcat會自動檢測應用程序的/WEB-INF/lib 和/WEB-INF/classes目錄的變化,自動裝載新的應用程序,咱們能夠在不重起tomcat的狀況下改變應用程序  
host  
(表示一個虛擬主機)  
name 指定主機名  
appBase 應用程序基本目錄,即存放應用程序的目錄  
unpackWARs 若是爲true,則tomcat會自動將WAR文件解壓,不然不解壓,直接從WAR文件中運行應用程序  
Logger  
(表示日誌,調試和錯誤信息)  
className 指定logger使用的類名,此類必須實現org.apache.catalina.Logger 接口  
prefix 指定log文件的前綴  
suffix 指定log文件的後綴  
timestamp 若是爲true,則log文件名中要加入時間,以下例:localhost_log.2001-10-04.txt  
Realm  
(表示存放用戶名,密碼及role的數據庫)  
className 指定Realm使用的類名,此類必須實現org.apache.catalina.Realm接口  
Valve  
(功能與Logger差很少,其prefix和suffix屬性解釋和Logger 中的同樣)  
className 指定Valve使用的類名,如用org.apache.catalina.valves.AccessLogValve類能夠記錄應用程序的訪問信息  

directory 指定log文件存放的位置  
pattern 有兩個值,common方式記錄遠程主機名或ip地址,用戶名,日期,第一行請求的字符串,HTTP響應代碼,發送的字節數。combined方式比common方式記錄的值更多  


注意:1:通過我測試,我設置Context 的path="",reloadable=true,而後放一個WAR文件到webapps目錄,結果tomcat不能檢測出此文件(重起tomcat能夠),而把此文件解壓,則tomcat會自動檢測出這個新的應用程序。若是不能自動檢測WAR文件,咱們能夠利用下面 管理中講的方法來部署應用程序。  

2:默認的server.xml中,Realm元素只設置了一個className屬性,但此文件中也包含幾個經過JDBC鏈接到數據庫進行驗證的示例(被註釋掉了),經過Realm元素咱們能夠實現容器安全管理(Container Managed Security)。  

3:還有一些元素咱們沒有介紹,如Parameter,loader,你能夠經過tomcat的文檔獲取這些元素的信息。  

(三):管理  

1:配置  
在進行具體的管理以前,咱們先給tomcat添加一個用戶,使這個用戶有權限來進行管理。  

打開conf目錄下的tomcat-users.xml文件,在相應的位置添加下面一行:  
<user name="zf" password="zf" roles="standard,manager"/>  




注意:這一行的最後部分必定是/>,tomcat的文檔掉了/符號,若是沒有/符號的話,tomcat重起時將沒法訪問應用程序。經過logs/catalina.out文件你能夠看到這個錯誤的詳細信息。  

而後重起tomcat,在瀏覽器中輸入[url]http://localhost:8080/manager/[/url],會彈出對話框,輸入上面的用戶名和密碼便可。  

2:應用程序列表  
在瀏覽器中輸入[url]http://localhost:8080/manager/list[/url],瀏覽器將會顯示以下的信息:  
OK - Listed applications for virtual host localhost  
/ex:running:1  
/examples:running:1  
/webdav:running:0  
/tomcat-docs:running:0  
/manager:running:0  
/:running:0  



面的信息分別爲應用程序的路徑,當前狀態(running 或者stopped),與這個程序相連的session數。  

3:從新裝載應用程序  
在瀏覽器中輸入 [url]http://localhost:8080/manager/reload?path=/examples[/url],瀏覽器顯示以下: 
OK - Reloaded application at context path /examples  




表示example應用程序裝載成功,若是咱們將server.xml的Context元素的reloadable屬性設爲true(見上面表格),則不必利用這種方式從新裝載應用程序,由於tomcat會自動裝載。  

4:顯示session信息  
在瀏覽器中輸入[url]http://localhost:8080/manager/sessions?path=/examples[/url],瀏覽器顯示以下: OK - Session information for application at context path /examples Default maximum session inactive interval 30 minutes  

1111111111111
第一步:下載j2sdk和tomcat:到sun官方站點([url]http://java.sun.com/j2se/1.4.2/download.html[/url])下載j2sdk,注意下載版本爲Windows Offline Installation的SDK,同時最好下載J2SE 1.4.2 Documentation,而後到tomcat官方站點([url]http://www.apache.org/dist/jakarta/tomcat-4/[/url])下載tomcat(下載最新4.1.x版本的tomcat);  

第二步:安裝和配置你的j2sdk和tomcat:執行j2sdk和tomcat的安裝程序,而後按默認設置進行安裝便可。  
1.安裝j2sdk之後,須要配置一下環境變量,在個人電腦->屬性->高級->環境變量->系統變量中添加如下環境變量(假定你的j2sdk安裝在c:\j2sdk1.4.2):  
JAVA_HOME=c:\j2sdk1.4.2  
classpath=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;(.;必定不能少,由於它表明當前路徑)  
path=%JAVA_HOME%\bin  
接着能夠寫一個簡單的java程序來測試J2SDK是否已安裝成功:  
public class Test{  
public static void main(String args[]){  
System.out.println("This is a test program.");  
}  
}  
將上面的這段程序保存爲文件名爲Test.java的文件。  
而後打開命令提示符窗口,cd到你的Test.java所在目錄,而後鍵入下面的命令  
javac Test.java  
java Test  
此時若是看到打印出來This is a test program.的話說明安裝成功了,若是沒有打印出這句話,你須要仔細檢查一下你的配置狀況。  

2.安裝Tomcat後,在個人電腦->屬性->高級->環境變量->系統變量中添加如下環境變量(假定你的tomcat安裝在c:\tomcat):  
CATALINA_HOME=c:\tomcat;  
CATALINA_BASE=c:\tomcat;  
而後修改環境變量中的classpath,把tomat安裝目錄下的common\lib下的servlet.jar追加到classpath中去,修改後的classpath以下:  
classpath=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%CATALINA_HOME%\common\lib\servlet.jar;  
接着能夠啓動tomcat,在IE中訪問[url]http://localhost:8080[/url]  
若是看到tomcat的歡迎頁面的話說明安裝成功了。

第三步:創建本身的jsp app目錄  
1.到Tomcat的安裝目錄的webapps目錄,能夠看到ROOT,examples, tomcat-docs之類Tomcat自帶的的目錄;  
2.在webapps目錄下新建一個目錄,起名叫myapp;  
3.myapp下新建一個目錄WEB-INF,注意,目錄名稱是區分大小寫的;  
4.WEB-INF下新建一個文件web.xml,內容以下:  
<?xml version="1.0" encoding="ISO-8859-1"?>  

<!DOCTYPE web-app  
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"  
" ' target=_blank>[url]http://java.sun.com/dtd/web-app_2_3.dtd[/url]"> 

<web-app>  
<display-name>My Web Application</display-name>  
<description>  
A application for test.  
</description>  
</web-app>  
5.在myapp下新建一個測試的jsp頁面,文件名爲index.jsp,文件內容以下:  
<html><body><center>  
Now time is: <%=new java.util.Date()%>  
</center></body></html>  
6.重啓Tomcat  
7.打開瀏覽器,輸入[url]http://localhost:8080/myapp/index.jsp[/url] 看到當前時間的話說明就成功了。  

第四步:創建本身的Servlet:  
1.用你最熟悉的編輯器(建議使用有語法檢查的java ide)新建一個servlet程序,文件名爲Test.java,文件內容以下:  
package test;  
import java.io.IOException;  
import java.io.PrintWriter;  
import javax.servlet.ServletException;  
import javax.servlet.http.HttpServlet;  
import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  
public class Test extends HttpServlet {  
protected void doGet(HttpServletRequest request, HttpServletResponse response)  
throws ServletException, IOException {  
PrintWriter ut=response.getWriter();  
out.println("<html><body><h1>This is a servlet test.</h1></body></html>");  
out.flush();  
}  
}  
2 .編譯  
將Test.java放在c:\test下,使用以下命令編譯:  
C:\Test>javac Test.java  
而後在c:\Test下會產生一個編譯後的servlet文件:Test.class  
3 .將結構test\Test.class剪切到%CATALINA_HOME%\webapps\myapp\WEB-INF\classes下,也就是剪切那個test目錄到classes目錄下,若是classes目錄不存在,就新建一個。 如今webapps\myapp\WEB-INF\classes下有test\Test.class的文件目錄結構  
4 .修改webapps\myapp\WEB-INF\web.xml,添加servlet和servlet-mapping  
編輯後的web.xml以下所示,紅色爲添加的內容:  
<?xml version="1.0" encoding="ISO-8859-1"?>  

<!DOCTYPE web-app  
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"  
" ' target=_blank>[url]http://java.sun.com/dtd/web-app_2_3.dtd[/url]"> 

<display-name>My Web Application</display-name>  
<description>  
A application for test.  
</description>  
<servlet>  
<servlet-name>Test</servlet-name>  
<display-name>Test</display-name>  
<description>A test Servlet</description>  
<servlet-class>test.Test</servlet-class>  
</servlet>  
<servlet-mapping>  
<servlet-name>Test</servlet-name>  
<url-pattern>/Test</url-pattern>  
</servlet-mapping>  
</web-app>  
這段話中的servlet這一段聲明瞭你要調用的Servlet,而servlet-mapping則是將聲明的servlet「映射」到地址/Test上  
5 .好了,啓動Tomcat,啓動瀏覽器,輸入[url]http://localhost:8080/myapp/Test[/url] 若是看到輸出This is a servlet test.就說明編寫的servlet成功了。  
注意:修改了web.xml以及新加了class,都要重啓Tomcat  

第四步:創建本身的Bean:  
1.用你最熟悉的編輯器(建議使用有語法檢查的java ide)新建一個java程序,文件名爲TestBean.java,文件內容以下:  
package test;  
public class TestBean{  
private String name = null;  
public TestBean(String strName_p){  
this.name=strName_p;  
}  
public void setName(String strName_p){  
this.name=strName_p;  
}  
public String getName(){  
return this.name;  
}  
}  
2 .編譯  
將TestBean.java放在c:\test下,使用以下命令編譯:  
C:\Test>javac TestBean.java  
而後在c:\Test下會產生一個編譯後的bean文件:TestBean.class  
3 .將TestBean.class文件剪切到 %CATALINA_HOME%\webapps\myapp\WEB-INF\classes\test下,  
4 .新建一個TestBean.jsp文件,文件內容爲:  
<%@ page import="test.TestBean" %>  
<html><body><center>  
<%  
TestBean testBean=new TestBean("This is a test java bean.");  
%>  
Java bean name is: <%=testBean.getName()%>  
</center></body></html>  
5 .好了,重啓Tomcat,啓動瀏覽器,輸入[url]http://localhost:8080/myapp/TestBean.jsp[/url] 若是看到輸出Java bean name is: This is a test java bean.就說明編寫的Bean成功了。  

這樣就完成了整個Tomcat下的jsp、servlet和javabean的配置。接下來須要作的事情就是多看書、多讀別人的好代碼,本身多動手寫代碼以加強本身在這方面開發的能力了。  

////////////////////
JSP中tomcat的SQL Server2000數據庫鏈接池的配置
環境:
1. 數據庫:Microsoft SQL Server 2000
2. 數據庫驅動程序:net.sourceforge.jtds.jdbc.Driver

JNDI(Java Naming and Directory Interface)概述:
Tomcat4(5)提供了一個與Java Enterprise Edition應用服務相兼容的JNDI--InitialContext實現實例。它的初始數據設置在$CATALINA_HOME/conf/server.xml文件裏,並可能在網頁應用環境描述(/WEB-INF/web.xml)裏被下列元素引用:
1) <env-entry>--環境入口,設置應用程序如何***做。
2) <resource-ref>--資源參數,通常是數據庫驅動程序、JavaMail Session、自定義類工廠等。
3) <resource-env-ref>--在Servlet 2.4裏用來簡化設置不需認證信息的資源資源如環境參數、resource-ref變量。

InitialContext在網頁應用程序初始化時被設置,用來支持網頁應用程序組件。全部的入口和資源都放在JNDI命名空間裏的java:comp/env段裏。點擊下列網址以獲取更多信息:
1) Java命名和目錄接口(Java Naming and Directory Interface)
2) J2EE平臺說明(J2EE Platform. Specification)

設置JNDI資源
設置JNDI資源要在$CATALINA_HOME/conf/server.xml文件裏使用下列標誌符:
1) <Environment>--設置域個可變的JNDI InitialContext入口的名字和值(同上面說的<env-entry>等價)。
2) <Resource>--設置應用程序可用的資源的名字和類型(同上面說的<resource-ref>等價)。
3) <ResourceParams>--設置Java資源類工廠的名稱或將用的JavaBean屬性。
4) <ResourceLink>--給全局JNDI環境(JNDI Context)添加一個連接。
上述這些標誌符必須放在<Context>和</Context>之間(針對專門的網頁應用程序)或<DefaultContext>和</DefaultContext>之間。
此外,設在網頁應用環境描述(Web Application Descriptor)(/WEB-INF/web.xml)裏的名字和值也在初始環境(Initial Context)裏被設置,當被<Environemt>元素值容許時將被重設初始值。
全局變量能在<Server>子元素的<GlobalNamingResources>裏設置。

數據庫鏈接池概述:
數據庫鏈接是一種關鍵的有限的昂貴的資源,這一點在多用戶的網頁應用程序中體現得尤其突出。對數據庫鏈接的管理能顯著影響到整個應用程序的伸縮性和健壯性,影響到程序的性能指標。數據庫鏈接池正是針對這個問題提出來的。
數據庫鏈接池負責分配、管理和釋放數據庫鏈接,它容許應用程序重複使用一個現有的數據庫鏈接,而再不是從新創建一個;釋放空閒時間超過最大空閒時間的數據庫鏈接來避免由於沒有釋放數據庫鏈接而引發的數據庫鏈接遺漏。這項 技術能明顯提升對數據庫***做的性能。
數據庫鏈接池在初始化時將建立必定數量的數據庫鏈接放到鏈接池中,這些數據庫鏈接的數量是由最小數據庫鏈接數來設定的。不管這些數據庫鏈接是否被使用,鏈接池都將一直保證至少擁有這麼多的鏈接數量。鏈接池的最大數據庫鏈接數量限定了這個鏈接池能佔有的最大鏈接數,當應用程序向鏈接池請求的鏈接數超過最大鏈接數量時,這些請求將被加入到等待隊列中。數據庫鏈接池的最小鏈接數和最大鏈接數的設置要考慮到下列幾個因素:
1) 最小鏈接數是鏈接池一直保持的數據庫鏈接,因此若是應用程序對數據庫鏈接的使用量不大,將會有大量的數據庫鏈接資源被浪費;
2) 最大鏈接數是鏈接池能申請的最大鏈接數,若是數據庫鏈接請求超過此數,後面的數據庫鏈接請求將被加入到等待隊列中,這會影響以後的數據庫***做。
3) 若是最小鏈接數與最大鏈接數相差太大,那麼最早的鏈接請求將會獲利,以後超過最小鏈接數量的鏈接請求等價於創建一個新的數據庫鏈接。不過,這些大於最小鏈接數的數據庫鏈接在使用完不會立刻被釋放,它將被放到鏈接池中等待重複使用或是空閒超時後被釋放。

配置Tomcat數據庫鏈接池的前提:
1. 必須裝有Java運行環境;
2. 必須有SQL Server2000數據庫服務器(能夠不在本地);
3. 必須有jtds.jar,並將它放在$CATALINA_HOME/common/lib目錄下(只能是這裏)。使用它是由於Microsoft公司的Java SQL Server驅動程序不支持二次查詢,可到網上搜到。目前使用的是jtds-0.6.jar。

在$CATALINA_HOME/conf/server.xml裏設置數據庫鏈接池:
下面是配置的代碼,必須放在<Host>和</Host>之間。

<Context path="/quality" docBase="quality" debug="0" reloadable="true" crossContext="true"><Logger className="org.apache.catalina.logger.FileLogger" prefix="localhost_quality_log." suffix=".txt" timestamp="true"/><Resource name="jdbc/connectDB" auth="Container" type="javax.sql.DataSource"/><ResourceParams name="jdbc/connectDB"> <parameter>  <name>maxActive</name>  <!-- Maximum number of DB connections in pool.Set to 0 for no limit. -->  <value>100</value> </parameter> <parameter>  <name>maxIdle</name>  <!-- Maximum number of idle DB connections to retain in pool.Set to 0 for no limit. -->  <value>30</value> </parameter> <parameter>  <name>maxWait</name>  <!-- Maximum time to wait for a DB connection to become available in ms.An exception is thrown if this timeout is exceeded.Set to -1 to wait indefinitely. -->  <value>10000</value> </parameter> <parameter>  <name>removeAbandoned</name>  <!-- Abandoned DB connections are removed and recycled -->  <value>true</value> </parameter> <parameter>  <name>removeAbandonedTimeout</name>  <!-- Use the removeAbandonedTimeout parameter to set the number of seconds a DB connection has been idle before it is considered abandoned.  -->  <value>60</value> </parameter> <parameter>  <name>logAbandoned</name>  <!-- Log a stack trace of the code which abandoned -->  <value>false</value> </parameter> <parameter>  <name>factory</name>  <!-DBCP Basic Datasource Factory -->  <value>org.apache.commons.dbcp.BasicDataSourceFactory</value> </parameter> <parameter>  <name>username</name>  <!-- Database User Name -->  <value>Iorishinier</value> </parameter> <parameter>  <name>password</name>  <!-- User Password -->  <value>mypasswd</value> </parameter> <parameter>  <name>driverClassName</name>  <!-- Database Driver Class Name -->  <value>net.sourceforge.jtds.jdbc.Driver</value> </parameter> <parameter>  <name>url</name>  <!-- Database Address -->  <value>jdbc:jtds:sqlserver://127.127.127.127:1433/Northwind</value> </parameter></ResourceParams></Context>

下面是一些參數的說明:
<Context path="/quality" docBase="quality" debug="0" reloadable="true" crossContext="true">
其中:
1) path 指定路徑,這裏設定的是$CATALINA_HOME/webapps下的quality目錄;
2) docBase 文件根目錄。
3) reloader 當網頁被更新時是否從新編譯。
4) maxActive 鏈接池的最大數據庫鏈接數。設爲0表示無限制。
5) maxIdle 數據庫鏈接的最大空閒時間。超過此空閒時間,數據庫鏈接將被標記爲不可用,而後被釋放。設爲0表示無限制。
6) maxWait 最大創建鏈接等待時間。若是超過此時間將接到異常。設爲-1表示無限制。
7) removeAbandoned 回收被遺棄的(通常是忘了釋放的)數據庫鏈接到鏈接池中。
SmileremoveAbandonedTimeout 數據庫鏈接過多長時間不用將被視爲被遺棄而收回鏈接池中。
9) logAbandoned 將被遺棄的數據庫鏈接的回收記入日誌。
10) driverClassName JDBC驅動程序。
11) url 數據庫鏈接字符串

在$CATALINA_HOME/webapps/quality/WEB-INF/web.xml裏設置被引用的資源:
下面是配置代碼,必須放在<web-app>和</web-app>裏。

<!-- Database Config start --><resource-ref><description>connectDB test</description><res-ref-name>jdbc/connectDB</res-ref-name><res-type>javax.sql.DataSource</res-type><res-auth>Container</res-auth></resource-ref><!-- Database Config end -->


下面是一下參數的必要說明:
1) description 對被引用的資源的描述。
2) res-ref-name 資源名稱。見上面的<ResourceParams name="jdbc/connectDB">
3) res-type 資源類型。見上面的<Resource name="jdbc/connectDB" auth="Container" type="javax.sql.DataSource"/>

在JSP中使用資源:
這是在$CATALINA_HOME/webapps/quality下的某級子目錄裏的jsp網頁文件部分代碼:

<%@ page contentType="text/html;charset=GBK"%><%@ page errorPage="error.jsp"%><%@ page import="javax.naming.*"%><%@ page import="javax.sql.*"%><%@ page import="java.sql.*"%><html> <head> </head> <body>  <%   ………………   ………………   // 數據庫***做   Context ctx=null;   Connection cnn=null;   Statement stmt=null;   ResultSet rs=null;   try   {    ctx=new InitialContext();    if(ctx==null)     throw new Exception("沒有匹配的環境");    DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/connectDB");    if(ds==null)     throw new Exception("沒有匹配數據庫");        cnn=ds.getConnection();    stmt=cnn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);    rs=stmt.executeQuery("select * from table1");    ………………    ………………   }   finally   {    if(rs!=null)     rs.close();    if(stmt!=null)     stmt.close();    if(cnn!=null)     cnn.close();    if(ctx!=null)     ctx.close();   }    %> </body></html>


代碼說明:
DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/connectDB");
上面這句應用了剛纔設的資源。
資源使用完要釋放,尤爲是Context資源,見try-catch-finally部分的finally代碼段,這是一種好的習慣。資源釋放時若是釋放了上級資源,下級資源將先被釋放。如:釋放了ctx,那麼資源釋放順序將是rs,stmt,cnn,ctx。換句話說,若是釋放了ctx,那麼rs,stmt和cnn都將不可用了。
這裏的釋放資源只是將數據庫鏈接返回鏈接池中,並非把資源真正釋放掉,見數據庫鏈接池概述。


/////
Tomcat下JSP、Servlet和JavaBean環境的配置  

常常看到jsp的初學者問tomcat下如何配置jsp、servlet和bean的問題,因而總結了一下如何tomcat下配置jsp、servlet和ben,但願對那些初學者有所幫助。  
1、開發環境配置  
第一步:下載j2sdk和tomcat:到sun官方站點([url]http://java.sun.com/j2se/1.4.2/download.html[/url])下載j2sdk,注意下載版本爲Windows Offline Installation的SDK,同時最好下載J2SE 1.4.2 Documentation,而後到tomcat官方站點([url]http://www.apache.org/dist/jakarta/tomcat-4/[/url])下載tomcat(下載最新4.1.x版本的tomcat);  
第二步:安裝和配置你的j2sdk和tomcat:執行j2sdk和tomcat的安裝程序,而後按默認設置進行安裝便可。  
1.安裝j2sdk之後,須要配置一下環境變量,在個人電腦->屬性->高級->環境變量->系統變量中添加如下環境變量(假定你的j2sdk安裝在c:\j2sdk1.4.2):  
JAVA_HOME=c:\j2sdk1.4.2  
classpath=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;(.;必定不能少,由於它表明當前路徑)  
path=%JAVA_HOME%\bin  
接着能夠寫一個簡單的java程序來測試J2SDK是否已安裝成功:  
public class Test{  
public static void main(String args[]){  
System.out.println("This is a test program.");  
}  
}  
將上面的這段程序保存爲文件名爲Test.java的文件。  
而後打開命令提示符窗口,cd到你的Test.java所在目錄,而後鍵入下面的命令  
javac Test.java  
java Test  
此時若是看到打印出來This is a test program.的話說明安裝成功了,若是沒有打印出這句話,你須要仔細檢查一下你的配置狀況。  
2.安裝Tomcat後,在個人電腦->屬性->高級->環境變量->系統變量中添加如下環境變量(假定你的tomcat安裝在c:\tomcat):  
CATALINA_HOME=c:\tomcat  
CATALINA_BASE=c:\tomcat  
而後修改環境變量中的classpath,把tomat安裝目錄下的common\lib下的(能夠根據實際追加)servlet.jar追加到classpath中去,修改後的classpath以下:  
classpath=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%CATALINA_HOME%\common\lib\servlet.jar;  
接着能夠啓動tomcat,在IE中訪問[url]http://localhost:8080[/url],若是看到tomcat的歡迎頁面的話說明安裝成功了。  
第三步:創建本身的jsp app目錄  
1.到Tomcat的安裝目錄的webapps目錄,能夠看到ROOT,examples, tomcat-docs之類Tomcat自帶的的目錄;  
2.在webapps目錄下新建一個目錄,起名叫myapp;  
3.myapp下新建一個目錄WEB-INF,注意,目錄名稱是區分大小寫的;  
4.WEB-INF下新建一個文件web.xml,內容以下:  
<?xml version="1.0" encoding="ISO-8859-1"?>  
<!DOCTYPE web-app  
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"  
" ' target=_blank>[url]http://java.sun.com/dtd/web-app_2_3.dtd[/url]"> 
<web-app>  
<display-name>My Web Application</display-name>  
<description>  
A application for test.  
</description>  
</web-app>  
5.在myapp下新建一個測試的jsp頁面,文件名爲index.jsp,文件內容以下:  
<html><body><center>  
Now time is: <%=new java.util.Date()%>  
</center></body></html>  
6.重啓Tomcat  
7.打開瀏覽器,輸[url]http://localhost:8080/myapp/index.jsp[/url]看到當前時間的話說明就成功了。  
第四步:創建本身的Servlet:  
1.用你最熟悉的編輯器(建議使用有語法檢查的java ide)新建一個servlet程序,文件名爲Test.java,文件內容以下:  
package test;  
import java.io.IOException;  
import java.io.PrintWriter;  
import javax.servlet.ServletException;  
import javax.servlet.http.HttpServlet;  
import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  
public class Test extends HttpServlet {  
protected void doGet(HttpServletRequest request, HttpServletResponse response)  
throws ServletException, IOException {  
PrintWriter ut=response.getWriter();  
out.println("<html><body><h1>This is a servlet test.</h1></body></html>");  
out.flush();  
}  
}  
2 .編譯  
將Test.java放在c:\test下,使用以下命令編譯:  
C:\Test>javac Test.java  
而後在c:\Test下會產生一個編譯後的servlet文件:Test.class  
3 .將結構test\Test.class剪切到%CATALINA_HOME%\webapps\myapp\WEB-INF\classes下,也就是剪切那個test目錄到classes目錄下,若是classes目錄不存在,就新建一個。 如今webapps\myapp\WEB-INF\classes下有test\Test.class的文件目錄結構  
4 .修改webapps\myapp\WEB-INF\web.xml,添加servlet和servlet-mapping  
編輯後的web.xml以下所示,紅色爲添加的內容:  
<?xml version="1.0" encoding="ISO-8859-1"?>  
<!DOCTYPE web-app  
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"  
" ' target=_blank>[url]http://java.sun.com/dtd/web-app_2_3.dtd[/url]"> 
<web-app>  
<display-name>My Web Application</display-name>  
<description>  
A application for test.  
</description>  
<servlet>  
<servlet-name>Test</servlet-name>  
<display-name>Test</display-name>  
<description>A test Servlet</description>  
<servlet-class>test.Test</servlet-class>  
</servlet>  
<servlet-mapping>  
<servlet-name>Test</servlet-name>  
<url-pattern>/Test</url-pattern>  
</servlet-mapping>  
</web-app>  
這段話中的servlet這一段聲明瞭你要調用的Servlet,而servlet-mapping則是將聲明的servlet"映射"到地址/Test上  
5 .好了,重啓動Tomcat,啓動瀏覽器,輸[url]http://localhost:8080/myapp/Test[/url]若是看到輸出This is a servlet test.就說明編寫的servlet成功了。  
注意:修改了web.xml以及新加了class,都要重啓Tomcat  
第四步:創建本身的Bean:  
1.用你最熟悉的編輯器(建議使用有語法檢查的java ide)新建一個java程序,文件名爲TestBean.java,文件內容以下:  
package test;  
public class TestBean{  
private String name = null;  
public TestBean(String strName_p){  
this.name=strName_p;  
}  
public void setName(String strName_p){  
this.name=strName_p;  
}  
public String getName(){  
return this.name;  
}  
}  
2 .編譯  
將TestBean.java放在c:\test下,使用以下命令編譯:  
C:\Test>javac TestBean.java  
而後在c:\Test下會產生一個編譯後的bean文件:TestBean.class  
3 .將TestBean.class文件剪切到 %CATALINA_HOME%\webapps\myapp\WEB-INF\classes\test下,  
4 .新建一個TestBean.jsp文件,文件內容爲:  
<%@ page import="test.TestBean" %>  
<html><body><center>  
<%  
TestBean testBean=new TestBean("This is a test java bean.");  
%>  
Java bean name is: <%=testBean.getName()%>  
</center></body></html>  
5 .好了,重啓Tomcat,啓動瀏覽器,輸[url]http://localhost:8080/myapp/TestBean.jsp[/url]若是看到輸出Java bean name is: This is a test java bean.就說明編寫的Bean成功了。  
這樣就完成了整個Tomcat下的jsp、servlet和javabean的配置。接下來須要作的事情就是多看書、多讀別人的好代碼,本身多動手寫代碼以加強本身在這方面開發的能力了。  

jvm應填寫到  
c:\j2sdk\bin  

給你一個簡單的配置::::  

JSP環境配置心得  
首先要說的是,使用jdk+tomcat徹底能夠配置咱們的jsp服務器,再也不須要其實任何東東,有不少文章介紹了Apache,其實根本用不着,通常的 學習調試tomcat徹底能夠勝任了。  
安裝jdk後,tomcat在安裝以前會自動找到jdk的安裝路徑,一路點擊"下一步",通過一段時間的文件複製,最後"close",完成comcat的安裝。  
您最好去下載一個版本較高的tomcat,好比4.1以上的,由於它不須要設置太多的系統變量,右擊"個人電腦",選擇"屬性"->"高級"->"環境變量"->"系統變量",新建一個TOMCAT_HOME,值設置成你的tomcat所在的路徑,好比:D:\Program Files\Apache Group\Tomcat 4.1,配置完成。  
從開始菜單中找到tomcat選項,通常打開順序是:開始->程序->Apache Tomcat 4.1,選擇"Start Tomcat",讓jsp服務器開始運行,此時會打開一個相似Dos的窗口,會顯示一些相關的信息。  
若是您使用代理上網,必定要先撤掉代理,否則您的jsp程序永遠也得不到執行。若是不是代理的,這一步就跳過了。  
打開瀏覽器,在地址欄中輸入:[url]http://localhost:8080[/url],若是看到有老虎(我也不知道是老虎仍是貓)的畫面,恭喜您,您成功了一半。  
先來享受一下成功的喜悅吧,請輸入下面的代碼:  
<html>  
<head>  
<title>First Page</title>  
</head>  
<body>  
<H3>Today is: h  
<%= new java.util.Date() %>  
</H3>  
</body>  
</html>  
將該程序保存爲:First.jsp,放到Tomcat的ROOT目錄下,而後在瀏覽器的地址欄中輸入:[url]http://localhost:8080/First.jsp[/url],(First.jsp跟咱們保存的文件名的大小寫要一致)回車,若是不出意外,應該能夠看到形如Today is: h Fri Apr 11 08:32:38 CST 2003 的結果。  
注意:ROOT是tomcat的默認虛擬目錄,若是要改爲本身的虛擬目錄怎麼辦呢?請繼續往下看吧。  
要改爲本身的虛擬目錄,就要請出server.xml來了,該文件是一個配置文件,在Tomcat\conf目錄下,使用任何文本編輯軟件都能打開它,咱們先找到下面一句:  
<Connector className="org.apache.coyote.tomcat4.CoyoteConnector"  
port="8080" minProcessors="5" maxProcessors="75"  
enableLookups="true" redirectPort="8443"  
acceptCount="100" debug="0" connectionTimeout="20000"  
useURIValidationHack="false" disableUploadTimeout="true" />  
這裏的port="8080"就是端口,咱們徹底能夠用別的端口來代替,但不能是被系統佔用的端口(0--1023),這裏簡單提一下。  
下面咱們再往下找,會發現如下的語句:  
</Context>  
</Host>  
咱們就應該找到這兩個語句,若是不懂E文,您就認定這兩個語句好了。而後咱們將該語句更改以下:  
</Context>  
<Context path="/myjsp" debug="0" docBase="e:/myjsp" reloadable="true">  
</Context>  
</Host>  
這裏的path="/myjsp"就是咱們就配置的虛擬目錄了,之後在地址欄中輸入[url]http://localhost:8080/myjsp[/url]便可。而docBase="e:/myjsp" 則是機器本地路徑,他們經過這個語句造成一個映射關係, 其它照抄。  
將上面的First.jsp文件放到e:/myjsp目錄下,輸入[url]http://localhost:8080/myjsp/First.jsp[/url],是否是有一種喜上眉梢的感受?  
在論壇裏我見得最多的就是不少人不知道javaBean文件放到哪裏,老實說開始我也不知道,更使人不解的是,十 我的有九種不一樣的說法,這更讓咱們茫然。其實這問題也不是咱們想像的那麼複雜,咱們以一個例子說明:   先創建一個java程序,代碼以下:   package hall;   public class SimpleBean {   private String message = "No message specified";   public String getMessage() {   return(message);   }   public void setMessage(String message) {   this.message = message;   }   }   保存爲SimpleBean.java,編譯後會生成一個包,其實就至關於一個目錄,也就是SimpleBean.class會存放在hall目錄中,暫且保存起來,未來備用。   再輸入如下代碼:   <HTML>   <HEAD>   <title>Reusing JavaBeans in JSP</title>   </HEAD>   <BODY>   <CENTER>   <TABLE BORDER=5>   <TR><TH CLASS="title">   Reusing JavaBeans in JSP</TABLE>   </CENTER>   <P>   <jsp:useBean id="test" class="hall.SimpleBean" />   <jsp:setProperty name="test" property="message" value="Hello WWW" />   <H1>Message: <I>   <jsp:getProperty name="test" property="message" />   </I></H1>   </BODY>   保存在咱們剛纔創建的虛擬目錄e:/myjsp下面,並命名爲:BeanTest.jsp。   如今咱們應該將hall(包)目錄放在哪兒呢?別急,咱們先在e:/myjsp下創建一個文件夾WEB-INF,而後再在WEB-INF下創建一個classes文件夾,最後將hall目錄放到classes下,固然,hall下的字節碼文件SimpleBean.class也一併要移過來,而SimpleBean.java就和BeanTest.jsp放到同一目錄吧(能夠不須要放的,本身試試)。   好了,大功告成了,從新啓動機器(若是您試了好屢次都不行,這一步必定要作),在瀏覽器中輸入:[url]http://localhost:8080/myjsp/BeanTest.jsp[/url],您看到了什麼?呵,別告訴我您什麼都沒看到,那確定是您設置的問題了。   好了,文章寫完了,我也只是一隻菜鳥,因此有寫的不許備的地方請多多指教。祝您jsp之旅一帆風順!!!   Java學習 - 技術文章中心   初學者問的諸如:《怎樣配置環境變量》《怎樣運行Servlet》啊?這樣的問題太多了,如今我寫一個初學者入門必讀,以便對初學者有指導做用!   首先是下載工具:   我建議初學者用Editplus+JDK,我以爲若是用例如***,Eclipse,JCreator,雖然剛開始的時候比較方便,可是確使初學者門不知道怎樣配置環境變量,   從而難以達到知其然,知其因此然的地步   能夠經過以下地址下載:   Editplus(最新版本是v2.11):[url]http://count.skycn.com/softdown.php?id=3641&url=http://sc-http.skycn.net/down/epp211a_cn.exe[/url](要照註冊碼就本身找吧,網上不少的)   JDK(最新版本是Java2sdk1_4_2):[url]http://count.skycn.com/softdown.php?id=3116&url=http://sc-http.skycn.net/down/j2sdk-1_4_2-windows-i586.exe[/url](這是For Windows)   而後就是安裝JDK,我是把它裝到從c:\JDK目錄下面:   而後就是CLASSPATH的問題了:   正如***做系統利用PATH來搜索可執行程序同樣,Java運行環境也會遍歷CLASSPATH來查找類,即使是HelloWorld這樣簡單的程序,JVM也會遍歷   CLASSPATH定義的每個路徑,直到找到相應的文件爲止。   相信你們用的系統不是2k就是XP,而後就應當以下設置Path:   個人電腦->屬性->高級->環境變量   而後在環境變量的Path後面追加: C:\JDK\bin;.;C:\JDK\lib   也能夠這樣配置:C:\JDK\bin;.;C:\JDK\lib\dt.jar;C:\JDK\lib\tools.jar   ★記住:環境變量中的 . 切記不能少,它表示當前路徑,若是少掉出現的錯誤等會就說!   dt.jar是關於運行環境的類庫,tools.jar是關於一些工具的類庫   若是沒有配置:C:\JDK\bin,則會出現 " javac′ 不是內部或外部命令,也不是可運行的程序或批處理文件。"這樣的錯誤。   而後下面就該寫程序了:   首先是(HelloWorld.java),打開Editplus,新建一個Java文件,請照着以下輸入,要一字不漏,而且分清大小寫:   public class HelloWorld{   public static void main(String[] args){   System.out.println("Hello,World!");   }   }   而後把這個文件保存(ctrl + s)到HelloWorld.java,記住大小寫必定要分清,是HelloWorld.java不是helloworld.java或者其它的   下面就該運行了,開始->運行->cmd   在控制檯中把目錄切換到當前目錄:   javac HelloWorld.java   java HelloWorld   你就會在控制檯上看見輸出的Hello,World!(沒出來?我把電腦吃了:))   javac是編譯命令,它把HelloWorld.java編譯成HelloWorld.class   java就是解釋命令,JVM把HelloWorld.class解釋執行.   在這個時候:   1。若是出現Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld   那就是你在環境變量中沒有加上那個.(dot)   2。若是出現Exception in thread "main" java.lang.NoSuchMethodError: main   或者HelloWorld.java:1: Public class helloworld must be defined in a file called   "HelloWorld.java".   那就是你沒有分清大小寫的寫入這個HelloWorld,或者保存得時候沒有保存爲HelloWorld.java   這個名字必定要跟public class的名字同樣   對於環境變量的問題就說到這裏,下面我先所說怎麼在Editplus裏面編譯和運行,在Tools->參數設置->配置用戶工具   1.添加工具(添加應用程序)   菜單文字:Compile Java Program   程序:C:\JDK\bin\javac.exe   參數:文件名稱   初始目錄:文件目錄   2.添加工具(添加應用程序)   菜單文字:Run Java Program   程序:C:\JDK\bin\java.exe   參數:文件名稱(不含擴展名)   初始目錄:文件目錄   工具組名稱能夠隨便添,好比Debug Java Program   而後在Tools的下拉菜單中,你就會看見Compile Java Program以及Run Java Program這兩個選項,之後你就能夠利用ctrl + 1編譯和ctrl +2運行程序了   下面就討論Servlet的運行:   首先要運行Servlet,則須要JSP/Servlet container,我建議初學者用Tomcat   Tomcat(最新版本5.0)[url]http://cvs.apache.org/builds/jakarta-tomcat-5/nightly/jakarta-tomcat-5-bin-20030725.zip[/url]   而後把這個壓縮包解壓到:   C:\Tomcat   而後再配置環境變量:   添加三個系統變量:   JAVA_HOME: C:\JDK   TOMCAT_HOME: C:\Tomcat   CLASSPATH: %JAVA_HOME%\lib;%TOMCAT_HOME%\lib   Tomcat的環境變量就配置完畢了,下面檢驗Tomcat是否可以運行:   在控制檯中轉到C:\Tomcat\bin這個目錄,運行startup,而後回出現一個窗口,連跳一大串東西,最後表示Server已經運行   在瀏覽器中輸入[url]http://localhost:8080[/url],出現歡迎界面,則表示Tomcat沒問題了   而後和上面同樣,寫入你的第一個Servlet   import java.io.*;   import javax.servlet.*;   import javax.servlet.http.*;   public class HelloWorld extends HttpServlet   {   public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException   {   response.setContentType("text/html");   PrintWriter ut = response.getWriter();   out.println("<html><head><title>");   out.println("This is my first Servlet");   out.println("</title></head><body>");   out.println("<h1>Hello,World!</h1>");   out.println("</body></html>");   }   }   而後照樣用javac HelloWorld.java來編譯這個文件,若是出現沒法import javax.servlet.*   那麼就是應該把C:\Tomcat\common\lib裏面的servlet.jar(根據實際來看)文件拷貝到C:\JDK\jre\lib\ext中,再次編譯,就沒有問題了!   而後在Tomcat目錄裏面的C:\Tomcat\webapps\ROOT裏面按以下的文件結構:   ROOT\index.html   ROOT\welcom.jsp   ROOT\WEB-INF\lib\MyServlet.jar(若是你的servlet的.class打成了.jar文件,則放在lib下面)   ROOT\WEB-INF\classes\HelloWorld.class(把上面生成的HelloWorld.class文件放在這個裏面)   而後在瀏覽器中輸入[url]http://localhost:8080/servlet/HelloWorld[/url],因而Server衆望所歸的報錯了:Error 404--Not Found   怎麼回事呢?   Servlet必須使用C:\Tomcat\webapps\ROOT\WEB-INF這個目錄下面的web.xml文件進行註冊,用EP打開這個web.xml文件,   在裏面加入   <servlet>   <servlet-name>HelloWorld</servlet-name>   <servlet-class>HelloWorld</servlet-class>   </servlet>   <servlet-mapping>   <servlet-name>HelloWorld</servlet-name>   <url-pattern>/servlet/helloworld</url-pattern>   </servlet-mapping>   這樣的結構   <servlet>   <servlet-name>HelloWorld</servlet-name>   <servlet-class>HelloWorld</servlet-class>   </servlet>   表示指定包含的servlet類.   而如下的結構   <servlet-mapping>   <servlet-name>HelloWorld</servlet-name>   <url-pattern>/servlet/HelloWorld</url-pattern>   </servlet-mapping>   表示指定HelloServlet應當映射到哪種URL模式。   在修改web.xml完畢事後,從新啓動Server,而後再輸入[url]http://localhost:8080/servlet/HelloWorld[/url],那麼偌大一個Hello,World!等着你呢,恭喜你
相關文章
相關標籤/搜索