Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 384|回复: 0

[设计模式学习]模型-视图-控制器入门实例

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-10-28 23:57:16 | 显示全部楼层 |阅读模式
    这是一个简单的web应用,可在JSP教学中展示mvc模式是如何运作的。 这个应用有两个主要任务:
       

       
    1、列出全部顾客的列表
       

       
    2、选择某个顾客时,列出其信息
        运行图:


       

      
       
      
       
       
         
       

       
       
      
      
        一、模型:Customer类和CustomerManager完成应用业务逻辑的建模
    1、Customer类作为一个javaBean,有四个性质,分别表示顾客的标识,顾客的名,顾客的姓和地址,是对真实世界的顾客概念的建模.

    1. package com.wrox.begjsp.ch17.mvc;
    2. public class Customer
    3. {
    4.     private String _id;
    5.     private String _firstName;
    6.     private String _lastName;
    7.     private String _address;
    8.     public Customer(String id, String firstName, String lastName, String address)
    9.     {
    10.         _id = id;
    11.         _firstName = firstName;
    12.         _lastName = lastName;
    13.         _address = address;
    14.     }
    15.     public String getAddress()
    16.     {
    17.         return _address;
    18.     }
    19.     public void setAddress(String address)
    20.     {
    21.         _address = address;
    22.     }
    23.     public String getFirstName()
    24.     {
    25.         return _firstName;
    26.     }
    27.     public void setFirstName(String firstName)
    28.     {
    29.         _firstName = firstName;
    30.     }
    31.     public String getLastName()
    32.     {
    33.         return _lastName;
    34.     }
    35.     public void setLastName(String lastName)
    36.     {
    37.         _lastName = lastName;
    38.     }
    39.     public String getId()
    40.     {
    41.         return _id;
    42.     }
    43.     public void set_id(String id)
    44.     {
    45.         _id = id;
    46.     }
    47. }
    复制代码
    2、web应用可以采用不同的方法来存储信息,最常用的方法是存储在一个数据库中,这个简单的例子没有使用数据库,而是通过CustomerManager类来模拟这种访问,作为模型层的扩展。

    1. package com.wrox.begjsp.ch17.mvc;
    2. import java.util.ArrayList;
    3. import java.util.List;
    4. public class CustomerManager
    5. {
    6.     public List getCustomers()
    7.     {
    8.         return generateCustomers();
    9.     }
    10.     private List generateCustomers()
    11.     {
    12.         List rv = new ArrayList();
    13.         for (int i = 0; i < 10; i++)
    14.         {
    15.             rv.add(getCustomer(String.valueOf(i)));
    16.         }
    17.         return rv;
    18.     }
    19.     public Customer getCustomer(String id)
    20.     {
    21.         return new Customer(id, id + "First", "Last" + id,
    22.             "123 Caroline Road Fooville");
    23.     }
    24. }
    复制代码
       此类提供了getCustomers()方法和getCustomer(String id)方法,分别返回顾客的列表(List对象)和某一顾客, 模拟数据库访问,从中可以看出,模型层关注的是当前的业务问题,而不是关心如何在视图中显示。 二、控制器
         这个应用中扮演控制器角色的是SimpleController,它收到浏览器的请求后,访问模型层得到业务数据,然后把它们“分配”到适当的视图。SimpleController是一个Servlet,执行SimpleController时需要一个参数来指出它要完成什么工作,在Web应用中,这种概念通常称为动作(action),另外SimpleController要在web.xml文件中注册,如下所示:
    <servlet>
    <servlet-name>controller</servlet-name>
    <servlet-class>com.wrox.begjsp.ch17.mvc.SimpleController</servlet-class>
    <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
    <servlet-name>controller</servlet-name>
    <url-pattern>/controller</url-pattern>
    </servlet-mapping> 这样可以有如下的调用:http://localhost:8080/mvc/controller?action=displaylist
    1. SimpleController类的源码如下:

    2. package com.wrox.begjsp.ch17.mvc;
    3. import java.io.IOException;
    4. import java.util.List;
    5. import javax.servlet.RequestDispatcher;
    6. import javax.servlet.ServletException;
    7. import javax.servlet.http.HttpServlet;
    8. import javax.servlet.http.HttpServletRequest;
    9. import javax.servlet.http.HttpServletResponse;
    10. public class SimpleController extends HttpServlet
    11. {
    12.     protected void doPost(HttpServletRequest request,
    13.         HttpServletResponse response) throws ServletException, IOException
    14.     {
    15.         String action = request.getParameter("action");
    16.         String jspPage = "/index.jsp";
    17.         if ((action == null) || (action.length() < 1))
    18.         {
    19.             action = "default";
    20.         }
    21.         if ("default".equals(action))
    22.         {
    23.             jspPage = "/index.jsp";
    24.         }
    25.         else if ("displaylist".equals(action))
    26.         {
    27.             CustomerManager manager = new CustomerManager();
    28.             List customers = manager.getCustomers();
    29.             request.setAttribute("customers", customers);
    30.             jspPage = "/displayList.jsp";
    31.         }
    32.         else if ("displaycustomer".equals(action))
    33.         {
    34.             String id = request.getParameter("id");
    35.             CustomerManager manager = new CustomerManager();
    36.             Customer customer = manager.getCustomer(id);
    37.             request.setAttribute("customer", customer);
    38.             jspPage = "/displayCustomer.jsp";
    39.         }
    40.         else if ("editcustomer".equals(action))
    41.         {
    42.             String id = request.getParameter("id");
    43.             CustomerManager manager = new CustomerManager();
    44.             Customer customer = manager.getCustomer(id);
    45.             request.setAttribute("customer", customer);
    46.             jspPage = "/editCustomer.jsp";            
    47.         }
    48.         dispatch(jspPage, request, response);
    49.     }
    50.     protected void dispatch(String jsp, HttpServletRequest request,
    51.         HttpServletResponse response) throws ServletException, IOException
    52.     {
    53.         if (jsp != null)
    54.         {
    55.             RequestDispatcher rd = request.getRequestDispatcher(jsp);
    56.             rd.forward(request, response);
    57.         }
    58.     }
    59.     protected void doGet(HttpServletRequest request,
    60.         HttpServletResponse response) throws ServletException, IOException
    61.     {
    62.         doPost(request, response);
    63.     }
    64. }
    复制代码
        displaylist动作只是SimpleController中实现的四个动作之一,displaylist动作首先实例化一个 CustomerManager对象,从而得到这个动作所需要的数据并将其加到请求中,最后,这个动作指定一个适当的路径,转到相应的视图页面:/displayList.jsp。 三、视图:displayList.jsp
    视图只负责显示控制器传过来的数据。代码如下: <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <HTML>
    <head>
       <title>Display Customer List</title>
    </head>
    <body> <table cellspacing="3" cellpadding="3" border="1" width="500">
        <tr>
           <td colspan="4"><b>Customer List</b></td>
        </tr>
        <tr>
           <td><b>Id</b></td>
           <td><b>First Name</b></td>
           <td><b>Last Name</b></td>
           <td><b>Address</b></td>
        </tr>
            <c:forEach var="customer" items="">
         <tr>
           <td>
              <a href="controller?action=displaycustomer&id="> </a>
           </td>
           <td></td>
           <td></td>
           <td></td>
         </tr>
          </c:forEach>
    </table>
    </body>
    </html> 四、其它的文件和视图页面请下载。
      
       
         
         
          
          

            
          

            
          
         
       

      


    源码下载:http://file.javaxxz.com/2014/10/28/235715937.zip
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-2-26 01:00 , Processed in 0.359978 second(s), 48 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表