SpringMVC再复习1

一、三层架构

  1. 表现层(WEB 层)

    • 定义 :是应用程序与客户端进行交互的最外层,主要负责接收用户的请求,并将处理结果显示给用户。

    • 作用 :在 Spring MVC 中,表现层通常采用 MVC 设计模式来构建。

    • 技术 :一般会使用 JSP、HTML 等技术来展示数据给用户。

  2. 业务层

    • 定义 :位于表现层和持久层之间,是应用程序的核心部分。

    • 作用 :负责处理公司具体的业务逻辑,对数据进行处理和分析,实现业务规则和流程的控制。

  3. 持久层

    • 定义 :是应用程序与数据库进行交互的底层。

    • 作用 :负责数据的持久化操作,如数据的增删改查等,将业务数据存储到数据库中或者从数据库中读取数据。

二、MVC 概念

  1. Model(模型)

    • 定义 :是应用程序的数据模型,通常是一个 JavaBean 类。

    • 作用 :用于封装数据,将数据以对象的形式进行存储和传递,便于数据的管理和使用。

  2. View(视图)

    • 定义 :是应用程序的用户界面,通常由 JSP、HTML 等技术实现。

    • 作用 :用于展示数据给用户,将模型中的数据显示在界面上,让用户能够直观地看到和操作数据。

  3. Controller(控制器)

    • 定义 :是应用程序的控制中心,通常是一个 Java 类。

    • 作用 :用于接收用户的请求,对请求进行处理和调度,调用相应的业务逻辑方法,对数据进行校验等操作。

三、Spring MVC 入门案例

  1. 创建 WEB 工程

    • 使用开发工具(如 Eclipse、IntelliJ IDEA 等)创建一个新的 WEB 工程。

  2. 引入开发的 jar 包

    • 在项目的 pom.xml 文件中添加以下依赖,引入 Spring 相关的 jar 包:

<properties><spring.version>5.0.2.RELEASE</spring.version>
</properties><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</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>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet.jsp</groupId><artifactId>jsp-api</artifactId><version>2.0</version><scope>provided</scope></dependency>
</dependencies>
  1. 编写 index.jsp 页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>入门程序</title>
</head>
<body><h3>入门</h3><a href="/hello.do" >入门程序</a>
</body>
</html>
  1. 编写 suc.jsp 页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>成功</title>
</head>
<body><h3>入门成功了2...</h3>
</body>
</html>
  1. 编写 Controller 类和方法

package cn.tx.demo1;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;@Controller
public class HelloController {@RequestMapping(path = "/hello.do")public String sayHello(){System.out.println("入门方法执行了2...");return "suc";}
}
  1. 配置核心的控制器(配置 DispatcherServlet)

<servlet><servlet-name>dispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc.xml</param-value></init-param><load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping><servlet-name>dispatcherServlet</servlet-name><url-pattern>*.do</url-pattern>
</servlet-mapping>
  1. 编写 springmvc.xml 的配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:context="http://www.springframework.org/schema/context"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.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="com.qcbyjy"></context:component-scan><bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/pages/"></property><property name="suffix" value=".jsp"></property></bean><!-- <mvc:annotation-driven></mvc:annotation-driven>--></beans>
  1. 启动 Tomcat 服务器,进行测试

    • 启动 Tomcat 服务器后,访问 index.jsp 页面中的超链接,会触发对 hello.do 的请求。

    • 请求会被 DispatcherServlet 拦截,根据配置找到 HelloController 中的 sayHello 方法进行处理。

    • 处理完成后,返回 suc.jsp 页面进行展示。

四、Spring MVC 执行流程

  1. 启动 Tomcat 服务器

    • 当服务器启动时,由于在 web.xml 中配置了 load-on-startup 标签,会创建 DispatcherServlet 对象,并加载 springmvc.xml 配置文件。

  2. 创建控制器对象

    • 配置了注解扫描后,Spring 会扫描指定的包及其子包,找到带有@Controller 注解的类,并创建其对象。

  3. 接收请求

    • 客户端发送请求到服务器,请求 URL 会被 DispatcherServlet 拦截。

  4. 查找处理器

    • DispatcherServlet 根据请求 URL 和控制器类中@RequestMapping 注解的配置,找到对应的处理器方法。

  5. 执行处理器方法

    • 调用处理器方法,处理业务逻辑。

  6. 返回视图名称

    • 处理器方法执行完成后,返回一个字符串形式的视图名称。

  7. 解析视图

    • 根据配置的视图解析器,将视图名称解析为具体的视图资源路径。

  8. 渲染页面

    • Tomcat 服务器根据解析后的视图路径,渲染页面并返回给客户端。

五、@RequestMapping 注解

  1. 作用

    • 用于建立请求 URL 和处理方法之间的对应关系。

  2. 使用位置

    • 可以作用在类上和方法上。

    • 作用在类上 :作为第一级的访问目录。

    • 作用在方法上 :作为第二级的访问目录。

  3. 属性

    • path :指定请求路径的 URL。

    • value :与 path 属性作用相同。

    • method :指定该方法的请求方式,如 GET、POST 等。

    • params :指定限制请求参数的条件。

六、请求参数的绑定说明

  1. 绑定机制

    • 表单提交的数据都是以 k=v 的形式存在的,如 username=haha&password=123。

    • SpringMVC 的参数绑定过程是将表单提交的请求参数作为控制器中方法的参数进行绑定。

  2. 要求

    • 提交表单的 name 属性和参数的名称必须相同,并且区分大小写。

  3. 支持的数据类型

    • 基本数据类型和字符串类型

      • 提交表单的 name 和参数的名称相同。

    • 实体类型(JavaBean)

      • 提交表单的 name 属性需要与 JavaBean 中的属性名称一致。

      • 如果一个 JavaBean 类中包含其他的引用类型,表单的 name 属性需要编写成:对象. 属性,例如:address.name。

    • 集合数据类型(List、Map 集合等)

      • 在 JSP 页面中,可以通过 list[0]. 属性 的形式来提交集合属性的数据。

七、解决中文乱码问题

  1. 配置过滤器

    • 在 web.xml 中配置 Spring 提供的 CharacterEncodingFilter 过滤器类,以解决中文乱码问题。

<filter><filter-name>characterEncodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param>
</filter>
<filter-mapping><filter-name>characterEncodingFilter</filter-name><url-pattern>/*</url-pattern>
</filter-mapping>

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

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

相关文章

Centos 7系统 宝塔部署Tomcat项目(保姆级教程)

再看文章之前默认已经安装好系统&#xff0c;可能是云系统&#xff0c;或者是虚拟机。 宝塔安装 这个比较简单&#xff0c;参考这个老哥的即可&#xff1a; https://blog.csdn.net/weixin_42753193/article/details/125959289 环境配置 进入宝塔面板之后会出现环境安装&…

Nginx核心功能

目录 一&#xff1a;基于授权的访问控制 1&#xff1a;基于授权的访问控制简介 2&#xff1a;基于授权的访问控制步骤 &#xff08;1&#xff09;使用htpasswd 生成用户认证文件 &#xff08;2&#xff09;修改密码文件权限为400&#xff0c;将所有者改为nginx&#xff0c;…

AnimateCC基础教学:漫天繁星-由DeepSeek辅助完成

1.界面及元件抓图: 2.核心代码: // 初始化设置 var stars []; var stars2 []; var numStars 100; var stageWidth stage.canvas.width; var stageHeight stage.canvas.height; console.log(stageWidth, stageHeight);// 创建星星函数 function createStar() {var star n…

通过DeepSeek大语言模型控制panda机械臂,听懂人话,拟人性回答。智能机械臂助手又进一步啦

文章目录 前言环境配置运行测试报错 前言 通过使用智能化的工作流控制系统来精确操控机械臂&#xff0c;不仅能够基于预设算法可靠地规划每个动作步骤的执行顺序和力度&#xff0c;确保作业流程的标准化和可重复性&#xff0c;还能通过模块化的程序设计思路灵活地在原有工作流中…

分享一款免费的 AI 工作流平台

分享一款 AI 工作流/任务流平台&#xff0c;通过直观的流程图设计&#xff0c;轻松实现复杂业务流程的自动化与可视化&#xff0c;无缝集成 AI 大模型、AI 生图、数据库、条件分支、并行节点、自定义任务节点等等。 效果图&#xff1a; 官网体验地址&#xff1a;https://www.…

前端开发本地配置 HTTPS 全面详细教程

分为两步&#xff1a;生成证书、本地服务配置使用证书一、HTTPS 的基本概念 HTTPS 是一种安全的 HTTP 协议&#xff0c;它通过 SSL/TLS 对数据进行加密&#xff0c;确保数据在传输过程中不被窃取或篡改。在前端开发中&#xff0c;某些功能&#xff08;如 Geolocation API、Web…

day10 python机器学习全流程实践

在机器学习的实践中&#xff0c;数据预处理与模型构建是极为关键的环节。本文将回顾数据预处理的全流程&#xff0c;并基于处理后的数据完成简单的机器学习建模与评估&#xff0c;暂不涉及复杂的调参过程。 一、预处理流程回顾 机器学习的成功&#xff0c;很大程度上依赖于高…

4月28号

初认web前端: web标准: HTML:

【Linux系统】systemV共享内存

system V共享内存 在Linux系统中&#xff0c;共享内存是一种高效的进程间通信&#xff08;IPC&#xff09;机制&#xff0c;它允许两个或者多个进程共享同一块物理内存区域&#xff0c;这些进程可以将这块区域映射到自己的虚拟地址空间中。 共享内存区是最快的IPC形式。一旦这…

(七)RestAPI 毛子(Http 缓存/乐观锁/Polly/Rate limiting/异步大文件上传)

文章目录 项目地址一、Http Cache1.1 服务注册1.2 Validation with ETag1. 添加ETagMiddleware中间件2. 创建内存ETag存储器3. 服务注册4. 测试二、使用ETag实现乐观锁2.1 添加乐观锁方法2.2 修改Controller2.3 测试乐观锁三、Rate Limiting3.1 添加速率控制服务1. 在Program里…

2025.4.26_STM32_SPI

1.SPI简介 2.硬件电路 所有SPI设备的SCK(时钟)、MOSI(主机输出从机输入)、MISO(主机输入从机输出)分别连在一起。SCK线只能被主机控制&#xff0c;和I2C相同。 主机另外引出多条SS控制线&#xff0c;分别接到各从机的SS引脚 (SS不用的时候为高电平&#xff0c;当主机需要选中某…

JAVA:单例模式

单例模式是设计模式之一 设计模式&#xff0c;就像古代打仗&#xff0c;我们都听过孙子兵法&#xff0c;把计谋概括下来弄成一种模式&#xff0c;形成一种套路。 软件开发中也有很多场景&#xff0c;多数类似的问题场景&#xff0c;解决方案就形成固定的模式&#xff0c;单例…

脑机接口:重塑人类未来的神经增强革命

引言 人类对大脑的探索从未停止&#xff0c;而脑机接口&#xff08;Brain-Computer Interface, BCI&#xff09;的崛起&#xff0c;正在将科幻电影中的“意念操控”变为现实。 这项技术通过解码脑电信号&#xff0c;实现人脑与外部设备的直接交互&#xff0c;不仅为医疗康复带来…

从SOA到微服务:架构演进之路与实践示例

一、架构演进背景 在软件开发领域&#xff0c;架构风格随着业务需求和技术发展不断演进。从早期的单体架构&#xff0c;到面向服务架构(SOA)&#xff0c;再到如今的微服务架构&#xff0c;每一次变革都是为了解决当时面临的核心问题。 二、SOA架构解析 2.1 SOA核心概念 SOA&…

可灵AI 2.0上线:重新定义AI创作?好莱坞级特效触手可及

2025年4月15日&#xff0c;快手正式发布可灵AI 2.0&#xff0c;这款被誉为“让好莱坞特效师颤抖”的AI工具&#xff0c;以物理引擎级动态生成和电影语言自由操控两大核心技术&#xff0c;彻底颠覆了内容创作的想象边界。上线24小时内&#xff0c;全球用户已用它生成超过100万条…

Mysql存储引擎、锁机制

Mysql存储引擎 InnoDB​&#xff08;MySQL 5.5 及以后版本中的默认存储引擎&#xff09; ​​事务支持​​&#xff1a;支持 ​​ACID 事务​​&#xff0c;适合需要高可靠性的场景&#xff08;如支付、订单&#xff09;。 ​​锁机制​​&#xff1a;默认使用 ​​行级锁​​…

飞蛾扑火算法优化+Transformer四模型回归打包(内含MFO-Transformer-LSTM及单独模型)

飞蛾扑火算法优化Transformer四模型回归打包&#xff08;内含MFO-Transformer-LSTM及单独模型&#xff09; 目录 飞蛾扑火算法优化Transformer四模型回归打包&#xff08;内含MFO-Transformer-LSTM及单独模型&#xff09;预测效果基本介绍程序设计参考资料 预测效果 基本介绍 …

音视频开发---视频编码基础

一、视频编码的必要性 1. 存储与传输成本高 未经编码压缩的原始视频的数据量极大,例如:一般电影的亮度信号采样频率为13.5MHz;色度信号的频带通常为亮度信号的一半或更少,为6.75MHz或3.375MHz。以4:2:2的采样频率为例,Y信号采用13.5MHz,色度信号U和V采用6.75MHz采样,…

手动安装OpenSSL1.1.1

根据报错信息 Could not build the ssl module! Python requires a OpenSSL 1.1.1 or newer&#xff0c;说明当前系统中的 OpenSSL 版本低于 1.1.1&#xff0c;或者 Python 编译时未找到符合要求的 OpenSSL 库。以下是分步解决方案&#xff1a; 1. 检查当前 OpenSSL 版本 首先…

[原创](现代Delphi 12指南):[macOS 64bit App开发]: 跨平台开发同样支持retain()引用计数器处理.

[作者] 常用网名: 猪头三 出生日期: 1981.XX.XX 企鹅交流: 643439947 个人网站: 80x86汇编小站 编程生涯: 2001年~至今[共24年] 职业生涯: 22年 开发语言: C/C++、80x86ASM、Object Pascal、Objective-C、C#、R、Python、PHP、Perl、 开发工具: Visual Studio、Delphi、XCode、…