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来进行

    开发了.

  • 相关阅读:
    【SpringMVC】数据校验时,抛出javax.validation.UnexpectedTypeException: HV000030: No validator could be found for type: java.util.Date.
    【SpringMVC】添加操作时返回400
    【c#】 使用Directory.GetFiles获取局域网中任意电脑指定文件夹下的文件
    【opencv】Java实现opencv 调用本地摄像头,实现人脸识别、人形识别、人眼识别
    【opencv】Java实现的opencv3.x版本后Highhui报错
    【opencv】Java+eclipse+opencv 环境搭建 helloword入门demo
    【微信小程序】--小程序中循环遍历(包括js中遍历和wxml中的遍历)
    【微信小程序】--bindtap参数传递,配合wx.previewImage实现多张缩略图预览
    linux命令:tail
    system()
  • 原文地址:https://www.cnblogs.com/mengyan/p/2672650.html
Copyright © 2011-2022 走看看