zoukankan      html  css  js  c++  java
  • java MVC设计模式探究——mvc在j2ee中的应用

    一、MVC设计模式在java应用程序中的应用

     

     

     

     

     

    二、MVC设计模式在网络中的应用

    1. 问题出现

    如果是要开发一个在线图书借阅系统,比如说是集美大学图书馆的借阅系统,这个系统

    希望被做成B/S模式的,用户只要有浏览器就可以使用这个系统.

    那么,在开发语言方面,我们可以选择使用纯JSP来开发.

    OK. 如果你选用纯JSP来开发,那么对于一个图书查询功能来说,你可能会这样实现:

    在一个JSP页面中,比如叫BookSearch.jsp中,你放置了一个表单,用户在这个页面中

    填写图书查询关键字,并提交这个表单,这个表单提交到自身页面,即BookSearch.jsp

    进行处理.BookSearch.jsp会在初始化页面时进行判断,如果有接收到用户提交的查询

    关键字,则查询数据库,并把查询结果显示出来.如果没有,则只显示图书查询表单.即,

    整个完整的业务功能流程是:

    (提交查询请求)              (拦截请求)
    BookSearch.jsp <---->     BookSearch.jsp  
    (显示查询结果)            (执行业务逻辑)

    如果你用这种方式完成了整个系统.那么,如果现在客户----集大图书馆希望除了B/S外,

    还有个客户端,即桌面应用程序Application, 你便会发现,只为了多一个Application客

    户端,你却基本上要重写这个系统.因为你之前写的那些jsp页面对于你写Application没

    有什么帮助,代码无法重用.

    2. 什么是MVC? 为什么要使用MVC?

    如果我们使用MVC模式来开发,那么,以上代码无法重用的问题便迎刃而解.

    M: Model,即模型,负责业务逻辑部分,含执行业务逻辑部分和业务对象部分,一般为普通

       Java类或EJB

    V: View,即视图,负责呈现在用户面前的部分,一般为JSP页面.

    C: Controller,即控制器,负责整个流程的控制,一般为Servlet.

    MVC就是视图、控制器、模型相分离的一种开发模式。

    如果用MVC模式来实现图书查询功能,那便会是这样的:

    在一个JSP页面中用户提交图书查询请求,Servlet拦截这个请求,并转发到相应的Java类/

    EJB进行图书信息查询. 执行完图书查询后,返回查询结果给Servlet. Servlet把查询结果

    传给JSP,JSP显示查询结果.

    即流程为:

    (提交查询请求)             (拦截请求/C)        (执行业务逻辑)
    BookSearch.jsp(V) <---->    Servlet(C)  <--->   普通Java类/EJB(M)
    (显示查询结果)             (转发到JSP)

    如果是基于以上MVC模式实现,那么,如果此时希望系统多一个Application的客户端,

    则只需要添加C和V部分即可,M部分可以代码重用,大大提高工作效率.

    除了代码重用外,MVC还可以让逻辑更加清晰,各个组件都在实现什么功能非常清楚----

    V作视图,C作控制器,M执行业务逻辑,这样对开发效率也有非常大的提高.试想一下,如果

    是像以上的纯JSP实现方式那样,把MVC混合在一个.jsp中,那么调试维护都是很困难的.

    3. MVC模式的具体实现

    在具体的实现上,View一般为JSP页面,它包含提交请求的页面(图书查询页面)和业务逻

    辑执行结果的显示页面(查询结果页面).这两个页面,有时可以集合成一个页面.JSP页面

    提交业务逻辑执行请求给Servlet,Servlet从普通Java类/EJB取得返回结果并返回给JSP,

    组织返回结果显示给用户. JSP只负责显示信息,不处理业务逻辑.

    在JSP页面中,我们可以使用scriptlet,即嵌入在jsp页面中的java代码,控制组织显示界面
    .

    但我认为这不是一个好的选择.因为,如果网页美工与Java程序员不是同一个人,而且美工

    不懂Java(虽然俺还没有真的见过这种情况,现在很多小公司都是前后台同一个人,即网页

    美工同时也是Java程序员),那么,面对在.jsp页面中的一大堆Java代码,美工人员会很头疼
    .

    而且,假设前后台开发人员不分离,那么在一个页面中调试与维护一个嵌入大量代码的jsp

    页面也是很麻烦的, 比如.jsp中的

    <%
        }
    %>

    多了,总让人看了头晕. 更好的选择是使用TabLib,如JSTL。 使用JSTL,可以把形如

    <%
       if() {
          ....
       }
    %> 的scriptlet变成

    <c:if ****>

    之类的标签,这样对于jsp代码的阅读、调试与维护非常有利。如果在JSTL的基础上加上JS
    P2.0

    的表达式语言(Expression Language),则更进一步有利于写出清晰的JSP代码. 以下是一


    JSTL+ EL的例子:

        <c:if test="${!empty NotFoundMsg}">
            <c:out value="<BR><font color=red>${NotFoundMsg}</font><BR>"
                                                 escapeXml="false" default=""/>
        </c:if>
        (如果参数NotFoundMsg不为空,则显示参数NotFoundMsg的内容).

    以下提到的Struts中,有非常丰富的标签,那些标签基本上都覆盖了JSTL.

    另外,在jsp页面中嵌入大量的CSS和Javascript代码,我认为也不是一个好的选择,同样的,

    我认为分离和CSS和Javascript是更好的选择,分离出他们二者会让jsp代码各清晰,也各有

    利于CSS代码和Javascript代码的复用.


    Controller则一般为Servlet, Servlet拦截JSP提交的请求,并把请求转发到相应的Java

    类/EJB上进行执行业务逻辑, 然后把Java类返回的结果,传给JSP.


    Model一般为普通Java类/EJB,实现业务逻辑.这些普通Java类/EJB接收Servlet传过来的参

    数,并由此执行业务逻辑,并把结果返回给Servlet. 目前, 大部分的中小项目都不使用EJB

    了,EJB似乎越来越冷,甚至现在有一个口号叫: "J2EE without EJB",不过,以前EJB是J2EE

    的核心.与EJB越来越冷相对的,Hibernate等ORM框架正在越来越热.


    除了最原始的JSP+Servlet+Java类的实现外,现在还有很多的MVC框架,像Struts,WebWorks

    等.其中,在中国现在最流行的是Struts框架,现在已经有越来越多的公司用Struts来进行

    开发了.

  • 相关阅读:
    Java RunTime Environment (JRE) or Java Development Kit (JDK) must be available in order to run Eclipse. ......
    UVA 1597 Searching the Web
    UVA 1596 Bug Hunt
    UVA 230 Borrowers
    UVA 221 Urban Elevations
    UVA 814 The Letter Carrier's Rounds
    UVA 207 PGA Tour Prize Money
    UVA 1592 Database
    UVA 540 Team Queue
    UVA 12096 The SetStack Computer
  • 原文地址:https://www.cnblogs.com/mengyan/p/2672650.html
Copyright © 2011-2022 走看看