Model view controller 如何使用MVC模式开发JSP/Servlets Web应用程序?

Model view controller 如何使用MVC模式开发JSP/Servlets Web应用程序?,model-view-controller,jsp,servlets,Model View Controller,Jsp,Servlets,我正在开发一个JSP/Servlet web应用程序(无框架)。我想使用MVC模式。我将这样设计我的项目: 控制器:一个servlet,用于读取请求、提取值、与模型对象通信以及向JSP页面提供信息 查看:JSP页面 模型:Java类/Java bean。。等等 问题:Index.jsp是我的网站的起点(默认页面)。因此,Index.jsp成为解析请求的控制器。例如,以下请求: index.jsp?section=article&id=10 在index.jsp中解析如下: <di

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

  • 控制器:一个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
    转发或重定向到一个URL,该URL由控制器servlet覆盖,后者依次显示“默认”页面(似乎是
    frontpage.jsp

    也就是说,在正确的MVC方法中,JSP文件中应该有noscriptlet。当您需要在JSP文件中编写一些不能被taglibs(等等)或EL合理替换的原始Java代码时,特定的Java代码以任何方式都属于真正的Java类,比如Servlet、过滤器、Javabean等等


    关于自主开发的MVC方法,您可能会发现它非常有用。

    谢谢@BalusC。你的意思是我网站的首页应该是一个servlet,比如:/defaultservlet吗?当有人访问我的网站并只输入域xyz.com/?时,我是否应该做一些事情使“default servlet”成为默认页面?如果您想要一个真正的
    欢迎文件
    ,那么您可以保留
    index.jsp
    ,而是让它转发或重定向到所需的默认页面。不幸的是,
    欢迎文件不能是servlet。这一点至少应该清楚:您在JSP中编写的控制器逻辑不属于JSP。它属于servlet。