Java EE 应用与 Spring MVC简介

什么是JavaEE(j2ee)?

javaee是一套用于开发大型企业级应用的标准和规范。它定义了组件模型和各种API。

JavaEE的分层模型

JavaEE通常采用多层架构,将应用的关注点清晰地分离,我们这里介绍的层级划分为:

  • Domain Object(领域对象)层:这一层是传统的Java对象,用来承载系统的数据和状态。
  • DAO(数据访问对象)层:负责实现对数据库的创建、查询、更新和删除等原子操作。
  • Service(业务逻辑)层:包含应用程序的核心业务逻辑,它协调并调用DAO层来完成复杂的业务流程。
  • Controller(控制器)层:接受用户请求,调用Service层来处理业务逻辑,并将处理结果转发给表现层组件。
  • View(表现层):收集用户的请求并显示处理结果。

JavaEE应用的组件

应用的组件可以分为以下三类:

  • 表现层组件:主要负责收集用户输入数据或显示系统状态。最常用的表现层技术是JSP
  • 控制器组件:负责调用业务逻辑方法,处理用户请求。
  • 业务逻辑组件:这是系统的核心组件,实现系统的业务逻辑。业务逻辑方法仅仅负责实现业务逻辑,不应进行数据库访问
  • DAO组件:对应数据库的原子操作。
  • 领域对象组件:抽象系统的对象模型。

Spring MVC简介

MVC是企业级应用开发中最核心的架构思想,也是上面提到的分层中的关键模式。

MVC思想与优势

MVC(Model - View - Controller)是一种软件设计模式,将应用程序分为三个相互独立的组件。分别是:

  1. Model(模型):负责管理应用程序的数据和业务逻辑。它代表了应用的状态。
  2. View(视图):负责展示Model中的数据,即用户界面(UI)
  3. Controller(控制器):负责接受用户输入(请求),调用model来处理业务逻辑,并选择合适的View来展示结果。

MVC的三个组件说明能将逻辑分离,使得分工合作明确,并能降低复杂性,快速响应变化;具有强大的灵活性与复用性。

Spring MVC

Spring MVC是Spring框架中的一个全功能MVC模块,是基于MVC思想实现的一个具体框架。它提供了一个DispatcherServlet作为前端控制器来分配请求

DispatcherServlet的作用

DispatcherServlet被称为“前端控制器”,因为它能统一入口并分派请求。所有的请求都先经过它,再由它分发给对应的Controller。

配置DispatcherServlet

DispatcherServlet是一个Servlet,因此使用时需要将它配置到Web应用的部署描述符web.xml文件中。具体如下:

<servlet> <servlet-name>springmvc</servlet-name> <!-- 前端控制器 --> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 前端控制器 --> <init-param> <!-- contextConfigLocation是参数名称,该参数的值包含SpringMVC的配置文件路径 --> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc-servlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>

Spring MVC执行流程

  1. 用户向服务器发送请求。
  2. 前端控制器(DispatcherServlet)截获请求,对URL统一进行解析。
  3. DispatcherServlet调用HandlerMapping(处理器映射器),根据URL获取配置的相关对象。
  4. DispatcherServlet根据获得的Handler,选择一个合适的HandlerAdapter(处理器适配器),调用并执行获取到的Handler方法。(使用消息转换、数据转换、数据格式化和数据验证的机制
  5. Handler执行完后,向DispatcherServlet返回一个封装了模型数据视图名称ModelAndView对象
  6. 根据返回的对象,选择一个合适的ViewResolver,负责解析视图名,确定最终要使用的视图对象。
  7. ViewResovler结合Model和View来渲染视图。
  8. DispatcherServlet将渲染好的视图返回给客户端。

简单总结就是:

用户发送请求 ==>DispatcherServlet接受请求 ==> HandlerMapping 找到对应的Controller ==> DispatcherServlet 调用 HandlerAdapterv执行Controller ==> Controller执行完返回 ModelAndView ==> ViewResolver 解析视图名得到视图对象 ==> View渲染模型数据 ==> 响应给用户

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1004972.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何使用 VSCode 编写 C# 代码?

如何使用 VSCode 编写 C# 代码&#xff1f; 在 VSCode 中编写 C# 代码的完整步骤如下&#xff1a; 一、环境准备 1. 安装 .NET SDK 访问 dotnet.microsoft.com 下载并安装最新版 .NET SDK 验证安装&#xff1a;打开终端&#xff0c;输入 dotnet --version 2. 安装 VSCod…

【图像处理】基于matlab粒子群算法PSO优化匹配追踪图像稀疏分解【含Matlab源码 14687期】

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到海神之光博客之家&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49…

“AI写的论文,参考文献靠谱吗?”-虎贲等考AI:所有参考文献都来自知网/维普可查

一、引言&#xff1a;AI 论文参考文献的信任危机与破局点随着人工智能写作工具在学术领域的普及&#xff0c;“AI 生成论文的参考文献是否靠谱” 成为科研工作者、学生群体关注的核心议题。部分早期 AI 工具因缺乏权威数据源支撑&#xff0c;曾出现参考文献虚假标注、链接失效、…

别让孩子视力提早“透支” ,这份护眼指南请收好

如今&#xff0c;电子产品成了孩子的“日常陪伴”&#xff0c;线上学习、娱乐样样离不开&#xff1b;叠加堆积如山的作业与课外辅导&#xff0c;双重压力下&#xff0c;越来越多孩子的视力早早亮起“红灯”——近视低龄化、高发化的趋势愈发严峻&#xff0c;不少家长刚上小学的…

Day37 模型可视化与推理

一、模型可视化 1. nn.model自带的方法 # nn.Module 的内置功能&#xff0c;直接输出模型结构 print(model) MLP((fc1): Linear(in_features4, out_features10, biasTrue)(relu): ReLU()(fc2): Linear(in_features10, out_features3, biasTrue) ) # nn.Module 的内置功能&a…

Qt 多线程编程: moveToThread 模式讲解

目录 Qt 多线程编程: moveToThread 模式 核心理念 旧做法&#xff1a;继承 QThread 推荐&#xff1a;moveToThread 实现步骤图解 1. 定义 Worker 2. 实例化 QThread 3. 移动对象 4. 连接与启动 最佳实践与常见陷阱 Qt 多线程编程: moveToThread 模式 这是 Qt 官方推…

不是护眼灯不好,而是眼调节训练灯更懂孩子近视的防控需求

“又揉眼睛了&#xff1f;是不是看不清黑板了&#xff1f;”每天傍晚&#xff0c;不少家长看到孩子揉眼、眯眼的动作&#xff0c;都会心头一紧。为了守护孩子的“心灵窗户”&#xff0c;护眼灯成了书桌前的标配。可即便换了好几盏宣称“无频闪、低蓝光”的护眼灯&#xff0c;孩…

网站域名:关键的战略资产

网站域名:关键的战略资产 引言 在数字化时代,网站域名已经成为企业、个人乃至政府机构的战略资产。它不仅是网络身份的象征,更是连接用户和内容的重要桥梁。本文将深入探讨网站域名的概念、重要性、选择标准以及管理策略。 一、什么是网站域名? 网站域名是由一串由字母…

n8n第十节 把Markdown格式的会议纪要发到企微

朋友们&#xff0c;有没有感觉整理纪要格式很乱&#xff0c;发到企微群里还得截图&#xff0c;别人看着也费劲。今天教你——用n8n工作流&#xff0c;把AI生成的Markdown格式会议纪要&#xff0c;原汁原味直接发到企业微信&#xff01;最大亮点&#xff1a;直接传Markdown格式&…

Pandas DataFrame:数据处理的强大工具

Pandas DataFrame:数据处理的强大工具 引言 在数据分析领域,Pandas DataFrame 是一个不可或缺的工具。它是 Python 中一个强大的数据分析库,能够帮助我们高效地处理和分析数据。本文将详细介绍 Pandas DataFrame 的概念、特点、使用方法以及在实际应用中的优势。 什么是 …

jQuery 捕获详解

jQuery 捕获详解 引言 在网页开发中,JavaScript 函数是动态改变页面内容的基础。jQuery 作为一种流行的 JavaScript 库,极大地简化了 DOM 操作。在 jQuery 中,捕获(Capture)是一种处理事件的技术,本文将深入探讨 jQuery 捕获的原理、方法和应用场景。 捕获原理 捕获是…

Foundation CSS 可见性

Foundation CSS 可见性 引言 在网页设计中,CSS(层叠样式表)是一种用于描述HTML或XML文档样式的样式表语言。CSS的可见性是网页设计中一个至关重要的概念,它决定了元素在页面上的显示方式。本文将深入探讨Foundation CSS框架中的可见性相关特性,帮助开发者更好地理解和应…

【图像加密】基于matlab超混沌序列和DNA序列图像加密【含Matlab源码 14689期】

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到海神之光博客之家&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49…

SOAP 语法

SOAP 语法 概述 SOAP(Simple Object Access Protocol)是一种轻量级、简单的协议,用于在网络上交换结构化信息。它基于XML格式,支持多种传输协议,如HTTP、SMTP等。SOAP主要用于实现不同系统之间的互操作性,特别是在Web服务领域。 本文将详细介绍SOAP的语法,包括其基本…

QOwnNotes 开源 Markdown 笔记本 v25.12.5

软件介绍 QOwnNotes是开源的记事本&#xff0c;具有 Markdown支持 和针对GNU / Linux&#xff0c;Mac OS X和Windows的待办事项列表管理器&#xff0c;可与Nextcloud Notes 和ownCloud Notes一起使用。 您可以使用QOwnNotes写下您的想法&#xff0c;并 稍后在移动设备上进行编…

《Effective Java》第24条:静态成员类优于非静态成员类

说明: 关于本博客使用的书籍,源代码Gitee仓库 和 其他的相关问题,请查看本专栏置顶文章:《Effective Java》第0条:写在前面,用一年时间来深度解读《Effective Java》这本书 正文: 学习本条之前,首先来了解一下嵌套类 原文P88:嵌套类:是指定义在另一个类的内部的类…

LC项目实战一:PCB设计(三)

一、原理图导入变更设计-从原理图导入变更单击“应用修改”快速布局2D渲染效果图3D渲染效果图通过鼠标左键可以旋转3D效果图二、PCB图层和布线布线快捷键与原理图相同&#xff0c;使用ALT键加W键。布线时鼠标放在焊盘中间&#xff0c;有轻微吸附效果。点击鼠标左键确定导线起点…

Web Services 总结

Web Services 总结 引言 Web Services 是一种广泛应用于互联网上的服务架构,它允许不同平台、不同语言、不同操作系统的应用程序之间进行通信和交互。随着互联网技术的不断发展,Web Services 已经成为了企业级应用开发中不可或缺的一部分。本文将对 Web Services 进行全面总…

LC项目实战一:PCB DRC(四)

一、DRC设计-检查DRC没有消息就是最好的消息二、DRC错误演示三、DRC检查项目四、DRC设计规则

三种方式打 Java 可执行 JAR 包,你用对了吗?

三种方式打 Java 可执行 JAR 包&#xff0c;你用对了吗&#xff1f;写完代码只是开始&#xff0c;如何打包成一个“开箱即用”的 JAR 文件&#xff0c;才是交付的关键一步。很多 Java 开发者都遇到过这样的问题&#xff1a; 本地跑得好好的程序&#xff0c;一打包就报错 ClassN…