我正在开发一个JSP / Servlet Web应用程序(没有框架)。我想使用 MVC 模式。我将像这样设计我的项目:
问题: Index.jsp是我网站上的起点(默认页面)。因此,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
有什么解决方案可以将请求从转发index.jsp到servlet,然后再返回到index.jsp?还是实现 MVC 目标的任何解决方案- servlet应该是控制器?
我正在考虑将 FrontPageController servlet设置 为默认页面,而不是 index.jsp ,但是我不知道这是否是一个完美的主意?
摆脱掉,index.jsp只让控制器servlet监听url- pattern感兴趣的特定对象即可。控制器本身应使用将请求转发到感兴趣的JSP页面RequestDispatcher。
url- pattern
RequestDispatcher
request.getRequestDispatcher("/WEB-INF/page.jsp").forward(request, response);
另外,您可以index.jsp转发或重定向到控制器servlet覆盖的URL,该URL依次显示“默认”页面(似乎是frontpage.jsp)。
frontpage.jsp
也就是说,在正确的MVC方法中,JSP文件中不应包含 任何 脚本 。每当您需要在JSP文件中编写一些原始Java代码,而这些代码无法被taglibs(JSTL等)或EL 合理替代时,则特定的Java代码就可以以任何方式属于真正的Java类,例如Servlet,过滤器,Javabean等。