`

实例讲解MVC-Model2实现

阅读更多
<p:colorscheme colors="#ffffff,#000000,#808080,#000000,#bbe0e3,#333399,#009999,#99cc00"> </p:colorscheme>
实例讲解MVC
我们以登录为例,讲解MVC
模式的运用

<p:colorscheme colors="#ffffff,#000000,#808080,#000000,#bbe0e3,#333399,#009999,#99cc00"> </p:colorscheme>
文字说明
    客户进入登陆界面(视图),利用用户名和密码来登录系统,跳转到Servlet(控制器),通过Servlet传递参数来JavaBean(模型),JavaBean通过验证后,采取跳转不同的界面,即没有查询到数据,则显示登录失败的页面(视图)。否则通过权限值的不同跳转到不同的权限界面(视图)。


 分析设计


<p:colorscheme colors="#ffffff,#000000,#808080,#000000,#bbe0e3,#333399,#009999,#99cc00">
  1. 1.数据库设计
  2. 2.MVC模式的分离
  3. 设计模式的选用
  • 1.为不同的服务设计设计接口(接口模式)
  • 2.共享数据库链接池(享元模式)
  • 3. 产生抽象类型的对象(工厂模式)
  • 4. JDBC中的桥接模式
  • 5.产生特定的Bean(生成器模式)
  • 6.通过不同的异常和属性值控制导向不同的方向(策略模式)
<p:colorscheme colors="#ffffff,#000000,#808080,#000000,#bbe0e3,#333399,#009999,#99cc00"></p:colorscheme>


    数据库设计
      数据库名:company
      表名:user
      user的字段:
           username:varchar(20) primary key
           password:varchar(20)
           priority:int default 0 //优先级的最低为0

MVC模式的分离
控制器:com.eimhe.controler.LoginAction

模型:com.eimhe.model.User
            com.eimhe.model.Query
            com.eimhe.model.QueryBeanFactory   
           com,eimhe.model.ConnectionPool
视图:errors.jsp
           login.jsp
           nonresult.jsp
           welcome.jsp
           welcomeadmin.jsp
           welcomemanage.jsp


为不同的服务设计设计接口(接口模式)
    主要的设计业务方法:query(:HttpServletRequest):User
    接口:
java 代码
 
  1. package com.eimhe.model;  
  2.   
  3. import java.sql.SQLException;  
  4.   
  5. import javax.servlet.http.HttpServletRequest;  
  6.   
  7. import com.eimhe.exception.FieldLengthException;  
  8.   
  9. public interface Query {  
  10.     public User query(HttpServletRequest request)throws SQLException,FieldLengthException;  
  11. }  
其中FieldLengthException的声明
java 代码
 
  1. package com.eimhe.exception;  
  2.   
  3. public class FieldLengthException extends Exception {  
  4.     public FieldLengthException(String message)  
  5.     {  
  6.         super(message);  
  7.     }  
  8. }  



共享数据库链接池(享元模式)
    类名:com.eimhe.model.ConnectionPool
    方法:public static Connection getConnection() throws SQLException;
    代码:
java 代码
 
  1. package com.eimhe.model;  
  2. import java.sql.Connection;  
  3. import java.sql.DriverManager;  
  4. import java.sql.SQLException;  
  5.   
  6. public class ConnectionPool {  
  7.     public static Connection getConnection()throws SQLException  
  8.     {  
  9.         try  
  10.         {  
  11.             Class.forName("com.mysql.jdbc.Driver");  
  12.             return DriverManager.getConnection("jdbc:mysql://localhost:3306/company","root","123456");  
  13.         }catch(ClassNotFoundException e)  
  14.         {  
  15.             System.err.println(e);  
  16.         }  
  17.         throw new SQLException();  
  18.       
  19.     }  
  20. }  


    产生抽象类型的对象(工厂模式)
    利用工厂方法来实例化抽象对象,我们采取内置类的方式来实现接口对象
    public class QueryBeanFactory {
      public static Query createQuery()
      {
     return new Query()
      {
       …….
      };
     }
}
实现代码:
java 代码
 
  1. package com.eimhe.model;  
  2.   
  3. import java.sql.CallableStatement;  
  4. import java.sql.Connection;  
  5. import java.sql.ResultSet;  
  6. import java.sql.SQLException;  
  7.   
  8. import javax.servlet.http.HttpServletRequest;  
  9.   
  10. import com.eimhe.exception.FieldLengthException;  
  11.   
  12. public class QueryBeanFactory {  
  13.     public static Query createQuery()  
  14.     {  
  15.         return new Query()  
  16.         {  
  17.             private Connection con;  
  18.             private CallableStatement call;  
  19.             private ResultSet resultSet;  
  20.             public User query(HttpServletRequest request)throws SQLException,FieldLengthException  
  21.             {  
  22.                 //JDBC桥接模式  
  23.                 con=ConnectionPool.getConnection();  
  24.                 call=con.prepareCall("");  
  25.                 resultSet=call.executeQuery();  
  26.                 User user=new User();  
  27.                 String username=request.getParameter("username");  
  28.                 String password=request.getParameter("password");  
  29.                 int uLen=username.length();  
  30.                 int pLen=password.length();  
  31.                 if(uLen==0 || uLen>20 || pLen==0 || pLen>20)  
  32.                 {  
  33.                     throw new FieldLengthException("Fields' length is error!");  
  34.                 }  
  35.                 if(!resultSet.next())  
  36.                 {  
  37.                     throw new SQLException("Sorry!query: non result!");  
  38.                 }  
  39.                 user.setUsername(username);  
  40.                 user.setPassword(password);  
  41.                 user.setPriority(resultSet.getInt("priority"));  
  42.                 return user;  
  43.             }  
  44.         };  
  45.     }  
  46. }  


<p:colorscheme colors="#ffffff,#000000,#808080,#000000,#bbe0e3,#333399,#009999,#99cc00"> </p:colorscheme>
JDBC中的桥接模式
  JDBC通过方法桥接对象:
DriverManager.getConnection() -> Connection.prepareCall()->CallableStatement.executeQuery()->ResultSet

产生特定的Bean(生成器模式)
    我们这里通过是用户名和密码的验证的方式来产生User对象,通过实现Query接口的query方法来实现User对象的生成。

通过不同的异常和属性值控制导向不同的方向
    若验证成功的话,通过优先数的高低定向到不同的页面。
    若验证有问题的话,没有结果的,抛出一个SQLException的异常,并传递信息。若是字符长度不符合的话,那么也会抛出一个FieldLengthException的异常。同样是说不同的异常有不同的页面给出!
LoginAction(控制器):
java 代码
 
  1. package com.eimhe.controler;  
  2.   
  3. import java.io.IOException;  
  4. import java.sql.SQLException;  
  5.   
  6. import javax.servlet.ServletException;  
  7. import javax.servlet.http.HttpServlet;  
  8. import javax.servlet.http.HttpServletRequest;  
  9. import javax.servlet.http.HttpServletResponse;  
  10.   
  11. import com.eimhe.exception.FieldLengthException;  
  12. import com.eimhe.model.Query;  
  13. import com.eimhe.model.QueryBeanFactory;  
  14. import com.eimhe.model.User;  
  15.   
  16. public class LoginAction extends HttpServlet {  
  17.   
  18.     /** 
  19.      * Constructor of the object. 
  20.      */  
  21.     public LoginAction() {  
  22.         super();  
  23.     }  
  24.   
  25.     /** 
  26.      * Destruction of the servlet. <br> 
  27.      */  
  28.     public void destroy() {  
  29.         super.destroy(); // Just puts "destroy" string in log  
  30.         // Put your code here  
  31.     }  
  32.   
  33.     /** 
  34.      * The doGet method of the servlet. <br> 
  35.      * 
  36.      * This method is called when a form has its tag value method equals to get. 
  37.      *  
  38.      * @param request the request send by the client to the server 
  39.      * @param response the response send by the server to the client 
  40.      * @throws ServletException if an error occurred 
  41.      * @throws IOException if an error occurred 
  42.      */  
  43.     public void doGet(HttpServletRequest request, HttpServletResponse response)  
  44.             throws ServletException, IOException {  
  45.   
  46.         doPost(request,response);  
  47.     }  
  48.   
  49.     /** 
  50.      * The doPost method of the servlet. <br> 
  51.      * 
  52.      * This method is called when a form has its tag value method equals to post. 
  53.      *  
  54.      * @param request the request send by the client to the server 
  55.      * @param response the response send by the server to the client 
  56.      * @throws ServletException if an error occurred 
  57.      * @throws IOException if an error occurred 
  58.      */  
  59.     public void doPost(HttpServletRequest request, HttpServletResponse response)  
  60.             throws ServletException, IOException {  
  61.         Query queryBean=QueryBeanFactory.createQuery();//工厂模式  
  62.         try  
  63.         {  
  64.             User user=queryBean.query(request);//生成器模式  
  65.             if(user.getPriority()==2)//策略模式  
  66.             {  
  67.                 response.sendRedirect("./welcomeadmin.jsp");  
  68.                 return;  
  69.             }  
  70.             else if(user.getPriority()==1)  
  71.             {  
  72.                 response.sendRedirect("./welcomemanager.jsp");  
  73.                 return;  
  74.             }  
  75.             response.sendRedirect("./welcome.jsp");  
  76.         }catch(FieldLengthException e)  
  77.         {  
  78.             System.err.println(e);  
  79.             response.sendRedirect("./nonresult.jsp");  
  80.         }catch(SQLException e)  
  81.         {  
  82.             System.err.println(e);  
  83.             response.sendRedirect("./nonresult.jsp");  
  84.         }  
  85.           
  86.     }  
  87.   
  88.     /** 
  89.      * Initialization of the servlet. <br> 
  90.      * 
  91.      * @throws ServletException if an error occure 
  92.      */  
  93.     public void init() throws ServletException {  
  94.         // Put your code here  
  95.     }  
  96.   
  97. }  


分享到:
评论

相关推荐

    Pro Spring MVC---Apress-2012

    - **Spring MVC 架构**:理解 MVC 模式如何与 Spring 集成,以及如何实现控制层和视图层。 - **Controller 实现**:创建和配置控制器类,定义请求映射和处理器方法。 - **View Resolver 配置**:设置视图解析器,以...

    mvc - redis队列dome

    **标题解析:** "mvc - redis队列dome" 暗示了这是一个关于使用Model-View-Controller(MVC)架构模式与Redis构建队列的示例项目。MVC是一种广泛应用于Web开发的设计模式,它将应用程序分为三个主要部分:模型、视图...

    MVC实例讲解

    下面通过一个音乐商店的实例来讲解MVC的实现过程。 概览 MVC模式的主要组成部分是模型(Model)、视图(View)和控制器(Controller)。模型负责数据的存储和访问,视图负责用户界面的渲染,控制器负责处理用户...

    spring-mvc-step-by-step

    本教程以英文形式呈现,深入浅出地讲解了Spring MVC的各个关键概念和技术。 1. **Spring MVC简介** Spring MVC是一种轻量级的模型-视图-控制器(MVC)框架,它允许开发者将业务逻辑、数据处理和用户界面分离,从而...

    mvc jsp servlet 实例

    标题“mvc jsp servlet 实例”揭示了本教程的核心内容,即关于Model-View-Controller(MVC)设计模式的实际应用,主要涉及到Java Web开发中的三大组件:Model、View和Controller。在这个实例中,开发者将学习如何...

    j2EE-MVC设计模式(内附ppt讲解,学习笔记和应用实例)

    MVC,即Model-View-Controller,是一种软件设计模式,常用于构建可维护性和可扩展性高的Web应用程序。在J2EE环境中,MVC模式是开发大型企业级应用的重要框架之一。它将应用程序的业务逻辑、用户界面和控制逻辑分离,...

    MyEclipse开发基于MVC 模式的WEB应用实例讲解

    ### MyEclipse 开发基于 MVC 模式的 WEB 应用实例讲解 #### 一、概述 MVC(Model-View-Controller)模式是一种常见的软件架构模式,尤其适用于Web应用程序的开发。它通过将应用程序分为三个核心组成部分来提高代码...

    JSP+Servlet讲解MVC实现原理(改良版)

    本文将详细讲解JSP+Servlet如何实现MVC(Model-View-Controller)架构的改良版原理。 首先,理解MVC模式至关重要。MVC是一种设计模式,用于分离应用程序的数据模型、用户界面和控制逻辑。Model代表业务数据和业务...

    ASP.NET+MVC+5+网站开发实例讲解

    ASP.NET MVC 5 是微软开发的一个强大的Web应用程序框架,它结合了ASP.NET Web Forms和ASP.NET MVC的优点,为开发者提供了一种模型-视图-控制器(Model-View-Controller)的架构模式,用于构建可维护、可扩展和高度...

    MVVM(Model-View-ViewModel)实例讲解

    它源自于MVC(Model-View-Controller)模式,但针对UI开发进行了优化,使得业务逻辑和界面表现更加解耦。 在MVVM模式中,有三个主要组成部分: 1. **Model(模型)**:这是应用的核心,包含实际的数据和业务逻辑。...

    JavaWeb开发实战宝典-model2

    在JavaWeb开发中,Model2模式是MVC(模型-视图-控制器)设计模式的一种实现,它在传统的JavaWeb应用程序中广泛使用。MVC模式是软件工程中用于分离业务逻辑、用户界面和数据管理的有效工具,使得代码更加模块化,易于...

    【ASP.NET编程知识】Asp.Mvc 2.0实现用户登录与注销功能实例讲解(2).docx

    ASP.NET MVC 2.0 实现用户登录与注销功能实例讲解 ASP.NET MVC 2.0 是一个基于模型视图控制器(MVC)模式的Web应用程序框架,它提供了一种灵活、可扩展的方式来构建Web应用程序。在这篇文章中,我们将讨论如何使用...

    Node-MVC-Framework-App:节点应用程序使用MVC模式

    在Web开发领域,Model-View-Controller(MVC)模式是一种广泛采用的设计模式,它将应用程序分为三个主要部分:模型(Model)、视图(View)和控制器(Controller),以实现业务逻辑、数据处理和用户界面的分离。...

    J2EE 经典实例详解(1-100)

    实例可能包含JSP脚本元素、表达式语言(EL)、自定义标签库(JSTL)以及Model-View-Controller(MVC)设计模式的应用。 3. **EJB开发**:EJB是J2EE的核心组件,用于构建可扩展、安全和事务性的后端业务逻辑。实例...

    Spring-MVC-course

    1. **MVC 模式**:Model-View-Controller 是一种软件设计模式,用于分离应用程序的数据模型、用户界面和业务逻辑。Spring MVC 将这些职责分配到不同的组件,使得代码更易于管理和测试。 2. **DispatcherServlet**:...

    Spring MVC 实例(附带详细讲解)

    在本实例中,我们将深入理解Spring MVC的基本概念,以及如何在一个实际项目中运用它。 首先,Apache Tomcat 是一个广泛使用的开源Java Servlet容器,它实现了Servlet和JavaServer Pages (JSP) 规范,是搭建Spring ...

    敏捷思维学习Ext.Net MVC源码--ExtNetMvcExample

    MVC模式(Model-View-Controller)是设计模式的一种,常用于Web开发,分离业务逻辑、视图呈现和用户交互控制。 3. **.NET Framework**:这是一个由Microsoft开发的全面的开发平台,包括.NET CLR(Common Language ...

    31重构 模式与重构 MVC实例

    提到.MVC(Model-View-Controller)框架,它是.NET平台上的一个重要部分,用于构建可维护的Web应用程序。MVC模式将应用程序逻辑分为三个主要组件:模型负责数据管理,视图呈现用户界面,控制器处理用户输入并协调...

    mvc-course

    该标题暗示我们讨论的主题与MVC(Model-View-Controller)模式有关,这是一种广泛应用于Web开发中的设计模式。MVC将应用程序的数据处理、用户界面和控制逻辑分离,使得代码更易于维护和扩展。在本课程中,我们将深入...

    (全)传智播客PHP就业班视频完整课程

    10-29 2 svn常用操作 实例讲解1 10-29 3 svn常用操作 实例讲解2 10-29 4 svn常用操作 实例讲解3 10-29 5 svn常用操作 实例讲解4 10-30 1 linux简介 10-30 2 虚拟机安装 linux安装 10-30 3 常用命令 远程控制软件使用...

Global site tag (gtag.js) - Google Analytics