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

Abd*_*lah 9 model-view-controller jsp servlets

我正在开发一个JSP/Servlet Web应用程序(没有框架).我想使用MVC模式.我打算像这样设计我的项目:

  1. 控制器:一个servlet,它读取请求,提取值,与模型对象通信并向JSP页面提供信息.
  2. 查看:JSP页面.
  3. 型号:Java Classes/Java Beans ..等

问题: Index.jsp是我网站的起点(默认页面).因此,Index.jsp成为解析请求的控制器.例如,以下请求:

index.jsp?section=article&id=10
Run Code Online (Sandbox Code Playgroud)

在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>
Run Code Online (Sandbox Code Playgroud)

在这里,我不能强制servlet成为一个控制器,因为这index.jsp是控制器,因为它是起点.

是否有任何解决方案将请求转发index.jsp到servlet然后返回index.jsp?或任何实现MVC目标的解决方案- servlet应该是控制器?

我正在考虑将FrontPageController servlet作为默认页面而不是index.jsp,但我不知道它是否是一个完美的主意?

Bal*_*usC 12

摆脱index.jsp并让控制器servlet监听特定url-pattern的兴趣.控制器本身应该使用请求转发到感兴趣的JSP页面RequestDispatcher.

request.getRequestDispatcher("/WEB-INF/page.jsp").forward(request, response);
Run Code Online (Sandbox Code Playgroud)

或者,您可以index.jsp转发或重定向到控制器servlet所覆盖的URL,该控制器servlet又显示"默认"页面(似乎是frontpage.jsp).

也就是说,在正确的MVC方法中,JSP文件中 应该有scriptlet.每当您需要在JSP文件中编写一些原始Java代码时,无法通过taglibs(JSTL等)或EL 合理地替换它们,那么特定的Java代码在任何方式都属于真正的Java类,如Servlet,过滤器,Javabean等.

关于本土的MVC方法,您可能会发现这个答案本文也很有用.