当前位置 : 主页 > 编程语言 > java >

model-view-controller – 如何使用MVC模式开发JSP / Servlets Web App?

来源:互联网 收集:自由互联 发布时间:2021-06-25
我正在开发一个JSP / Servlet Web应用程序(没有框架).我想使用MVC模式.我打算像这样设计我的项目: Controller:一个servlet,它读取请求,提取值,与模型对象通信并向JSP页面提供信息. 查看:J
我正在开发一个JSP / Servlet Web应用程序(没有框架).我想使用MVC模式.我打算像这样设计我的项目:

> Controller:一个servlet,它读取请求,提取值,与模型对象通信并向JSP页面提供信息.
>查看:JSP页面.
>模型:Java类/ Java Bean等.等

问题: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,但我不知道它是否是一个完美的主意?

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

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

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

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

关于本土MVC方法,您可能会发现this answer和this article也很有用.

上一篇:JSP 过滤器
下一篇:欢迎页jsp
网友评论