您好,登錄后才能下訂單哦!
1、 安裝
TOMCAT最新版本是5.0.29(http://jakarta.apache.org/site/binindex.cgi)
如果在WINDOWS下它可以自動(dòng)找到你的JDK或者set JAVA_HOME=c:/jdk
在LINUX下需要先解壓,然后設(shè)置JAVA_HOME
export JAVA_HOME=/usr/local/jdk
2、 RUN
設(shè)置完畢后就可以運(yùn)行tomcat服務(wù)器了,進(jìn)入tomcat的bin目錄,WINDOWS下用startup啟動(dòng)tomcat,linux下用startup.sh,相應(yīng)的關(guān)閉tomcat的命令為shutdown和shutdown.sh。
啟動(dòng)服務(wù)后在瀏覽器里輸入http://localhost:8080/來(lái)測(cè)試一下
3、 目錄結(jié)構(gòu)
Bin:存放啟動(dòng)和關(guān)閉tomcat腳本。
Conf:包含不同的配置文件,server.xml(Tomcat的主要配置文件)。
Work:存放jsp編譯后產(chǎn)生的class文件。
Webapp:存放應(yīng)用程序示例,以后你要部署的應(yīng)用程序也要放到此目錄。
Logs:存放日志文件
Comm./server/shared:這三個(gè)文件夾下的LIB文件夾放jar文件。
1、 配置server.xml文件
沒(méi)有什么好說(shuō)的,看TOMCAT的文檔比較有用,這里提供一些主要的東西吧。
元素名 | 屬性 | 解釋 |
server | port | 指定一個(gè)端口,這個(gè)端口負(fù)責(zé)監(jiān)聽(tīng)關(guān)閉tomcat的請(qǐng)求 |
shutdown | 指定向端口發(fā)送的命令字符串 | |
service | name | 指定service的名字 |
Connector(表示客戶端和service之間的連接) | port | 指定服務(wù)器端要?jiǎng)?chuàng)建的端口號(hào),并在這個(gè)斷口監(jiān)聽(tīng)來(lái)自客戶端的請(qǐng)求 |
minProcessors | 服務(wù)器啟動(dòng)時(shí)創(chuàng)建的處理請(qǐng)求的線程數(shù) | |
maxProcessors | 最大可以創(chuàng)建的處理請(qǐng)求的線程數(shù) | |
enableLookups | 如果為true,則可以通過(guò)調(diào)用request.getRemoteHost()進(jìn)行DNS查詢來(lái)得到遠(yuǎn)程客戶端的實(shí)際主機(jī)名,若為false則不進(jìn)行DNS查詢,而是返回其ip地址 | |
redirectPort | 指定服務(wù)器正在處理http請(qǐng)求時(shí)收到了一個(gè)SSL傳輸請(qǐng)求后重定向的端口號(hào) | |
acceptCount | 指定當(dāng)所有可以使用的處理請(qǐng)求的線程數(shù)都被使用時(shí),可以放到處理隊(duì)列中的請(qǐng)求數(shù),超過(guò)這個(gè)數(shù)的請(qǐng)求將不予處理 | |
connectionTimeout | 指定超時(shí)的時(shí)間數(shù)(以毫秒為單位) | |
Engine(表示指定service中的請(qǐng)求處理機(jī),接收和處理來(lái)自Connector的請(qǐng)求) | defaultHost | 指定缺省的處理請(qǐng)求的主機(jī)名,它至少與其中的一個(gè)host元素的name屬性值是一樣的 |
Context(表示一個(gè)web應(yīng)用程序,通常為WAR文件,關(guān)于WAR的具體信息見(jiàn)servlet規(guī)范) | docBase | 應(yīng)用程序的路徑或者是WAR文件存放的路徑 |
path | 表示此web應(yīng)用程序的url的前綴,這樣請(qǐng)求的url為http://localhost:8080/path/**** | |
reloadable | 這個(gè)屬性非常重要,如果為true,則tomcat會(huì)自動(dòng)檢測(cè)應(yīng)用程序的/WEB-INF/lib 和/WEB-INF/classes目錄的變化,自動(dòng)裝載新的應(yīng)用程序,我們可以在不重起tomcat的情況下改變應(yīng)用程序 | |
host(表示一個(gè)虛擬主機(jī)) | name | 指定主機(jī)名 |
appBase | 應(yīng)用程序基本目錄,即存放應(yīng)用程序的目錄 | |
unpackWARs | 如果為true,則tomcat會(huì)自動(dòng)將WAR文件解壓,否則不解壓,直接從WAR文件中運(yùn)行應(yīng)用程序 | |
Logger(表示日志,調(diào)試和錯(cuò)誤信息) | className | 指定logger使用的類名,此類必須實(shí)現(xiàn)org.apache.catalina.Logger 接口 |
prefix | 指定log文件的前綴 | |
suffix | 指定log文件的后綴 | |
timestamp | 如果為true,則log文件名中要加入時(shí)間,如下例:localhost_log.2001-10-04.txt | |
Realm(表示存放用戶名,密碼及role的數(shù)據(jù)庫(kù)) | className | 指定Realm使用的類名,此類必須實(shí)現(xiàn)org.apache.catalina.Realm接口 |
Valve(功能與Logger差不多,其prefix和suffix屬性解釋和Logger 中的一樣) | className | 指定Valve使用的類名,如用org.apache.catalina.valves.AccessLogValve類可以記錄應(yīng)用程序的訪問(wèn)信息 |
directory | 指定log文件存放的位置 | |
pattern | 有兩個(gè)值,common方式記錄遠(yuǎn)程主機(jī)名或ip地址,用戶名,日期,第一行請(qǐng)求的字符串,HTTP響應(yīng)代碼,發(fā)送的字節(jié)數(shù)。combined方式比common方式記錄的值更多 |
2、 管理
TOMCAT管理能力很強(qiáng)大,進(jìn)入http://localhost:8080/,自己慢慢管吧。實(shí)踐出真知,我喜歡這樣搞:
^_^,一切盡在掌握http://localhost:8080/manager/html 。
一、讓數(shù)據(jù)庫(kù)連接池轉(zhuǎn)起來(lái)
作為一個(gè)J2EE程序員大家手上可能會(huì)有現(xiàn)成的JDBC 數(shù)據(jù)庫(kù)連接池,其實(shí)這沒(méi)有太大的必要,因?yàn)橄體eblogic……企業(yè)級(jí)WEBAPP都有自己的連接池,大家不要費(fèi)力直接使用吧,效率也很不錯(cuò),再也不用羨慕.NET的ADO了(以前作MS從來(lái)不擔(dān)心數(shù)據(jù)連接,ADO確實(shí)用起來(lái)很爽),如果想實(shí)現(xiàn)一個(gè) JDBC connection pool 的注意事項(xiàng)有:
1. 有一個(gè)簡(jiǎn)單的函數(shù)從連接池中得到一個(gè) Connection。
2. close 函數(shù)必須將 connection 放回 數(shù)據(jù)庫(kù)連接池。
3. 當(dāng)數(shù)據(jù)庫(kù)連接池中沒(méi)有空閑的 connection, 數(shù)據(jù)庫(kù)連接池必須能夠自動(dòng)增加 connection 個(gè)數(shù)。
4. 當(dāng)數(shù)據(jù)庫(kù)連接池中的 connection 個(gè)數(shù)在某一個(gè)特別的時(shí)間變得很大,但是以后很長(zhǎng)時(shí)間只用其中一小部分,應(yīng)該可以自動(dòng)將多余的 connection 關(guān)閉掉。
5. 如果可能,應(yīng)該提供debug 信息報(bào)告沒(méi)有關(guān)閉的 new Connection 。
網(wǎng)上有各種各樣的連接池代碼,抄過(guò)來(lái)改改吧,嘿嘿~
這里介紹如何配置TOMCAT的連接池,以SQLSERVER為例:
步驟1:安裝SQLSERVER的JDBC驅(qū)動(dòng)
SQLSERVER的JDBC驅(qū)動(dòng)其實(shí)就是三個(gè)JAR文件,msbase.jar/mssqlserver.jar/msutil.jar,將這三個(gè)文件拷貝到你的/tomcat_home/common/lib目錄下去就可以了。
步驟2:修改server.xml文件
具體代碼如下:
<!-- Maximum number of dB connections in pool. Make sure you configure your mysqld max_connections large enough to handle all of your db connections. Set to 0 for no limit.-->
<!-- Maximum number of idle dB connections to retain in pool. Set to 0 for no limit.-->
<!-- Maximum time to wait for a dB connection to become available in ms, in this example 0.5 seconds. An Exception is thrown if this timeout is exceeded. Set to -1 to wait indefinitely. -->
<!-- msSQL dB username and password for dB connections -->
<!-- Class name for SQLServer2000 JDBC driver -->
<!-- The JDBC connection url for connecting to your MS SQL Server dB.The autoReconnect=true argument to the url makes sure that the mm.Sql Server JDBC Driver will automatically reconnect if mysqld closed the connection. mysqld by default closes idle connections after 8 hours.-->
<!--must use & not use & -->
步驟三:程序調(diào)用
package dbmanage;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Vector;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
import util.smartDateFormat;
public class dbManager {
/************************************
* @param static private boolean VERBOSE ;
* @param Statement theStatement;
* @param PreparedStatement thePstmt;
* @param Connection theConnection;
************************************/
final static private boolean VERBOSE = true; //打印控制臺(tái)控制
//static Logger logger = Logger.getLogger(dbManager.class.getName());
private Context initCtx = null;
private Context ctx = null;
private DataSource ds = null;
private long timeout = 5000;
private Statement theStatement = null;
private PreparedStatement thePstmt = null;
/************************************
* 初試化initCtx
* 取得數(shù)據(jù)源對(duì)象
************************************/
public
dbManager() {
try {
initCtx = new InitialContext();
//init context,read config web.xml
if (initCtx == null) {
throw new Exception("Initial Failed!");
}
ctx = (Context) initCtx.lookup("java:comp/env");
//find "jdbc/SqlServerDB" object this configruation in the SERVER.XML of Tomcat
if (ctx != null) {
ds = (DataSource) ctx.lookup("jdbc/SqlServerDB");
}
if (ds == null) {
throw new Exception("Look up DataSource Failed!");
}
}
catch (Exception e) {
log(e, "Can’t get the Context!");
}
}
/************************************
* get Connection
* @return Connection
************************************/
public synchronized
Connection getConnection() {
//get connection and set to delay time
long startTime = new java.util.Date().getTime();
Connection con = null;
while (con == null) {
con = newConnection();
if (con != null) {
//log("Create New Connection!");
break;
}
try {
log("連接超時(shí),重新連接,等待" + timeout + "ms");
wait(timeout);
}
catch (InterruptedException e) {
log(e, "連接超時(shí)!");
}
if ( (new java.util.Date().getTime() - startTime) >= timeout) {
log("Connection timeout!");
break;
}
}
return con;
}
private
Connection newConnection() {
Connection con = null;
try {
con = ds.getConnection();
if (con == null) {
throw new Exception("Create Connection Failed!");
}
}
catch (Exception e) {
log("Create Connection Failed!");
System.out.println(e.getMessage());
}
return con;
}
/************************************
* release the connection
* @param conn Connection
* @param stmt Statement
* @param pstmt PreparedStatement
************************************/
public synchronized
void freeConnection(Connection conn,
Statement stmt,
PreparedStatement pstmt) {
try {
//close Statement
if (stmt != null) {
stmt.close();
stmt = null;
//log("Close Statement......");
}
//close PreparedStatement
if (pstmt != null) {
pstmt.close();
pstmt = null;
//log("Close PreparedStatement......");
}
}
catch (Exception e) {
System.out.println(e.getMessage());
}
try {
//close Connection
if (conn != null) {
conn.close();
conn = null;
//log("Close Connection......");
}
}
catch (SQLException e) {
log(e, "釋放資源出錯(cuò)!");
}
}
/************************************
* write log file.
* @param s String
************************************/
private
void log(String s) {
if (VERBOSE) {
System.out.println(new java.util.Date() + ":" + s);
//logger.info(new java.util.Date()+s);
}
}
/************************************
* write log file.
* @param ex Object
************************************/
private
void logerr(Object ex) {
if (VERBOSE) {
//System.out.println(new java.util.Date()+":"+s);
//logger.error(ex);
}
}
/************************************
* write log file.
* @param e Throwable
* @param msg String
************************************/
private
void log(Throwable e, String msg) {
System.out.println(new java.util.Date() + ": " + msg);
//logger.info(new java.util.Date() + ": " + msg, e);
}
……
}
OK,你現(xiàn)在可以方便的使用連接池了,想要一個(gè)得一個(gè),記得要釋放哦,連接池的數(shù)量總是有限的。
二、中文問(wèn)題照樣很簡(jiǎn)單
每個(gè)國(guó)家(或區(qū)域)都規(guī)定了計(jì)算機(jī)信息交換用的字符編碼集,如美國(guó)的擴(kuò)展 ASCII碼, 中國(guó)的 GB2312-80,日本的 JIS 等,作為該國(guó)家/區(qū)域內(nèi)信息處理的基礎(chǔ),有著統(tǒng)一編碼的重要作用。字符編碼集按長(zhǎng)度分為 SBCS(單字節(jié)字符集),DBCS(雙字節(jié)字符集)兩大類。早期的軟件(尤其是操作系統(tǒng)),為了解決本地字符信息的計(jì)算機(jī)處理,出現(xiàn)了各種本地化版本(L10N),為了區(qū)分,引進(jìn)了 LANG, Codepage 等概念。但是由于各個(gè)本地字符集代碼范圍重疊,相互間信息交換困難;軟件各個(gè)本地化版本獨(dú)立維護(hù)成本較高。因此有必要將本地化工作中的共性抽取出來(lái),作一致處理,將特別的本地化處理內(nèi)容降低到最少。這也就是所謂的國(guó)際化(I18N)。各種語(yǔ)言信息被進(jìn)一步規(guī)范為 Locale 信息。處理的底層字符集變成了幾乎包含了所有字形的 Unicode。
現(xiàn)在大部分具有國(guó)際化特征的軟件核心字符處理都是以 Unicode 為基礎(chǔ)的,在軟件運(yùn)行時(shí)根據(jù)當(dāng)時(shí)的 Locale/Lang/Codepage 設(shè)置確定相應(yīng)的本地字符編碼設(shè)置,并依此處理本地字符。在處理過(guò)程中需要實(shí)現(xiàn) Unicode 和本地字符集的相互轉(zhuǎn)換,甚或以 Unicode 為中間的兩個(gè)不同本地字符集的相互轉(zhuǎn)換。這種方式在網(wǎng)絡(luò)環(huán)境下被進(jìn)一步延伸,任何網(wǎng)絡(luò)兩端的字符信息也需要根據(jù)字符集的設(shè)置轉(zhuǎn)換成可接受的內(nèi)容。
Java 語(yǔ)言內(nèi)部是用 Unicode 表示字符的,遵守 Unicode V2.0。Java 程序無(wú)論是從/往文件系統(tǒng)以字符流讀/寫文件,還是往 URL 連接寫 HTML 信息,或從 URL 連接讀取參數(shù)值,都會(huì)有字符編碼的轉(zhuǎn)換。這樣做雖然增加了編程的復(fù)雜度,容易引起混淆,但卻是符合國(guó)際化的思想的。從理論上來(lái)說(shuō),這些根據(jù)字符集設(shè)置而進(jìn)行的字符轉(zhuǎn)換不應(yīng)該產(chǎn)生太多問(wèn)題。而事實(shí)是由于應(yīng)用程序的實(shí)際運(yùn)行環(huán)境不同,Unicode 和各個(gè)本地字符集的補(bǔ)充、完善,以及系統(tǒng)或應(yīng)用程序?qū)崿F(xiàn)的不規(guī)范,轉(zhuǎn)碼時(shí)出現(xiàn)的問(wèn)題時(shí)時(shí)困擾著程序員和用戶。
其實(shí)解決 JAVA 程序中的漢字編碼問(wèn)題的方法往往很簡(jiǎn)單,但理解其背后的原因,定位問(wèn)題,還需要了解現(xiàn)有的漢字編碼和編碼轉(zhuǎn)換。相信這樣的東西大家都見(jiàn)過(guò)了
new String(request.getParameter("test").getBytes("iso-8859-1"),"GBK")
但這樣的代碼相信不是一個(gè)解決的辦法,這樣會(huì)增加程序的復(fù)雜度,寫數(shù)據(jù)庫(kù),提交表單,URL中傳中文參數(shù),到處都是中文問(wèn)題!作為一個(gè)連走路都要算計(jì)最短距離的懶人,當(dāng)然不愿天天叨念著new String(request.getParameter("test").getBytes("iso-8859-1"),"GBK"),然漢戰(zhàn)戰(zhàn)兢兢的處理各種字符轉(zhuǎn)換的問(wèn)題,我跋山涉水,翻山越嶺,終于找到了完美的解決方式,在TOMCAT中只需要簡(jiǎn)單的配置,引入2個(gè)文件就可以輕松搞定。
前提條件,每個(gè)頁(yè)面使用
<%@ page contentType="text/html; charset=GBK" language="java" import="java.sql.*" errorPage="" %>
地球人都知道的東西。
步驟1:添加過(guò)濾器
在TOMCAT中找到這2個(gè)文件RequestDumperFilter.java,SetCharacterEncodingFilter.java,他們位于D:Tomcat5.0.27webappsjsp-examplesWEB-INFclassesfilters,加到你的工程文件里去,編譯他們。
步驟2:配置WEB.XML
在web.xml里加入這一段
……
……
看到?jīng)]有?這樣你就不用寫那些麻煩的轉(zhuǎn)換代碼了,當(dāng)然這樣還不足以解決問(wèn)題。
步驟3:修改server.xml
在server.xml修改2個(gè)地方
maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding=’GBK’/> port="8009" minProcessors="5" maxProcessors="75" enableLookups="true" redirectPort="8443" acceptCount="10" debug="0" connectionTimeout="0" useURIValidationHack="false" protocol="AJP/1.3" protocolHandlerClassName="org.apache.jk.server.JkCoyoteHandler" URIEncoding=’GBK’/> OK,搞定! 三、APACHE和TOMCAT他們倆關(guān)系非同一般 Apache和tomcat都是很優(yōu)秀的軟件,更可貴的是它們是免費(fèi)的。其實(shí)他們2個(gè)都是jakarta項(xiàng)目的重要組成部分。按輩分來(lái)講,TOMCAT是APACHE的兒子,APACHE的專長(zhǎng)是解析靜態(tài)文件,CGI,PHP……圖片……,兒子當(dāng)然不能搶了老爹的飯碗,所以TOMCAT只有在J2EE這個(gè)上面發(fā)憤圖強(qiáng),其實(shí)TOMCAT并非不能干他老爹的活,只是穩(wěn)定性差點(diǎn)而已(偶沒(méi)有明顯的感覺(jué),可能是商業(yè)炒作吧),現(xiàn)在大家明白為什么把他們2個(gè)扯一起了吧,上陣還靠父子兵呢~ 把2個(gè)家伙整一起有大致有2種方法,一種是利用mod_jk2.so,一種是利用mod_jk_1.2.5_2.0.47.dll。這2個(gè)東東叫聯(lián)接器(TOMCAT就是通過(guò)這家伙與apache勾搭上的) 1、 利用mod_jk_1.2.5_2.0.47.dll在WINDOWS下整合 步驟1:準(zhǔn)備材料 apache2.0.52 http://apache.te8.com/dist/httpd/binaries/win32/apache_2.0.52-win32-x86-no_ssl.msi tomcat5.0.27 http://apache.linuxforum.net/dist/jakarta/tomcat-5/v5.0.19/bin/jakarta-tomcat-5.0.27.exe JDK(這個(gè)不用說(shuō)了吧^_^) mod_jk_1.2.5_2.0.47.dll(關(guān)鍵是這個(gè)東東啊,找了我N久),據(jù)說(shuō)在下面連接可以下到,最后在我同事那找到的。 http://apache.linuxforum.net/dist/jakarta/tomcat-connectors/jk/binaries/win32/mod_jk_1.2.5_2.0.47.dll 安裝apache tomcatJDK。 步驟2:安裝后設(shè)置環(huán)境變量 設(shè)置我的電腦屬性高級(jí)環(huán)境變量新建系統(tǒng)變量 變量名:JAVA_HOME 變量值:C:JBuilderXjdk1.4 (指向JDK的實(shí)際安裝路徑);TOMCAT_HMOM 變量值:Tomcat5.0.27;lasspath 編輯變量值中加上 ……;%JAVA_HOME%bin;%JAVA_HOME%lib;%TOMCAT_HOME%bin;.; 測(cè)試一下,訪問(wèn)http://localhost和http://localhost:8080,默認(rèn)安裝是不會(huì)有什么錯(cuò)誤的^_^ 把連接器mod_jk_1.2.5_2.0.47.dll COPY到D:Apache2modules下。 步驟3:apache配置 在d:Apache2conf下找到httpd.conf,找到DirectoryIndex,在index.html后添加index.jsp;查找“l(fā)isten”用于本機(jī)測(cè)試時(shí):Listen 127.0.0.1:80,我的是這樣設(shè)置的Listen *:80 查找AddDefaultCharset設(shè)置為AddDefaultCharset off,這樣APACHE將以你頁(yè)面定義的字符集解析頁(yè)面。 在最后添加如下代碼: ServerAdmin darkxie@hotmail.com #你的mail地址 DocumentRoot F:/uutang/uutang #你的項(xiàng)目組根目錄 ServerName dark #你的服務(wù)名,若你的機(jī)器有域名,設(shè)為域名 ErrorLog logs/ErrorLog.txt #錯(cuò)誤日志 CustomLog logs/CustomLog.txt common #訪問(wèn)日志 JkMount /servlet/* ajp13 #讓Apache支持對(duì)servlet傳送,用以Tomcat解析 JkMount /*.jsp ajp13 #讓Apache支持對(duì)jsp傳送,用以Tomcat解析 JkMount /*.do ajp13 #讓Apache支持對(duì)struts的action傳送,用以Tomcat解析 LoadModule jk_module modules/mod_jk_1.2.5_2.0.47.dll JkWorkersFile "D:/Tomcat5.0.27/conf/workers.properties" JkLogFile "D:/Tomcat5.0.27/logs/mod_jk2.log" JkLogLevel info 步驟4:tomcat配置 在d:Tomcat5conf下新建一個(gè)workers.properties文件 .內(nèi)容如下: workers.tomcat_home=d:Tomcat5 #讓mod_jk模塊知道Tomcat workers.java_home=d:jdk1.3 #讓mod_jk模塊知道j2sdk ps= worker.list=ajp13 #模塊版本,現(xiàn)有ajp13了,不要修改 worker.ajp13.port=8009 #工作端口,若沒(méi)占用則不用修改 worker.ajp13.host=localhost #主機(jī),若上面的Apache主機(jī)不為localhost,作相應(yīng)修改 worker.ajp13.type=ajp13 #類型 worker.ajp13.lbfactor=1 #代理數(shù),不用修改 修改TOMCAT的server.xml文件: <!-- Define a Coyote/JK2 AJP 1.3 Connector on port 8009 --> port="8009" minProcessors="5" maxProcessors="75" enableLookups="true" redirectPort="8443" acceptCount="10" debug="0" connectionTimeout="0" useURIValidationHack="false" protocol="AJP/1.3" protocolHandlerClassName="org.apache.jk.server.JkCoyoteHandler" URIEncoding=’GBK’/> 讓TOMCAT知道ajp13協(xié)議,apache和tomcat倆父子間靠這個(gè)協(xié)議溝通。 測(cè)試一下,訪問(wèn)http://localhost和http://localhost:8080,看到相同的頁(yè)面沒(méi)有?細(xì)心點(diǎn),其實(shí)很簡(jiǎn)單,看看E文的幫助,搞定不成問(wèn)題。 2、 利用mod_jk2.so(也叫JK2)整合 jk2是一個(gè)jakarta-tomcat-connectors-jk2.0.4-win32-apache2.0.49.zip文件,主要用的是其中的mod_jk2.so。其實(shí)利用mod_jk2.so整合和利用mod_jk_1.2.5_2.0.47.dll整合大同小異,只是換了個(gè)聯(lián)接器而已,現(xiàn)在一步一步整起來(lái)~ 步驟1:沒(méi)有多說(shuō)的,安裝好TOMCAT和APACHE 下載jakarta-tomcat-connectors-jk2.0.4-win32-apache2.0.49.zip,解壓,將mod_jk2放到apache的安裝文件夾下的modules文件夾中。 步驟2:apache配置 在/conf中加入一個(gè)work.properties文件,其內(nèi)容如下: <!--這個(gè)文件的作用不是很清楚,總之路徑設(shè)置正確就行了。我的apache裝在D:/Apache2,根據(jù)情況自己修改。--> [shm] file=D:/ /Apache2/logs/shm.file size=1048576 <!--這個(gè)socket channel是必須的,port和host對(duì)應(yīng)于tomcat端的設(shè)置。--> #The socket channel [channel.socket:localhost:8009] port=8009 host=localhost <!--worker,必須的。--> #define the worker [ajp13:localhost:8009] channel=channel.socket:localhost:8009 <!--url mapping,我的主要是.jsp和struts的.do,servlet的話設(shè)置成[uri:/xxx/*]之類的。--> #uri mapping [uri:/*] #和第一種方式一樣吧^_^ [uri:/*.jsp] [uri:/*.do] worker=ajp13:localhost:8009 在httpd.conf中,在LoadModule那里加入這句: LoadModule jk2_module modules/mod_jk2.so 在最后加入這句: JkSet config.file "conf/work.properties" 這是告訴apache去哪里找jk的配置的,根據(jù)具體情況修改。 還要修改一下DirectoryIndex,DirectoryIndex index.html index.html.var index.jsp查找“l(fā)isten”用于本機(jī)測(cè)試時(shí):Listen 127.0.0.1:80,我的是這樣設(shè)置的Listen *:80。 當(dāng)然還有我們的虛擬目錄: ServerAdmin darkxie@hotmail.com DocumentRoot F:/uutang/uutang ServerName dark ErrorLog logs/ErrorLog.txt CustomLog logs/CustomLog.txt common #JkMount /servlet/* ajp13 #JkMount /*.jsp ajp13 #JkMount /*.do ajp13 步驟3:tomcat配置 Tomcat的端口設(shè)置為8080。 在/conf文件夾加入jk2.properties文件,其內(nèi)容如下: # Set the desired handler list handler.list=apr,request,channelSocket # # Override the default port for the socketChannel channelSocket.port=8009 TOMCAT自己已經(jīng)生成了這個(gè)文件,找到相關(guān)的地方把注視去掉改一下就成。 注意:用這種方式整合最好是自己編譯mod_jk2.so文件,特別是在unix/linux下,我沒(méi)有環(huán)境,制作mod_webapp.so沒(méi)有自己作過(guò)。具體方法,自己去找吧。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。