Java Web实战 | MVC案例:用户登录验证

简介: 本文结合图1的多层设计架构,以用户登录验证应用程序为例,说明如何将MVC模式应用于Web应用程序的开发,具体步骤如下所述。

640.jpg


640.png


■ 图1 多层架构示意图

01、创建数据表

在jdbc数据库中创建一个名为account的数据表,用于存放用户名和密码。建表语句如下:

640.png

02、创建实体类

创建一个实体类Account,用于封装用户名和密码信息。其作用就是MVC中的M(模型)。代码如文件1所示。

【文件1】Account.java

640.png

03、创建DAO接口和实现类

专注于数据访问功能的组件称为DAO

(Data Access Object,数据访问对象)。为了避免应用程序与特定的数据访问策略耦合在一起,一个良好的设计方案是数据访问组件以接口的形式暴露功能。图2展示了数据访问层的合理设计方案,业务逻辑对象本身不会处理数据访问,而是将数据访问任务委托给数据访问对象。业务逻辑对象通过接口来访问DAO组件。

640.png


■ 图2数据访问层的设计方案

这样做会有两个好处。第一,业务逻辑对象易于测试,因为它不再与特定的数据访问组件绑定在一起。第二,持久化方式的选择独立于DAO接口,只有数据访问相关的方法通过接口暴露。这样的设计更加灵活,并且切换数据访问层的实现技术不会对应用程序的其他部分产生影响。如果将数据访问层的实现细节渗透到应用程序的其他部分,那么整个应用程序将与数据访问层耦合在一起,从而使得设计僵化。

针对数据访问层,本例使用Druid数据库连接池。接下来,创建AccountDao接口及其实现类,规定用户登录时要执行的数据库操作。由于DAO负责数据的存取,它也可被视为MVC中的M(模型)。AccountDao接口的代码此处省略,下面给出接口的实现类代码,如文件2所示。
【文件2】AccountDaoImpl.java

3232adbda429f81933a170d99fa039f0.png

04、创建Service接口和实现类

业务逻辑层的Service组件用于处理用户请求,并返回处理结果,可以被视为MVC中的C(控制器)。业务逻辑层与数据访问层的设计思路类似,需要设计的是Service接口及其实现类。这里的Service接口代码简单,因此只给出Service实现类的代码,如文件3所示。
【文件3】AccountServiceImpl.java

640.png


640.png


如文件3所示,因为Service组件需要数据访问(DAO)组件提供的服务,所以第8行将数据访问对象AccountDao作为私有属性并实例化。用接口声明是一个良好的设计方案,这里需要注意的是,Service组件只需要一个能够提供AccountDao功能的组件,而非具体指明是哪个组件。如果用下面的代码来声明:

640.png


则这种声明语句指明了具体的组件,显式声明了当前Service组件要用到AccountDaoImpl组件完成任务,这样会造成两个组件的耦合性增强。

第8行的写法降低了组件间的耦合性,并且由于数据持久化的实现由AccountDaoImpl组件负责,独立于AccountDao组件,由此带来的另一个好处便是在满足AccountDao接口要求的情况下,可以灵活替换数据访问组件。

05、创建Servlet

Servlet用于接收用户的请求,并将请求参数封装后交给Service组件进一步处理,它也是MVC中的C(控制器)。创建Servlet的代码如文件4所示。

【文件4】LoginServlet.java

47cefd1cde48b74a5f760773653cd2b8.png


b4b23760f1b29f5ce6f130e1eec08acf.png

如文件4所示,第23~26行获取请求参数,并把它们封装到Account对象中。第28~37行完成用户是否可以正常登录的判断,从而跳转到对应的页面。
06、创建JSP

创建表示层组件JSP,它是MVC模式中的V(视图)。在src/main/webapp文件夹下创建名为login.jsp的JSP文件,设计用户登录界!

最后,可以利用浏览器查看程序运行的效果。本例主要向大家展示如何应用MVC设计模式开发多层架构的Web应用程序,对于数据库保存用户密码的加密问题,用户登录权限的判断问题等都没有涉及,大家可结合过滤器等知识自行尝试完成。

目录
相关文章
|
2月前
|
存储 监控 Java
JAVA线程池有哪些队列? 以及它们的适用场景案例
不同的线程池队列有着各自的特点和适用场景,在实际使用线程池时,需要根据具体的业务需求、系统资源状况以及对任务执行顺序、响应时间等方面的要求,合理选择相应的队列来构建线程池,以实现高效的任务处理。
155 12
|
4月前
|
jenkins Java 测试技术
如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例详细说明
本文介绍了如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例,详细说明了从 Jenkins 安装配置到自动构建、测试和部署的全流程。文中还提供了一个 Jenkinsfile 示例,并分享了实践经验,强调了版本控制、自动化测试等关键点的重要性。
143 3
|
4月前
|
存储 Java 关系型数据库
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践,包括连接创建、分配、复用和释放等操作,并通过电商应用实例展示了如何选择合适的连接池库(如HikariCP)和配置参数,实现高效、稳定的数据库连接管理。
111 2
|
4月前
|
Java 关系型数据库 数据库
面向对象设计原则在Java中的实现与案例分析
【10月更文挑战第25天】本文通过Java语言的具体实现和案例分析,详细介绍了面向对象设计的五大核心原则:单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些原则帮助开发者构建更加灵活、可维护和可扩展的系统,不仅适用于Java,也适用于其他面向对象编程语言。
76 2
|
5月前
|
Java 数据库
案例一:去掉数据库某列中的所有英文,利用java正则表达式去做,核心:去掉字符串中的英文
这篇文章介绍了如何使用Java正则表达式从数据库某列中去除所有英文字符。
130 15
|
5月前
|
安全 Java
Java多线程通信新解:本文通过生产者-消费者模型案例,深入解析wait()、notify()、notifyAll()方法的实用技巧
【10月更文挑战第20天】Java多线程通信新解:本文通过生产者-消费者模型案例,深入解析wait()、notify()、notifyAll()方法的实用技巧,包括避免在循环外调用wait()、优先使用notifyAll()、确保线程安全及处理InterruptedException等,帮助读者更好地掌握这些方法的应用。
54 1
|
5月前
|
jenkins Java 测试技术
如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例详细说明
【10月更文挑战第8天】本文介绍了如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例,详细说明了从 Jenkins 安装配置到自动构建、测试和部署的全流程。文中还提供了一个 Jenkinsfile 示例,并分享了实践经验,强调了版本控制、自动化测试等关键点的重要性。
75 5
|
16天前
|
关系型数据库 MySQL 数据库
基于Flink CDC 开发,支持Web-UI的实时KingBase 连接器,三大模式无缝切换,效率翻倍!
TIS 是一款基于Web-UI的开源大数据集成工具,通过与人大金仓Kingbase的深度整合,提供高效、灵活的实时数据集成方案。它支持增量数据监听和实时写入,兼容MySQL、PostgreSQL和Oracle模式,无需编写复杂脚本,操作简单直观,特别适合非专业开发人员使用。TIS率先实现了Kingbase CDC连接器的整合,成为业界首个开箱即用的Kingbase CDC数据同步解决方案,助力企业数字化转型。
75 5
基于Flink CDC 开发,支持Web-UI的实时KingBase 连接器,三大模式无缝切换,效率翻倍!
|
24天前
|
机器学习/深度学习 开发框架 API
Python 高级编程与实战:深入理解 Web 开发与 API 设计
在前几篇文章中,我们探讨了 Python 的基础语法、面向对象编程、函数式编程、元编程、性能优化、调试技巧以及数据科学和机器学习。本文将深入探讨 Python 在 Web 开发和 API 设计中的应用,并通过实战项目帮助你掌握这些技术。
|
5月前
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
324 3

热门文章

最新文章