如何使用MVC模式开发JSP/Servlets Web App?

问题描述:

我正在开发一个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的,但我不知道这是否是一个完美的主意?

摆脱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