善用這套 Servlet 與 JSP 框架,掌控大型網站的複雜變化
作者:Malcolm Davis|顧問|2001 年 2 月
本文介紹 Struts——一個運用 Servlet 與 JavaServer Pages (JSP) 技術實現 Model-View-Controller (MVC) 設計模式的開源框架。Struts 能協助開發者控制 Web 專案中的變更,提升開發專業度。即使您未來不直接使用 Struts,理解其核心思想也能為後續的 Servlet 與 JSP 開發帶來啟發。
雖然任何人都能在網路上發布 HTML 頁面,但業餘作品與專業開發的網站有本質差異。網頁設計師需掌握色彩、用戶體驗、生產流程、版面佈局、瀏覽器相容性、圖像製作與 JavaScript 等技能。打造優質網站工程浩大,多數 Java 開發者更擅長設計優雅的物件介面,而非使用者介面。JavaServer Pages (JSP) 技術為網頁設計師與 Java 開發者提供了連結紐帶。
若您開發過大型 Web 應用,定能深刻體會「變化」的含義。「模型-視圖-控制器」(MVC) 正是為應對變化而生的設計模式,它降低了業務邏輯介面與資料介面之間的耦合度。Struts 採用 Servlet 2.2 與 JSP 1.1 標籤(屬 J2EE 規範)實現 MVC。即使您從未用 Struts 建構系統,了解其運作原理也能將其中精華應用於未來的 Servlet 與 JSP 專案中。
本文將從一個典型 JSP 檔案切入,探討其優缺點;隨後深入剖析 Struts 如何管控專案變更並提升專業度;最後以實際重構該 JSP 為例,示範如何兼顧網頁設計師需求與應對變化。
JavaServer Page (JSP) 檔案只是檢視 Servlet 的另一種形式。JSP 的概念讓我們能將 Java Servlet 視為一個 HTML 網頁,消除 Java 代碼中常見的繁瑣 print() 語句。JSP 檔案會先被預處理為 .java 檔案,再編譯為 .class 檔案。若使用 Tomcat,可在 work 目錄查看預處理後的 .java 檔案;其他容器儲存位置視容器而定。圖 1 說明了從 JSP 到 Servlet 的轉換流程。
圖 1. 從 JSP 檔案到 Servlet 的流程
(這與 Microsoft 的 Active Server Page (ASP) 截然不同:ASP 編譯至記憶體,而非獨立檔案。)
在小型 JSP 應用中,常見資料、業務邏輯與使用者介面混雜在單一代碼模組中,甚至包含控制應用流程的邏輯。清單 1 與圖 2 展示一個讓用戶加入郵件列表的簡單 JSP 檔案。
清單 1. join.jsp — 簡單的請求與響應 JSP 檔案
<%@ page language="java" %> <%@ page import="business.util.Validation" %> <%@ page import="business.db.MailingList" %> <% String error = ""; String email = request.getParameter("email"); // 是否有電子郵件地址 if( email!=null ) { // 驗證輸入... if( business.util.Validation.isValidEmail(email) ) { // 存儲輸入... try { business.db.MailingList.AddEmail(email); } catch (Exception e) { error = "Error adding email address to system. " + e; } if( error.length()==0 ) { %> // 重定向到歡迎頁... <jsp:forward page="welcome.html"/> <% } } else { // 設置錯誤消息並重新顯示網頁 error = email + " is not a valid email address, please try again."; } } else { email = ""; } %> <html> <head> <title>Join Mailing List</title> </head> <body> <font color=red><%=error%></font><br> <h3>Enter your email to join the group</h3> <form action="join.jsp" name="joinForm"> <input name="email" id="email" value=<%=email%>></input> <input type=submit value="submit"> </form> </body> </html>
圖 2. 在簡單的請求與響應中,JSP 檔案設定資料、控制流向下一頁並生成 HTML