Spring MVC入门

        介绍了Spring MVC框架的概念、特征及核心功能,通过案例详细介绍了Spring MVC开发所需要的开发环境以及基本的开发步骤。

一、Spring MVC框架概述

        Spring MVC是Spring框架的一个模块,是一个基于Java的实现了MVC设计模式的轻量级Web框架。它通过一套注解和接口,让简单的Java类成为处理请求的控制器,无需实现任何接口,同时支持REST风格的编程。

1. Spring MVC主要特征

  1. 清晰的职责分离:将控制器、模型对象、分派器以及处理程序对象的角色分开

  2. 灵活配置:支持基于XML和注解的配置方式

  3. 可重用的业务代码:可以使用现有的业务对象作为命令或表单对象

  4. 可定制的绑定和验证:支持类型转换和验证

  5. 强大的视图技术:支持JSP、Velocity、FreeMarker等多种视图技术

  6. REST支持:原生支持REST风格的URL

  7. 国际化支持:内置国际化支持

  8. 主题支持:支持主题和外观的更改

2. MVC 与 Spring MVC

        MVC 是一种广泛适用的设计模式,而 Spring MVC 是该模式在 Java Web 开发中的一种优秀实现。Spring MVC 通过提供丰富的功能和简化的开发方式,使开发者能更高效地构建 Web 应用程序,同时保持了 MVC 模式的核心优势。理解二者的关系有助于在不同场景下做出更合适的技术选择。

2.1 MVC 设计模式

1. 基本概念

MVC(Model-View-Controller)是一种软件架构设计模式,将应用程序分为三个核心组件:

  • Model(模型):处理数据和业务逻辑

  • View(视图):负责数据展示

  • Controller(控制器):处理用户输入,协调模型和视图

2. 典型工作流程

用户请求 → 控制器 → 调用模型 → 返回数据 → 控制器选择视图 → 视图渲染 → 响应给用户

2.2 Spring MVC 框架

1. 基本概念

Spring MVC 是基于 Java 的实现 MVC 设计模式的请求驱动型 Web 框架,属于 Spring Framework 的一部分。

2. 核心组件
组件说明
DispatcherServlet前端控制器,接收所有请求
HandlerMapping请求到处理器的映射
Controller实际处理请求的组件
ModelAndView封装模型和视图信息
ViewResolver视图解析器
3. 请求处理流程

1. 用户发送请求 → DispatcherServlet

2. DispatcherServlet 查询 HandlerMapping → 找到对应 Controller

3. Controller 调用业务逻辑 → 返回 ModelAndView

4. DispatcherServlet 查询 ViewResolver → 解析视图

5. 视图渲染 → 返回响应

3. Spring MVC 工作流程

3.1 Spring MVC 的请求执行顺序

(1)用户向服务端发送一次请求,在满足 web.xml 文件中前端控制器的匹配规则的前提下,这个请求在 Tomcat 的解析下,会先到前端控制器 DispatcherServlet(也叫中央控制器)。如我们发出*.action 的请求,则只对以“.action”结尾的请求路径进行处理。某些访问 JSP 的页面请求则不会被框架拦截处理。

(2)DispatcherServlet 作为框架的核心,通过处理器映射器(框架提供 SimpleUrlHandlerMapping 类,也可能是其他的映射器类),从映射文件中根据请求路径找到对应的处理器类,并得到该类的实例对象。

(3)DispatcherServlet 通过处理器适配器(框架提供的一个类),对处理类的实例对象进行适配器处理以及参数绑定,并将请求转移到处理类中进行业务处理。

(4)处理类通过实现框架提供的 Controller 接口,最终完成适配功能。并在这里完成具体的业务逻辑功能,将数据和视图信息封装到 ModelAndView 对象中,并返回给 DispatcherServlet 处理。

(5)DispatcherServlet 获取从处理器返回的 ModelAndView 对象后,交给视图解析器(框架中提供的功能类)解析,并显示在相应的视图中。

3.2 Spring MVC 框架的核心接口

(1)前端控制器(DispatcherServlet):它也称为中央控制器,是整个请求响应的控制中心。组件的调用都由它统一调度。配置在 web.xml 文件中,随服务器启动而实例化。

(2)简单处理器映射器(SimpleUrlHandlerMapping):根据用户访问的 URL 映射到对应的后端处理器 Handler,并将该处理器的实例返回给前端控制器。

(3)处理器适配器(HandlerAdapter):常用的有 SimpleControllerHandlerAdapter,该功能组件在框架中默认运行。它用于封装参数数据,绑定视图等。

(4)视图解析器(ViewResolver):常用的有 InternalResourceViewResolver,在框架中该功能组件默认运行。它用于将 ModelAndView 逻辑视图解析为具体的视图(如 JSP)。

(5)后端处理器(Handler):即由程序员编写的处理类,对用户具体请求进行处理,该类必须实现框架提供的 Controller 接口,才能作为处理器完成组件功能。

(6)处理器中使用的类(ModelAndView):用于封装数据和视图信息,并返回给前端控制器。该类实现了对原生 Servlet 中 Request 对象的封装,因此可以作为域对象封装数据,并在视图中用 EL 表达式取出数据。

二、案例——Spring MVC框架实现模拟登录

案例说明:使用Spring MVC框架进行用户登录验证

1.新建web项目并引入依赖 

在Idea中配置Tomcat并运行第一个servlet程序——初试Jakarta EE项目 https://blog.csdn.net/m0_74808313/article/details/142817862?sharetype=blog&shareId=142817862&sharerefer=APP&sharesource=m0_74808313&sharefrom=link

<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency><dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.1.3</version></dependency><!--    spring基本依赖--><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-expression</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet.jsp</groupId><artifactId>javax.servlet.jsp-api</artifactId><version>2.3.1</version></dependency><dependency><groupId>org.apache.maven.plugins</groupId><artifactId>maven-deploy-plugin</artifactId><version>3.0.0</version><type>maven-plugin</type></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.9</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>2.1.1</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.22.0</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-api</artifactId><version>2.22.0</version></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><version>8.0.33</version></dependency><dependency><groupId>org.apache.maven.plugins</groupId><artifactId>maven-install-plugin</artifactId><version>3.0.1</version><type>maven-plugin</type></dependency>

2. 配置Spring MVc的前端控制器

        Spring MVC 框架通过前端控制器对符合匹配规则的客户端请求进行统一的拦截处理。这些匹配规则放置在 Spring MVC 的配置文件中,框架通过默认的路径去加载这些文件。

配置文件路径:在 Webapp/WEB-INF/web.xml 中进行配置。

配置内容:由于 Spring MVC 框架的前端控制器是一个 Servlet,该 Servlet 在前面的支持 JAR 包中存在。其配置方式与 Servlet 的配置一致,具体代码如下。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><!--  配置前端控制器  --><servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class></servlet><servlet-mapping><servlet-name>springmvc</servlet-name><url-pattern>*.action</url-pattern><!--   截所有请求并交由DispatcherServlet处理     -->
<!--        <url-pattern>/</url-pattern>--></servlet-mapping>
</web-app>

3. 配置 Spring MVC 的核心映射文件 springmvc-servlet.xml

文件路径:在 Webapp/WEB-INF 目录下新建 springmvc-servlet.xml。文件名来源于 web.xml 配置的前端控制器的名称与后缀 -servlet,前端控制器在加载过程中会自动在该路径下寻找该映射文件。因此该文件的路径和文件名不能随意更改。如要更改,则需在 web.xml 中配置前端控制器时,修改其默认的映射文件路径和文件名,这里暂时不做讲解。

配置内容如下
(1)xml 文件中的约束
(2)配置访问路径与后台处理器之间的映射。该配置需要框架提供的映射类 SimpleUrlHandlerMapping 来完成请求路径的跳转。

<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:tx="http://www.springframework.org/schema/tx"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"><context:component-scan base-package="org.rainpet"></context:component-scan><context:property-placeholder location="classpath:db.properties"/><bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName" value="${db.driver}"/><property name="url" value="${db.url}"/><property name="username" value="${db.username}"/><property name="password" value="${db.password}"/></bean><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"/></bean><tx:annotation-driven transaction-manager="transactionManager"/><mvc:annotation-driven/><import resource="classpath:mybatisConfig.xml"/><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="configLocation" value="classpath:mybatisConfig.xml"/><property name="dataSource" ref="dataSource"/><property name="mapperLocations" value="classpath:mapper/*.xml"/><property name="configuration"><bean class="org.apache.ibatis.session.Configuration"><property name="mapUnderscoreToCamelCase" value="true"/></bean></property></bean><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><!-- 扫描所有dao接口 --><property name="basePackage" value="org.rainpet.mapper"></property><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property></bean><!-- 配置访问路径与后台处理器之间的映射   --><bean id="loginController" class="org.rainpet.LoginController"></bean><bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"><property name="mappings"><props><prop key="/login.action">loginController</prop><!--  配置了一个SimpleUrlHandlerMapping,将URL路径/login映射到loginController,用于处理登录请求    -->
<!--                <prop key="/login">loginController</prop>--></props></property></bean>
</beans>

4. 新建登录页面login.jsp和登录成功后的页面success,jsp

文件路径:在 Webapp/ 目录下新建 login.jsp、success,jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登录</title>
</head>
<body><form action="/springMvc01/login.action" method="post">用户名:<input type="text" name="userName"><br>密码:<input type="password" name="password"><br><input type="submit" value="登录"></form>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登录成功</title>
</head>
<body><h1>登录成功</h1>${userName}
</body>
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>error</title>
</head>
<body><h1>error</h1>${info}
</body>

5. 新建登录处理器LoginController.java

package org.rainpet;import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class LoginController implements Controller {@Overridepublic ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {String userName = request.getParameter("userName");String password = request.getParameter("password");ModelAndView mav=new ModelAndView();if(password!=null&&password.equals("123456")){mav.addObject("userName","欢迎您:"+userName);mav.setViewName("success.jsp");}else {mav.addObject("info","用户名或密码错误");mav.setViewName("error.jsp");}return mav;}
}

7. 启动TomCat

浏览器地址栏输入http://localhost:8080/springMvc01/login.jsp,到登录界面,实现登录

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

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

相关文章

贪心算法求解边界最大数

贪心算法求解边界最大数&#xff08;拼多多2504、排列问题&#xff09; 多多有两个仅由正整数构成的数列 s1 和 s2&#xff0c;多多可以对 s1 进行任意次操作&#xff0c;每次操作可以置换 s1 中任意两个数字的位置。多多想让数列 s1 构成的数字尽可能大&#xff0c;但是不能比…

Ubuntu ZLMediakit的标准配置文件(rtsp->rtmp->hls)

最近在工作中遇到不生成hls资源的问题,后面发现是配置文件有误,特此记录正确的config.ini配置文件,方便查阅。 最终解决方案,通过下面这种格式可以访问到flv视频,具体为什么不太清楚,rtmp格式:rtmp://39.113.48.113:8089/live/1744168516937396175 记录最终解决方案:ht…

# LeetCode 1007 行相等的最少多米诺旋转

LeetCode 1007 行相等的最少多米诺旋转 原题英文&#xff1a;Minimum Domino Rotations For Equal Row 难度&#xff1a;中等 | 标签&#xff1a;数组、贪心 1 题目重述 给定两行长度相同的多米诺骨牌&#xff1a; tops[i] 表示第 i 张骨牌上面的数字&#xff1b;bottoms[…

大数据技术:从趋势到变革的全景探索

📝个人主页🌹:一ge科研小菜鸡-CSDN博客 🌹🌹期待您的关注 🌹🌹 在数字化时代的浪潮下,大数据已经不再是一个陌生的概念。从日常生活中的社交媒体,到企业决策支持系统,再到公共管理的大数据应用,它正在改变着我们的工作和生活方式。随着技术的进步,传统的数据…

前端八股Day5——XHS某中厂实习前端一面

没写完&#xff0c;睡醒补 CSS盒模型 //出现频率好高&#xff0c;感觉每次写面经都遇到 W3C标准盒模型(content-box)&#xff1a;盒子宽高width/heightpaddingbordermargin IE怪异盒模型(border-box)&#xff1a;盒子宽高width/heigth(包括padding和border)margin 默认标准切换…

INP指标

什么是INP&#xff08;Interaction to Next Paint&#xff09; 参考网站&#xff1a;webVital-INP文档 定义与核心目标 INP 是一项稳定的 Core Web Vitals 指标&#xff0c;通过统计用户访问期间所有符合条件的互动约定时间&#xff0c;评估网页对用户操作的总体响应能力。最…

剖析扩散模型(Denoising Diffusion Probabilistic Models)

文章目录 1. 前言2. 前向扩散过程(Forward Diffusion)3. 反向生成过程&#xff08;Reverse Process&#xff09;4. 训练和推理过程中的伪代码5. 训练过程代码实现&#xff08;Training&#xff09;5.1 时间嵌入模块——TimeEmbedding5.2 前向扩散过程——GaussianDiffusionTrai…

基于 Spring Boot 瑞吉外卖系统开发(九)

基于 Spring Boot 瑞吉外卖系统开发&#xff08;九&#xff09; 保存菜品 菜品管理页面提供了一个“新增菜品”按钮&#xff0c;单击该按钮时&#xff0c;会打开新增菜品页面。 请求路径/dish&#xff0c;请求方法POST&#xff0c;参数使用DishDto类接收。 DishDto 添加f…

w317汽车维修预约服务系统设计与实现

&#x1f64a;作者简介&#xff1a;多年一线开发工作经验&#xff0c;原创团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339;赠送计算机毕业设计600个选题excel文…

【Agent搭建】利用coze平台搭建一个AI销售?

目录 一、关于coze 核心功能 二、搭建属于你自己智能体 备注&#xff1a;&#xff08;以下说明比较需要调整的板块&#xff09; 1、从Prompt工程开始 2、搭建工作流 3、添加知识 三、总结 一、关于coze Coze是字节跳动推出的AI应用开发平台&#xff0c;专注于帮助用户快速…

Sharding-JDBC分库分表中的热点数据分布不均匀问题及解决方案

引言 在现代分布式应用中&#xff0c;使用Sharding-JDBC进行数据库的分库分表是提高系统性能和扩展性的常见策略。然而&#xff0c;在实际应用中&#xff0c;某些特定的数据&#xff08;如最新订单、热门商品等&#xff09;可能会成为“热点”&#xff0c;导致这些部分的数据处…

DSP48E2 的 MAC模式功能仿真

DSP48E2 仿真代码&#xff1a; 测试的功能为 P i ( A D ) ∗ B P i − 1 P_{i} (AD) * B P_{i-1} Pi​(AD)∗BPi−1​ timescale 1ns / 1nsmodule dsp_tb;// 输入reg CLK;reg CE;reg SCLR;reg signed [26:0] A, D;reg signed [17:0] B;// 输出wire signed [47:0] P;par…

抽象工厂模式(Abstract Factory Pattern)

很好&#xff01;你现在已经开始接触设计模式了&#xff0c;而**抽象工厂模式&#xff08;Abstract Factory Pattern&#xff09;是一种常用于“创建一系列相关产品”**的经典设计模式。 我会一步步帮你理解&#xff1a; &#x1f9e0; 一句话解释 抽象工厂模式&#xff1a;提…

Thymeleaf模板引擎从入门到实战:Spring Boot整合与核心用法详解

在 Java Web 开发的世界里&#xff0c;模板引擎是连接后端数据与前端展示的重要桥梁。Thymeleaf 凭借其强大的功能和简洁的语法&#xff0c;逐渐成为众多开发者的首选。如果你正在寻找一款能够让你的 Web 应用开发更加高效、代码更加优雅的模板引擎&#xff0c;那么 Thymeleaf …

【HarmonyOS】作业三 UI

目录 一. 单选题&#xff08;共10题&#xff0c;10分&#xff09; 1. (单选题, 1分)关于Tabs组件页签的位置设置&#xff0c;下面描述错误的是 2. (单选题, 1分)下面哪个组件不能包含子组件? 3. (单选题, 1分)ArkTS语言的实现计数器功能的组件名称是以下哪个? 4. (单选题…

《算法笔记》10.6小节——图算法专题->拓扑排序 问题 C: Legal or Not

题目描述 ACM-DIY is a large QQ group where many excellent acmers get together. It is so harmonious that just like a big family. Every day,many "holy cows" like HH, hh, AC, ZT, lcc, BF, Qinz and so on chat on-line to exchange their ideas. When so…

博客信息管理/博客管理

&#x1f6e0; 博客管理模块&#xff1a;设计建议 你应该以To B 的后台系统思路来设计&#xff0c;但保持简单、轻量级、自己易维护是关键。下面是针对你这个场景的建议。 &#x1f9f1; 前端页面结构&#xff08;React/Vue 可用&#xff09; 页面 说明 博客列表页 展示所有博…

全平台开源即时通讯IM框架MobileIMSDK:7端+TCP/UDP/WebSocket协议,鸿蒙NEXT端已发布,5.7K Stars

一、基本介绍 MobileIMSDK是一套全平台原创开源IM通信层框架&#xff1a; 超轻量级、高度提炼&#xff0c;lib包50KB以内&#xff1b;精心封装&#xff0c;一套API同时支持UDP、TCP、WebSocket三种协议&#xff08;可能是全网唯一开源的&#xff09;&#xff1b;客户端支持iOS…

SpringBoot商城平台系统设计与开发

概述 SpringBoot商城平台系统实现了商品展示、购物车、订单管理等商城核心功能&#xff0c;适合作为计算机专业设计项目或商城项目开发参考&#xff0c;实现商城平台的核心功能&#xff0c;学习商品管理、订单处理、支付集成等关键技术实现。 主要内容 1. 前台用户功能模块 …

【网络原理】深入理解HTTPS协议

本篇博客给大家带来的是网络原理的知识点, 由于时间有限, 分三天来写, 本篇为线程第三篇,也是最后一篇. &#x1f40e;文章专栏: JavaEE初阶 &#x1f680;若有问题 评论区见 ❤ 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作的动…