zoukankan      html  css  js  c++  java
  • JavaWeb之MVC设计模式

    时间:2016-11-26 16:22

    ——MVC


    图片


        MVC模式(Model - View - Controller)是软件工程中的一种架构模式,把软件系统分为三个基本部分:
            模型(Model)、视图(View)、控制器(Controller)

        MVC模式最早为Trygve Reenskaug提出,为施乐帕罗奥多研究中心(Xerox PARC)的Smalltalk语言发明的一种软件设计模式。

        MVC对程序的后期维护和扩展提供了方便,并且使程序某些部分的重用提供了方便,而且MVC也使程序简化,更加直观。

        控制器(Controller):
            Servlet
            对请求进行处理,负责请求转发。
        视图(View):
            JSP
            界面设计人员进行图形界面设计。
        模型(Model):
            JavaBean
            编写程序应用的功能(实现算法等)、数据库管理。

        MVC并不是Java所独有的,几乎所有的B/S结构的软件都采用了MVC设计模式,但是要注意,MVC在B/S结构软件中并没有完全实现,例如在今后的B/S软件中并不会有事件驱动。




    ——JavaWeb与MVC

        JavaWeb经历了JSP Model1一代、JSP Model1二代、JSP Model2三个时期。
        具有特定功能的Java类,位于模型层。(po包,dao包,bl包'service包')

    1、JSP Model1第一代
        JSP Model1是JavaWeb早期的模型,它适合小型Web项目,开发成本低。
        JSP Model1第一代时期,服务器端只有JSP页面,所有的操作都在JSP页面中,连访问数据库的API也在JSP页面中完成,也就是说,所有的东西都藕合在一起,对后期的维护和扩展极为不利。

    图片


    2、JSP Model1第二代
        JSP Model1第二代有所改进,把业务逻辑的内容放到了JavaBean中,而JSP页面负责显示以及请求调度的工作,虽然第二代比第一代好了一些,但JSP还是做了过多的工作,JSP中把视图工作和请求调度(Controller)的工作耦合在一起了。

    图片


    3、JSP Model2
        JSP Model2模式已经可以清晰的看到MVC完整的结构了。

        1)JSP:视图层,用来和用户打交道,负责接收需要处理的数据,以及显示数据给用户。
        2)Servlet:控制层:负责找到合适的业务模型对象来处理业务逻辑,转发到合适的师视图。
        3)JavaBean:模型层,完成具体的业务工作,例如:开户,转账等。

        JSP Model2适合多人合作开发大型的Web项目,各司其职,互不干涉,有利于开发中的分工,有利于组件的重用,但是,Web项目的开发难度加大,同时对开发人员的技术要求也更高了。

        结构图:

            图片



    ——JavaWeb三层架构

        我们常说的三层架构是JavaWeb提出的,也就是说这是JavaWeb独有的。
        所谓三层架构是视图层(Web层)、业务逻辑层(Business Logic)以及数据访问层(Data Access)。

            *   Web层:
                    Servlet、JSP
                    包含JSP和Servlet等与Web相关的内容,例如Request、Response、Session、ServletContext。
            *   业务层:
                    Service
                    例如登录、注册。
                    业务层中不包含JavaWeb API,它只关心业务逻辑。
                    因为如果包含了Web API,则无法在C/S中使用该业务层。
                    一旦业务逻辑与Web层挂钩,只能在Web层完成逻辑实现。
            *   数据层:(持久层)
                    DAO层,Database Access Object。
                    封装了对数据库的访问细节,例如对数据库的增删改查。
                    所有对数据库的操作,不能跳出DAO,因为一旦更换数据库,则牵扯到业务层等代码。

            *   实体类:
                    JavaBean

        需要注意的是,在业务层中不能出现JavaWeb API,例如request、response等,也就是说,业务层代码是可重用的,甚至可以用用到非Web环境中,业务层的每个方法都可以理解成一个万能的,例如转账业务方法,业务层依赖数据层,而Web层依赖业务层。


        分层架构:
            基于MVC,将JavaBean分为了业务层和数据层。

            图片



    ——Hello World

    图片

    1、com.wyc.dao

        public class UserDao {
            /*
             * 查询得到数据库中的数据之后,封装到User对象中,然后返回。
             */
            public User find(){
                return new User("zhangsan", "123");
            }
        }

    2、com.wyc.domain
        /**
         * 将数据库中查询到的结果保存到这个对象中
         * @author 31067
         *
         */
        public class User {
            private String username;
            private String password;
            ....
        }

    3、com.wyc.service
        public class UserService {
            //service层依赖dao层
            private UserDao userDao = new UserDao();
            //service层的查询,需要使用dao来完成。
            public User find(){
                return userDao.find();
            }
        }

    4、com.wyc.web.servlet
        public class UserServlet extends HttpServlet {
            public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
                /*
                 * 在Servlet中依赖service,然后通过service完成功能,把结果保存到request中,然后转发到JSP页面进行显示
                 */
                UserService userService = new UserService();
                User user = userService.find();
     
                request.setAttribute("user", user);
                //请求转发只能使用相对路径
                request.getRequestDispatcher("show.jsp").forward(request, response);
                System.out.println(request.getContextPath() + "/show.jsp");
            }
        }

    5、index.jsp
    <body>
        <a href="${pageContext.request.contextPath }/UserServlet">dianji</a>
    </body>



    6、show.jsp

    <body>
        姓名:${user.username }
        密码:${user.password }
    </body>


        流行框架:2016年11月26日16:21:32
            SSH:
                Struts2 + Spring + Hibernate

            SpringMVC

            SSM

  • 相关阅读:
    android driver开发常见的英文缩写
    简析quakeIII中利用链表实现的内存管理(1)
    链表的建立
    boson netsim5.31平台上组建交换式网络
    第六周周记
    价值观作业
    C语言的知识与能力的自评
    学习进度表
    Web表格部分内容
    线性表部分知识
  • 原文地址:https://www.cnblogs.com/wwwwyc/p/6375305.html
Copyright © 2011-2022 走看看