2010-04-04 60 views
8

我正在開發一個JSP/Servlet Web應用程序(無框架)。我想使用MVC模式。我要設計我的項目是這樣的:如何使用MVC模式開發JSP/Servlets Web App?

  1. 控制器:一個servlet讀取請求,提取值,與模型對象進行通信,信息提供給JSP頁面。
  2. 查看:JSP頁面。
  3. 型號:Java類/ Java組件..等

問題:Index.jsp是在我的網站上的起點(默認頁面)。所以,Index.jsp成爲解析請求的控制器。例如,以下請求:

index.jsp?section=article&id=10 

在index.jsp中被解析如下:

<div class="midcol"> 
<!-- Which section? --> 
<%String fileName = request.getParameter("section"); 
if (fileName == null) { 
fileName = "WEB-INF/jspf/frontpage.jsp"; 
} else { 
fileName = "WEB-INF/jspf/" + fileName + ".jsp"; 
} 
%> 
<jsp:include page='<%= fileName%>' /> 
</div> 

在這裏,我不能強制servlet來是控制器,因爲index.jsp是控制器因爲這是出發點。

是否有任何解決方案將請求從index.jsp轉發到servlet,然後回到index.jsp?或者任何能夠實現目標的解決方案 - servlet應該是控制器?

我想製作FrontPageController的servlet爲默認頁面,而不是的index.jsp的,但我不知道這是否是一個完美的主意?

回答

11

擺脫index.jsp,讓控制器servlet在特定的url-pattern上聆聽感興趣的內容。控制器本身應該使用RequestDispatcher將請求轉發到感興趣的JSP頁面。

request.getRequestDispatcher("/WEB-INF/page.jsp").forward(request, response); 

或者你可以讓index.jsp轉發或重定向到由控制器servlet這又顯示了「默認」頁面(這似乎是frontpage.jsp)覆蓋的URL。

也就是說,在正確的MVC方法中,您應該在JSP文件中使用scriptlets。無論何時您需要在JSP文件中編寫一些無法由taglib(如JSTL等)或EL進行合理替換的原始Java代碼,那麼特定的Java代碼以任何方式屬於真正的Java類,如Servlet,過濾器,Javabean等等。

關於本土MVC方法,您可能會發現this answerthis article也很有用。

+0

Thanks @BalusC。你的意思是第一段我的網站的頭版應該是一個servlet,例如:/ default-servlet?當有人訪問我的網站並進入域xyz.com/時,我應該做些什麼來使「default-servlet」成爲默認頁面? – Abdullah 2010-04-05 00:52:06

+1

如果你想要一個真正的'welcome-file',那麼你可以保留'索引。jsp',而是讓它轉發或重定向到所需的默認頁面。不幸的是,'welcome-file'不能成爲一個servlet。至少應該清楚這一點:您在JSP中編寫的控制器邏輯不屬於JSP。它屬於servlet。 – BalusC 2010-04-05 05:18:26