JBuilder 是一款開放式的 Java IDE,內建整合了 Tomcat、WebLogic 等主流應用伺服器。雖然 JDK、Tomcat、WebLogic 版本不斷迭代升級,但我們仍能在 JBuilder 環境中無縫使用其最新版本。由於 Tomcat 伺服器配置相對複雜,習慣 Windows 平台的開發者常對其使用感到困惑。本文將以 Tomcat 環境下的資料庫連接池 DBCP 為例,詳細說明使用 JBuilder 開發 Web 應用的標準流程,並解答開發過程中常見的問題。
JBuilder 2005 內附 JDK 版本為 1.4.2_04-b05,檔案位於 JBuilder_HOME\jdk1.4 目錄;Tomcat 最新版本為 5.0.27,檔案位於 JBuilder_HOME\thirdparty\jakarta-tomcat-5.0.27 目錄。接下來將以實際操作步驟示範如何在 Tomcat 環境中配置 DBCP 資料庫連接池。
選擇 File → New Project,輸入專案名稱 myWeb 與目錄 C:\myWeb。
選擇 Project → Project Properties,在伺服器選項中指定使用 Tomcat。
選擇 File → New 建立 Web Module,名稱為 DBTest,目錄同名。
建立 test.jsp 並修改內容如下:
<%@ page contentType="text/html; charset=Big5" %>
<html>
<head><title>DB Test</title></head>
<body>
<%
foo.DBTest tst = new foo.DBTest();
tst.init();
%>
<h2>Results</h2>
Foo <%= tst.getFoo() %><br/>
Bar <%= tst.getBar() %>
</body>
</html>
此時會自動生成名為 test 的執行配置。可透過 Run → Configurations → Edit 修改執行配置,特別是指定伺服器連接埠與是否自動搜尋可用連接埠。
選擇 File → New Class,類別名稱為 DBTest,套件名為 foo,修改 DBTest.java 內容:
package foo;
import javax.naming.*;
import javax.sql.*;
import java.sql.*;
public class DBTest {
String foo = "Not Connected";
int bar = -1;
public void init() {
try {
Context ctx = new InitialContext();
if (ctx == null) throw new Exception("Boom - No Context");
DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/TestDB");
if (ds != null) {
Connection conn = ds.getConnection();
if (conn != null) {
foo = "Got Connection " + conn.toString();
Statement stmt = conn.createStatement();
ResultSet rst = stmt.executeQuery("select id, foo, bar from testdata");
if (rst.next()) {
foo = rst.getString(2);
bar = rst.getInt(3);
}
conn.close();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
public String getFoo() { return foo; }
public int getBar() { return bar; }
}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://java.sun.com/xml/ns/j2ee"
xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://java.sun.com/xml/ns/j2ee https://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<description>MySQL Test App</description>
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/TestDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>
按 F9 執行,myWeb 目錄下將生成 Tomcat 子目錄,包含 conf 子目錄;同時在 Tomcat_HOME\conf\Catalina\localhost 產生 DBTest.xml。
將 myWeb\Tomcat\conf\server8080.xml 加入專案並修改內容,重點配置 Context 元素中的資料源參數:
<Context path="/DBTest" docBase="C:\myWeb\DBTest" debug="5" reloadable="true" crossContext="true" workDir="C:\myWeb\Tomcat\work\DBTest">
<Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/TestDB">
<parameter><name>factory</name><value>org.apache.commons.dbcp.BasicDataSourceFactory</value></parameter>
<parameter><name>maxActive</name><value>100</value></parameter>
<parameter><name>maxIdle</name><value>30</value></parameter>
<parameter><name>maxWait</name><value>10000</value></parameter>
<parameter><name>username</name><value>sa</value></parameter>
<parameter><name>password</name><value>topcomputer</value></parameter>
<parameter><name>driverClassName</name><value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value></parameter>
<parameter><name>url</name><value>jdbc:microsoft:sqlserver://nt04:1433;DatabaseName=test</value></parameter>
</ResourceParams>
</Context>
將 JDBC 驅動 JAR 檔複製至 C:\Borland\JBuilder2005\thirdparty\jakarta-tomcat-5.0.27\common\lib 目錄。
在 SQL Server 中建立 test 資料庫與 testdata 資料表:
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[testdata]') AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
DROP TABLE [dbo].[testdata]
GO
CREATE TABLE [dbo].[testdata] (
[id] [int] NOT NULL,
[foo] [varchar](50) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL,
[bar] [int] NOT NULL
) ON [PRIMARY]
GO
插入數筆測試資料。
按 F9 執行專案。
在 c:\myWeb 建立 startup.bat 與 shutdown.bat:
REM startup.bat
C:\Borland\JBuilder2005\jdk1.4\bin\javaw -classpath "C:\Borland\JBuilder2005\thirdparty\jakarta-tomcat-5.0.27\bin\bootstrap.jar;C:\Borland\JBuilder2005\jdk1.4\lib\tools.jar" "-Dcatalina.home=C:/Borland/JBuilder2005/thirdparty/jakarta-tomcat-5.0.27" org.apache.catalina.startup.Bootstrap -config "C:\myWeb\Tomcat\conf\server8080.xml" start
REM shutdown.bat
C:\Borland\JBuilder2005\jdk1.4\bin\javaw -classpath "C:\Borland\JBuilder2005\thirdparty\jakarta-tomcat-5.0.27\bin\bootstrap.jar;C:\Borland\JBuilder2005\jdk1.4\lib\tools.jar" "-Dcatalina.home=C:/Borland/JBuilder2005/thirdparty/jakarta-tomcat-5.0.27" org.apache.catalina.startup.Bootstrap -config "C:\myWeb\Tomcat\conf\server8080.xml" stop
執行 startup.bat,瀏覽器輸入 https://localhost:8080/DBTest/test.jsp 驗證結果。
DBTest.war 複製至 Tomcat_HOME\webappsTomcat_HOME\conf\Catalina\localhost 建立 DBTest.xml(內容同步驟 8 的 Context 設定)webapps\DBTest,並在 work\Catalina\localhost 生成工作目錄在 Web Module 屬性對話框中,勾選 Build Web archive 選項。
右鍵點擊 Module 目錄選擇 New → Directory,或右鍵目標目錄選擇 New → File 指定檔案類型。這些檔案皆會打包進 WAR。
將檔案複製至指定目錄,在 Web Module 屬性的 Content 頁籤勾選 include all classes and resources。