一尘不染

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

jsp

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

  1. 控制器 :一个Servlet,它读取请求,提取值,与模型对象进行通信并将信息提供给JSP页面。
  2. 查看 :JSP页面。
  3. 型号 :Java类/ Java Beans等

问题: 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?还是实现 MVC 目标的任何解决方案-
servlet应该是控制器?

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


阅读 522

收藏
2020-06-08

共1个答案

一尘不染

摆脱掉,index.jsp只让控制器servlet监听url- pattern感兴趣的特定对象即可。控制器本身应使用将请求转发到感兴趣的JSP页面RequestDispatcher

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

另外,您可以index.jsp转发或重定向到控制器servlet覆盖的URL,该URL依次显示“默认”页面(似乎是frontpage.jsp)。

也就是说,在正确的MVC方法中,JSP文件中不应包含 任何 脚本
。每当您需要在JSP文件中编写一些原始Java代码,而这些代码无法被taglibs(JSTL等)或EL
合理替代时,则特定的Java代码就可以以任何方式属于真正的Java类,例如Servlet,过滤器,Javabean等。

2020-06-08