簡體   English   中英

Web應用程序的JSP / Servlet設計模式建議

[英]JSP/Servlet Design Pattern Suggestions for Web Application

我正在基於本機腳本(JSP)的RESTful Web框架內工作。 該框架具有一個路由機制,該機制會自動設置一些Request屬性,然后在JSP中可用(這些屬性之一是所請求資源的“模型”;基本上只是一個HashMap)。

問題是90%的時間,需要向JSP中添加一些邏輯,無論是更復雜的域邏輯,檢索其他資源數據(其他模型)還是清除數據以輸出。

我正在研究各種建立Web應用程序設計模式,以從JSP中提取域邏輯,並保持JSP盡可能少邏輯。

注意事項:

  1. 在正在運行的系統中,提供了模型(從數據庫中提取數據),但是提供了框架(前面提到的HashMap); 我可以圍繞這些數據創建自己的模型包裝器,但是可能沒有必要。
  2. JSP /腳本是請求的終點-如果我使用一個模式,該模式使用一個Presenter / Controller類型的對象,該對象返回一個View bean(ViewModel?),其中包含該視圖將使用的所有數據,我將需要一行在JSP中調用調用Presenter / Controller並實例化View bean。

目前,我已經為每個模塊(腳本)創建了一個Presenter POJO,它可以訪問模型(同樣,框架將其設置為Request attr),並在JSP的頂部實例化它,並更多地使用它或不太像豆子。

如果我理解正確,我相信我已經實現了Presentation Model設計模式。 [1]

例如

JSP看起來像:

<% DemoPresenter demo = new DemoPresenter(request) %>
<%= demo.getTitle() %>
- or add it to pageContext to use w JSTL/EL -
<c:set var="demo" value="new DemoPresenter(request)"/>
${demo.title} 

並且“ Presenter / Controller”看起來像:

public class DemoPresenter extends BasePresenter { 

   private String title; 

   public DemoPresenter(HttpServletRequest request) { 
       FrameworkModel model = request.getAttribute("frameworkProvidedResourceModel");
       this.title = model.get("title").toUpperCase() + "!!!";
   } 

   public getTitle() { return this.title; } 
}

關於直接在JSP /腳本中使用Presenter obj,而不是讓它返回Presenter填充數據的“無邏輯” ViewModel bean,有什么想法嗎? 這樣做的好處是我可以讓一個Presenter管理同一資源的各種“視圖”(例如“顯示視圖”,“編輯視圖”,“摘要視圖”等)-以下是如何獲取各種視圖的示例楷模。

/ blog / posts / 1 / show->執行JSP,該JSP如下所示:

<% DemoDefaultViewModel default = new DemoPresenter(request).getViewModel(DemoDefaultViewModel.class); %>

/ blog / posts / 1 / edit->執行一個JSP,該JSP的ViewModel如下所示:

<% DemoEditViewModel edit = new DemoPresenter(request).getViewModel(DemoEditViewModel.class); %>

我想保留一個簡單的解決方案,而沒有太多無關的內容。 當我在嚴格的預定義框架中工作時,我也不會太花哨-我只想找到一種很好的方法,將我所有的域邏輯從JSP移出到更可重用,可測試的Java類中。

[1] http://martinfowler.com/eaaDev/PresentationModel.html

檢查支柱。
我必須承認只使用過舊版本,但是“前端控制器” servlet的想法似乎就是您所追求的。 它是運行常見代碼和路由請求的特殊servlet。
它還具有可以在Web容器外部進行測試的操作。

從純JSP遷移到struts的那一天是我Web開發生涯中最美好的一天之一! 該項目開始變得井井有條,易於管理。

有很多MVC框架。 例如,Struts使用前端控制器servlet來根據所使用的資源將請求調度到類(控制器)。 該類處理請求並將結果發送到視圖(通常是jsp)。 模型是代表您的數據的任何類。 僅供參考,地圖不是框架。 僅將數據表示為MAP是可以的,但是很難維護。

在不了解您嚴格的框架的情況下,通常公認的良好做法是使您的業務邏輯集中並且獨立於任何框架。 僅將您的框架用於管道。 讓您的控制器在您的演示文稿和業務邏輯之間進行調解,這仍然很簡單。 將顯示數據放在正確的范圍內(幾乎總是在請求范圍內),因此您不必像示例中那樣具有腳本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM