首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Eclipse Europa 開發 Java Web 應用程式完整指南

     編輯:Java 相關知識

成為 Web 開發人員正當其時。從未有如此多技術選擇:大量優秀的開源 Web 伺服器、資料庫、程式語言和開發框架任您使用。無論您希望使用哪種技術組合,都存在能提升生產力的整合開發環境 (IDE):Eclipse。本教學是三部曲系列「用 Eclipse Europa 進行 Web 開發」的第一部分,介紹如何透過 Eclipse 實現 Java、PHP 和 Ruby Web 開發,著重示範如何使用 Eclipse 最新版本 Europa 快速開發 Java Web 應用程式。我們將使用 Eclipse 版 Java Platform, Enterprise Edition 5 (Java EE) 建構用於追蹤和計算棒球統計資訊的 Web 應用程式。

開始之前

Eclipse 開發人員致力於讓 Web 開發人員工作更輕鬆。Europa 發行版提供多個經調整的 Eclipse 版本,包含適用於 Web 開發人員的版本。

關於本系列

在「用 Eclipse Europa 進行 Web 開發」系列中,您將發現無論選擇何種語言,Eclipse 都是 Web 開發的理想平台。靈活的外掛系統讓它能輕鬆創建針對 Java、PHP 和 Ruby 量身打造的 Eclipse 版本。您將看到不同外掛如何為各語言提供獨特功能,以及所有 Web 開發人員都能受益的通用功能。本系列將建立一個範例棒球 Web 應用程式,允許輸入球員比賽數據並計算統計資訊。

關於本教學

作為三部曲第一部分,本教學使用 Eclipse Java EE 版本進行 Java Web 開發,示範使用 Eclipse 連接資料庫、建立表格和測試數據、配置 Web 伺服器、使用精靈建立 Web 應用程式、網頁和資料存取程式碼。最後,使用 Eclipse 控制 Web 伺服器、發布應用程式、甚至在應用程式運行時偵錯。

先決條件

擁有 Java 程式設計背景對發揮本教學最大效果至關重要。熟悉 Eclipse IDE 將十分有幫助,但並非必要。

系統需求

  • Eclipse Europa (V3.3)
  • Java Development Kit (JDK) 5.0 或更高版本
  • Eclipse IDE for Java EE Developers
  • Java Runtime Environment (JRE)
  • Apache Tomcat (容器)
  • MySQL V5.0 (資料庫)
  • Java Persistence API (特別是 OpenJPA 實作)

Eclipse:哪個版本?

查看 Eclipse.org 下載區,會看到若干可用發行版。我們使用 Eclipse IDE for Java EE Developers。

Java EE

Eclipse IDE for Java EE Developers 提供 Java Web 開發所需功能:Java 編譯器和偵錯器;支援 Java 應用伺服器、資料庫客戶端;Web 應用程式、Web 服務和 Enterprise JavaBean (EJB) 精靈等。值得注意的是 HTML 檔案和 Java Server Page (JSP) 的圖形編輯器。附帶大多數功能在 Eclipse 先前版本可找到。Europa 發行前,需下載現稱 Eclipse Classic 版本並安裝額外外掛。Europa 簡化此操作,並針對 Java Web 開發全面調整 Java EE 套件。

提示:調整記憶體設定

Java EE 套件按功能打包,支援所有功能需消耗開發電腦資源。建議編輯 eclipse.ini 增加 Europa 記憶體使用量。此檔案位置因作業系統而異。編輯 -vmargs 增加記憶體。本教學開發期間使用的記憶體設定:

範例 1. eclipse.ini -vmargs

-Xms256m
-Xmx512m
-XX:MaxPermSize=128m

安裝 Europa Java EE 版本,配置資料庫和 Web 伺服器,接著開發 Web 應用程式。

基礎設施

Eclipse 讓 Web 開發更簡單,但仍需基礎設施。需要資料庫保存和檢索數據。Eclipse 提供優秀資料庫工具,只需建立空資料庫或重用現有資料庫。下列 MySQL 指令建立空資料庫:

範例 2. 建立資料庫

mysql> create database baseball;
Query OK, 1 row affected (0.04 sec)

完成部分基礎設施。需要 Web 伺服器,可用任意 Java Web 容器,包括 Apache Geronimo 或 IBM WebSphere。保持簡單使用 Apache Tomcat V6.0。無需對 Tomcat 特殊配置。基礎設施就緒,開始用 Eclipse 開發 Web 應用程式。

Baseball 應用程式:使用資料庫

為演示 Eclipse 強大功能,建構追蹤棒球統計的 Java Web 應用程式。這是簡單應用,允許輸入球員比賽數據並計算統計。首先建立資料庫結構描述。

建立結構描述

開啟 Eclipse 時,需開啟 Data Source Explorer 視窗。右鍵點擊 Databases 資料夾選擇 New。

Data Source Explorer

Eclipse 詢問資料庫連線類型。選擇 Generic JDBC Connection。

連接類型

配置連線。告訴 Eclipse 連接哪個資料庫。範例 2 已建立 baseball 資料庫,使用該資料庫。

JDBC 連接配置

點擊 Browse 建立新驅動程式,開啟資料庫類型列表。

數據庫類型

向下捲動找到 MySQL V5.1 (或適用您資料庫的類型)。點擊 Add 開啟驅動程式定義對話框。

JDBC 驅動程式定義

點擊 Add Jar/Zip 開啟檔案瀏覽器,瀏覽到已下載的 MySQL 驅動程式 JAR 檔案。選中 JDBC JAR 後,驅動程式定義列表會刷新。

更新驅動程式定義列表

選擇剛建立的驅動程式定義點擊 OK。開啟連線屬性,可能需編輯用戶名和密碼。

JDBC 連接屬性

輸入連線資訊後測試連線,應顯示成功對話框。

測試連接

若未獲成功訊息需調整設定。連線測試通過後,應能在 Data Source Explorer 啟動資料庫連線。

從 Data Source Explorer 連接

已建立資料庫連線,接著為儲存數據建立表格。

建立表格

查看 Data Source Explorer 中表格列表。

列出的數據庫表

目前無表格。右鍵點擊 Tables 資料夾選擇 New Table。

選擇新建表

開啟建立選項列表。

創建表選項

開啟新建表對話框。

新建表

建立名為 Players 的表格,三欄:Id、First_Name、Last_Name。三欄皆必填,Id 為主鍵。

主鍵定義

點擊 Finish。此操作不執行 SQL DDL,而是產生 SQL 語句。

生成的 SQL 語句

最棒的是可在執行前調整 SQL。將 Id 設為自動遞增,first-name 和 last-name 字元長度限制 50。SQL 如範例 3:

範例 3. Players 表 SQL

CREATE TABLE Players (
    Id INT NOT NULL AUTO_INCREMENT,
    First_Name VARCHAR(50) NOT NULL,
    Last_Name VARCHAR(50) NOT NULL,
    PRIMARY KEY (Id)
);

執行 SQL:高亮選中右鍵選擇 Execute selected Text。

執行 SQL

執行後 SQL Results 視窗顯示成功訊息。

確認 SQL 執行成功

可在 Data Source Explorer 檢視 Players 表格。

從 Data Source Explorer 查看 Players 表

還需另一張表格儲存比賽數據,同樣方法建立。最後執行 SQL 如範例 4:

範例 4. Games 表 SQL

CREATE TABLE Games (
    Id INT NOT NULL AUTO_INCREMENT,
    Player_Id INT DEFAULT '' NOT NULL,
    AB INT DEFAULT 0 NOT NULL,
    H INT DEFAULT 0 NOT NULL,
    2B INT DEFAULT 0 NOT NULL,
    3B INT DEFAULT 0 NOT NULL,
    HR INT DEFAULT 0 NOT NULL,
    BB INT DEFAULT 0 NOT NULL,
    R INT DEFAULT 0 NOT NULL,
    RBI INT DEFAULT 0 NOT NULL,
    PRIMARY KEY (Id)
);

CREATE INDEX Player_Id ON Games (Player_Id ASC);

執行後已建立應用程式所需兩張表格。繼續輸入測試數據。

輸入測試數據

用 Eclipse 建立表格簡單,管理表格數據更簡單。右鍵點擊 Data Source Explorer 表格名稱選擇 Data > Edit 開始添加數據。

向 Players 表中添加數據

開啟輸入表格數據的圖形介面。

輸入數據

按需添加數據,只需輸入 First_Name 和 Last_Name。完成後右鍵選擇 Save。

保存測試數據

SQL Results 視窗顯示實際執行的 SQL 和資料庫回傳訊息。在 Players 視窗右鍵選擇 Refresh 重新查詢數據,看到資料庫產生的 ID。對 Games 表格執行相同操作。完成後配置 Eclipse 使用 Web 伺服器。

使用 Web 伺服器

先了解 Eclipse 基本概念和透視圖,再設置 Web 伺服器,然後開始編寫應用程式。

用 Eclipse 設置 Tomcat

Eclipse 重要概念是透視圖。不同透視圖提供適用特定開發類型的視窗和命令。選擇 Window > Open Perspective > Other 選擇 Java EE 切換到 Java EE 透視圖。

切換到 Java EE 透視圖

選擇 File > New > Other 從列表選擇 Server。

新服務器

點擊 Next 為服務器定義選擇 Tomcat v6.0 Server。需選擇運行時。

選擇服務器運行時

在檔案瀏覽器瀏覽到 Tomcat 安裝目錄。Eclipse 知道 Tomcat 目錄位置後點擊 Finish。基礎設施就緒,開始編寫程式碼。

建立 Web 應用程式

開始開發 Web 應用程式,這是 Eclipse 發揮實際作用的部分。選擇 File > New > Other 選擇 Dynamic Web Application 建立新 Web 應用程式。

新動態 Web 應用程序

填寫專案名稱 baseball,目標運行時設為剛建立的 Tomcat V6.0 服務器。

項目信息

點擊 Next 開啟 Project Facets。使用 Java Persistence API 管理資料存取 (下一部分詳述),確保勾選該選項。

Project facets

點擊 Next 開啟 Web 模組中繼資料。使用預設值,但偏好將 Web 模組目錄命名為 war,一目瞭解構建內容。

Web 模塊信息

點擊 Next 開啟 JPA 配置。使用 Tomcat 無「內建」JPA 實作,如系統需求所述使用 OpenJPA。選擇 Configure default JPA implementation library。

JPA 配置

開啟 Default JPA Implementation Library 偏好設定。點擊 Configure user libraries。

為默認 JPA 實現庫設置用戶庫

選擇 OpenJPA (或其他如 TopLink、Hibernate) JAR 檔案。配置 JPA 實作後返回 JPA 配置畫面,選擇新庫點擊 Finish。

JPA 配置完成

點擊 Finish,Eclipse 建立 Web 應用程式所需目錄結構和許多工件 (如 web.xml 和 persistence.xml)。應用程式建立完成,開始建立領域模型。

Eclipse 與資料存取程式碼:使用 JPA

了解 Java Persistence API 如何減輕 Java 使用資料庫的痛苦,以及 Java EE for Eclipse 如何在建立應用程式領域模型時支援該模型。

建立領域模型:使用 JPA

早期 Java 開發人員知曉使用資料庫有多痛苦:通常涉及大量 JDBC 程式碼或手寫冗長 SQL 字串,還要用許多介面建立實體 EJB 並編寫部署描述符。那些日子已過去,歸功於 EJB 3.0 和 JPA。現在 EJB 不僅易用,且無需重量級應用伺服器即可使用。

Java EE for Eclipse 充分支援 JPA,甚至提供 JPA 透視圖。選擇 Window > Open Perspective > Other 選擇 JPA Development 切換。

打開 JPA 開發透視圖

建立領域模型只需建立簡單 Java 類別。首先為 Players 表建立 org.developerworks.baseball.Player 類別。程式碼如範例 5:

範例 5. Player 類別

package org.developerworks.baseball;

public class Player {
    private int id;
    private String firstName;
    private String lastName;
}

需要 getter 和 setter。Eclipse 使此簡單:選擇 Source > Generate Getters and Setters。

生成代碼

開啟對話框,點擊 Select All 和 OK。

生成 getter 和 setter

產生程式碼如範例 6:

範例 6. 帶有 getter 和 setter 的 Player 類別

package org.developerworks.baseball;

public class Player {
    private int id;
    private String firstName;
    private String lastName;
    public int getId() { return id; }
    public void setId(int id) { this.id = id; }
    public String getFirstName() { return firstName; }
    public void setFirstName(String firstName) { this.firstName = firstName; }
    public String getLastName() { return lastName; }
    public void setLastName(String lastName) { this.lastName = lastName; }
}

將類別與資料庫表關聯:在 JPA Structure 視窗點擊 Player 類別。

JPA 結構

在 JPA Details 選擇 Map As > Entity。

JPA 詳細信息

在 Table 區段選擇結構描述,Name 下拉選單選 Players 表。

指定表

程式碼隨即變更。

生成的 player 代碼

在 Package Explorer 選擇 persistence.xml,右鍵選擇 JPA Tools > Synchronize Classes。

與數據庫同步

Eclipse 對資料庫驗證程式碼,發現程式碼無效。

無效的 Player 類

查看 Problems 視窗。

Problems 視窗

第一個問題:類別未指定主鍵。解決:在 JPA Structure 點擊 Id 屬性,在 JPA Details 選擇 Map As > Id。

ID 屬性的 JPA 詳細信息

因 ID 欄位設為自動遞增,需指定主鍵使用 Identity 鍵產生策略。再執行 JPA 同步,解決一個問題。

其他問題源於 JPA 無法將 firstName 和 lastName 對應到 Players 表欄位。因 Java 欄位未命名為與表欄位完全相同。在 JPA Structure 選擇 firstName 欄位,在 JPA Details 下拉選單選對應欄位。

把 firstName 映射到 First_Name

對 lastName 執行相同操作。再執行 JPA 同步,所有問題解決。Player 類別程式碼更新如範例 7:

範例 7. 完成的 Player 類別

package org.developerworks.baseball;

import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.Id;
import javax.persistence.GeneratedValue;
import static javax.persistence.GenerationType.IDENTITY;
import javax.persistence.Column;

@Entity
@Table(schema="baseball", name = "Players")
public class Player {
    @Id
    @GeneratedValue(strategy=IDENTITY)
    private int id;
    @Column(name="First_Name")
    private String firstName;
    @Column(name="Last_Name")
    private String lastName;
    // getter/setter 略
}

同樣過程建立對應 Games 表的 Game 類別。程式碼如範例 8:

範例 8. Game 類別

package org.developerworks.baseball;

import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Id;
import javax.persistence.GeneratedValue;
import static javax.persistence.GenerationType.IDENTITY;
import javax.persistence.Column;

@Entity
@Table(schema="baseball", name = "Games")
public class Game {
    @Id
    @GeneratedValue(strategy=IDENTITY)
    private int id;
    @ManyToOne(optional=false)
    @JoinColumn(name="Player_Id", nullable=false, updatable=false)
    private Player player;
    @Column(name="H") private int hits;
    @Column(name="2B") private int doubles;
    @Column(name="3B") private int triples;
    @Column(name="HR") private int homeRuns;
    @Column(name="BB") private int walks;
    @Column(name="R") private int runs;
    @Column(name="RBI") private int rbis;
    @Column(name="AB") private int atBats;
    // getter/setter 略
}

所有類別完成對應。最後編輯 persistence.xml,這是 JPA 關鍵中繼資料檔案,包含連線資訊。

範例 9. persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="https://java.sun.com/xml/ns/persistence"
    xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="https://java.sun.com/xml/ns/persistence
    https://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
    <persistence-unit name="baseball">
        <class>org.developerworks.baseball.Game</class>
        <class>org.developerworks.baseball.Player</class>
        <properties>
            <property name="openjpa.ConnectionURL" value="jdbc:mysql://localhost:3306/baseball"/>
            <property name="openjpa.ConnectionDriverName" value="com.mysql.jdbc.Driver"/>
            <property name="openjpa.ConnectionUserName" value="root"/>
            <property name="openjpa.ConnectionPassword" value="password"/>
            <property name="openjpa.Log" value="DefaultLevel=WARN, Tool=INFO"/>
        </properties>
    </persistence-unit>
</persistence>

Eclipse 應已將類別放入此檔案,您只需填入資料庫連線資訊。完成 JPA 設定,接著為資料建立 UI。

Eclipse 與網頁

為存取資料建立 UI,採用 JSP Model 2 架構。先建立處理商務邏輯的 Servlet,再轉發給 JSP 呈現輸出。

建立 Servlet

回到 Java EE 透視圖,右鍵點擊 baseball 專案選擇 New > Servlet。

新建 servlet

開啟 Create Servlet 對話框,填寫 Java package 和 Class name 點擊 Next。

創建 servlet

無需編輯,但注意指向 Servlet 的 URL 對應。Eclipse 自動在 web.xml 設定此對應,無需修改該檔案。記住此對應點擊 Finish。

Servlet 信息

在 Servlet 類別中使用 JPA 獲取所有球員列表並轉發給 JSP。程式碼如範例 10:

範例 10. PlayerServlet 程式碼

package org.developerworks.baseball.web;

import java.io.IOException;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.developerworks.baseball.Player;

public class PlayersServlet extends javax.servlet.http.HttpServlet
        implements javax.servlet.Servlet {
    static final long serialVersionUID = 1L;
    private EntityManagerFactory factory;
    private EntityManager em;

    public PlayersServlet() {
        super();
        factory = Persistence.createEntityManagerFactory("baseball");
        em = factory.createEntityManager();
    }

    @SuppressWarnings("unchecked")
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        List<Player> players = em.createQuery("select p from Player p").getResultList();
        request.setAttribute("players", players);
        request.getRequestDispatcher("/players.jsp").forward(request, response);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        this.doGet(request, response);
    }
}

注意:Servlet 建構子中使用 JPA 建立參考 baseball 持久單元的 EntityManager 實例,此單元來自 persistence.xml (範例 9)。

建立視圖的 JSP

用 Eclipse 建立 JSP 很輕鬆。右鍵點擊 baseball 專案選擇 New > JSP。

新建 JSP

首先列出棒球球員。程式碼如範例 11:

範例 11. players.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="c" uri="https://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "https://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Baseball Players</title>
</head>
<body>
<table>
<thead>
<tr>
<td>First Name</td>
<td>Last Name</td>
</tr>
</thead>
<c:forEach items="${players}" var="player">
<tr>
<td>${player.firstName}</td>
<td>${player.lastName}</td>
</tr>
</c:forEach>
</table>
</body>
</html>

用 Eclipse 部署

建立基本應用程式,準備測試。可能想用 Ant 或 Perl、Groovy 等腳本語言編寫部署腳本。Eclipse 支援 Ant 和 Maven,但有更簡單方法。

從 Eclipse 運行

部署應用程式:右鍵點擊 baseball 專案選擇 Run As > Run On Server。

在服務器上運行應用程序

Eclipse 詢問部署到哪台伺服器。選擇先前建立的 Tomcat 實例點擊 Finish。

選擇服務器

開啟 Servers 視窗顯示 baseball 應用程式已發布到 Tomcat。

發布到 Tomcat 中的 Baseball 應用程序

在瀏覽器輸入 https://localhost:9762/baseball/PlayersServlet 開啟應用程式,顯示先前建立的範例數據。

Baseball 應用程序

列表應與範例數據相同。若有錯誤,確保連線屬性正確且所有 JAR 已複製到 /WEB-INF/lib 目錄 (如 OpenJPA JAR、JDBC 驅動 JAR、JSTL JAR)。

用 Eclipse 偵錯

返回應用程式偵錯。Eclipse 偵錯功能是主要特色之一,能偵錯在 Web 伺服器運行的活動程式碼非常重要。回到 Servlet 類別,在使用 JPA 查詢資料庫處設置斷點。

設置斷點

在 Server 視窗右鍵點擊使用的伺服器選擇 Stop 停止伺服器。重新啟動但選擇 Debug。

調試服務器

重新載入網頁,Eclipse 應切換到 Debug 透視圖。

Eclipse Debug 透視圖

從偵錯透視圖可逐步執行程式碼、設置監視等。無需對伺服器特殊操作,像偵錯 Java 主方法可執行類一樣偵錯 Web 應用程式。

結語

我們已看到如何使用 Eclipse 設置 Web 開發所需一切。Eclipse 整合資料庫、Web 伺服器及其他所需工具;擁有許多工具助您快速利用 Java EE 技術集。使用 Eclipse 連接資料庫建立表格並填充數據,再利用相同工具建立 JPA 對應簡化資料存取程式碼。使用 Eclipse 建立 JSP 和 Servlet。然後部署 Web 應用程式,甚至直接從 Eclipse 偵錯。現在可添加更多網頁建立球員、比賽並計算統計,詳見系列第二部分。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved