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应用程序,对于数据库保存用户密码的加密问题,用户登录权限的判断问题等都没有涉及,大家可结合过滤器等知识自行尝试完成。

目录
相关文章
|
11月前
|
存储 人工智能 算法
从零掌握贪心算法Java版:LeetCode 10题实战解析(上)
在算法世界里,有一种思想如同生活中的"见好就收"——每次做出当前看来最优的选择,寄希望于通过局部最优达成全局最优。这种思想就是贪心算法,它以其简洁高效的特点,成为解决最优问题的利器。今天我们就来系统学习贪心算法的核心思想,并通过10道LeetCode经典题目实战演练,带你掌握这种"步步为营"的解题思维。
|
11月前
|
安全 Java 开发者
告别NullPointerException:Java Optional实战指南
告别NullPointerException:Java Optional实战指南
427 119
|
12月前
|
人工智能 Java API
Java AI智能体实战:使用LangChain4j构建能使用工具的AI助手
随着AI技术的发展,AI智能体(Agent)能够通过使用工具来执行复杂任务,从而大幅扩展其能力边界。本文介绍如何在Java中使用LangChain4j框架构建一个能够使用外部工具的AI智能体。我们将通过一个具体示例——一个能获取天气信息和执行数学计算的AI助手,详细讲解如何定义工具、创建智能体并处理执行流程。本文包含完整的代码示例和架构说明,帮助Java开发者快速上手AI智能体的开发。
3710 8
|
人工智能 Java API
Java与大模型集成实战:构建智能Java应用的新范式
随着大型语言模型(LLM)的API化,将其强大的自然语言处理能力集成到现有Java应用中已成为提升应用智能水平的关键路径。本文旨在为Java开发者提供一份实用的集成指南。我们将深入探讨如何使用Spring Boot 3框架,通过HTTP客户端与OpenAI GPT(或兼容API)进行高效、安全的交互。内容涵盖项目依赖配置、异步非阻塞的API调用、请求与响应的结构化处理、异常管理以及一些面向生产环境的最佳实践,并附带完整的代码示例,助您快速将AI能力融入Java生态。
1682 12
|
Java 开发者
Java并发编程:CountDownLatch实战解析
Java并发编程:CountDownLatch实战解析
679 100
|
存储 前端开发 Java
【JAVA】Java 项目实战之 Java Web 在线商城项目开发实战指南
本文介绍基于Java Web的在线商城技术方案与实现,涵盖三层架构设计、MySQL数据库建模及核心功能开发。通过Spring MVC + MyBatis + Thymeleaf实现商品展示、购物车等模块,提供完整代码示例,助力掌握Java Web项目实战技能。(238字)
1348 0
|
数据采集 JSON Java
Java爬虫获取1688店铺所有商品接口数据实战指南
本文介绍如何使用Java爬虫技术高效获取1688店铺商品信息,涵盖环境搭建、API调用、签名生成及数据抓取全流程,并附完整代码示例,助力市场分析与选品决策。
|
Java
Java中需要注意的一些案例
Java中需要注意的一些案例
242 0
|
11月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
588 1