用這種 servlet 和 jsp 框架治理復(fù)雜的大型網(wǎng)站Malcolm Davis
顧問
2001 年 2 月
本文介紹 Struts,它是使用 servlet 和 javaServer Pages 技術(shù)的一種 Model-View-Controller 實(shí)現(xiàn)。Struts 可幫助您控制 Web 項(xiàng)目中的變化并提高專業(yè)化水平。盡管您可能永遠(yuǎn)不會用 Struts 實(shí)現(xiàn)一個(gè)系統(tǒng),但您可以將其中的一些思想用于您以后的 servlet 和 JSP 網(wǎng)頁的實(shí)現(xiàn)中。
簡介
小學(xué)生也可以在因特網(wǎng)上發(fā)布 Html 網(wǎng)頁。但是,小學(xué)生的網(wǎng)頁和專業(yè)開發(fā)的網(wǎng)站有質(zhì)的區(qū)別。網(wǎng)頁設(shè)計(jì)人員(或者 HTML 開發(fā)人員)必須理解顏色、用戶、生產(chǎn)流程、網(wǎng)頁布局、瀏覽器兼容性、圖像創(chuàng)建和 javascript 等等。設(shè)計(jì)漂亮的網(wǎng)站需要做大量的工作,大多數(shù) Java 開發(fā)人員更注重創(chuàng)建美麗的對象接口,而不是用戶界面。JavaServer Pages (JSP) 技術(shù)為網(wǎng)頁設(shè)計(jì)人員和 Java 開發(fā)人員提供了一種聯(lián)系鈕帶。
假如您開發(fā)過大型 Web 應(yīng)用程序,您就理解變化這個(gè)詞的含義。“模型-視圖-控制器”(MVC) 就是用來幫助您控制變化的一種設(shè)計(jì)模式。MVC 減弱了業(yè)務(wù)邏輯接口和數(shù)據(jù)接口之間的耦合。Struts 是一種 MVC 實(shí)現(xiàn),它將 Servlet 2.2 和 JSP 1.1 標(biāo)記(屬于 J2EE 規(guī)范)用作實(shí)現(xiàn)的一部分。盡管您可能永遠(yuǎn)不會用 Struts 實(shí)現(xiàn)一個(gè)系統(tǒng),但了解一下 Struts 或許使您能將其中的一些思想用于您以后的 Servlet 的 JSP 實(shí)現(xiàn)中。
在本文中,我將以一個(gè) JSP 文件為起點(diǎn)討論該網(wǎng)頁的優(yōu)缺點(diǎn),該文件中使用的元素可能是您所熟悉的。隨后我將討論 Struts,并說明它是如何控制您的 Web 項(xiàng)目中的變化并提高專業(yè)化水平的。最后,我將重新開發(fā)這個(gè)簡單的 JSP 文件,在開發(fā)過程中我已顧及到網(wǎng)頁設(shè)計(jì)人員和變化。
一個(gè) JSP 文件就是一個(gè) Java servlet
JavaServer Page (JSP) 文件只是審閱 servlet 的另一種方式。JSP 文件的概念使我們能夠?qū)?Java servlet 看作一個(gè) HTML 網(wǎng)頁。JSP 消除了 Java 代碼中經(jīng)常出現(xiàn)的討厭的 PRint()
語句。JSP 文件首先被預(yù)處理為 .java
文件,然后再編譯為 .class
文件。假如您使用的是 Tomcat,則可以在 work
目錄下查看預(yù)處理后的 .java
文件。別的容器可能將 .java
和 .class
文件存儲在其他位置;這個(gè)位置與容器有關(guān)。圖 1 說明了從 JSP 文件到 servlet 的流程。
圖 1. 從 JSP 文件到 servlet 的流程
(這與 Microsoft 的 Active Server Page (asp) 明顯不同。ASP 被編譯到內(nèi)存中,而不是編譯到一個(gè)單獨(dú)的文件中。)
簡單的獨(dú)立 JSP 文件
在小型 JSP 應(yīng)用程序中,經(jīng)常會看到數(shù)據(jù)、業(yè)務(wù)邏輯和用戶界面被組合在一個(gè)代碼模塊中。此外,應(yīng)用程序通常還包含用來控制應(yīng)用程序流程的邏輯。清單 1 和圖 2 展示了答應(yīng)用戶加入一個(gè)郵件列表的一個(gè)簡單 JSP 文件。
清單 1. join.jsp
-- 一個(gè)簡單的請求和響應(yīng) JSP 文件
<%@ page language="java" %><%@ page import="business.util.Validation" %><%@ page import="business.db.MailingList" %><%String error = "";String email = request.getParameter("email");// 是否有電子郵件地址if( email!=null ) { // 驗(yàn)證輸入... 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 { // 設(shè)置錯(cuò)誤消息并重新顯示網(wǎng)頁 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. 在簡單的請求和響應(yīng)中,JSP 文件設(shè)置數(shù)據(jù)、控制到下一個(gè)網(wǎng)頁的流程并創(chuàng)建 HTML
新聞熱點(diǎn)
疑難解答
圖片精選