当前位置: 首页 > news >正文

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>

相关文章:

  • 元宇宙2.0:当区块链成为数字世界的宪法
  • 阿里云服务器 篇十二:加入 Project Honey Pot 和使用 http:BL
  • Scrapy框架之CrawlSpider爬虫 实战 详解
  • React 第三十四节 Router 开发中 useLocation Hook 的用法以及案例详解
  • 初识Redis · 缓存
  • git配置SSH KEY
  • 怎么查自己手机连接的ip归属地:完整指南
  • JAVA-使用Apache POI导出数据到Excel,并把每条数据的图片打包成zip附件项
  • 项目三 - 任务2:创建笔记本电脑类(一爹多叔)
  • 飞鸟游戏模拟器 1.0.3 | 完全免费无广告,内置大量经典童年游戏,重温美好回忆
  • Rust Ubuntu下编译生成环境win程序踩坑指南
  • MIT XV6 - 1.1 Lab: Xv6 and Unix utilities - sleep 是怎样练成的?
  • Git操作指令
  • 技术驱动与模式创新:开源AI大模型与S2B2C商城重构零售生态
  • C++ 类和对象(3)初始化列表、友元函数、内部类
  • 【Prometheus-MySQL Exporter安装配置指南,开机自启】
  • 如何利用Rust提升Linux服务器效率(详细操作指南)
  • 【神经网络与深度学习】改变随机种子可以提升模型性能?
  • JavaScript 实现——已知x值和y值,求其线性关系
  • 数据结构入门:详解顺序表的实现与操作
  • 违规行为屡禁不止、责任边界模糊不清,法治日报:洞穴探险,谁为安全事故买单?
  • 国际锐评:菲律宾“狐假虎威”把戏害的是谁?
  • 东风着陆场近日气象条件满足神舟十九号安全返回要求
  • 美国“杜鲁门”号航母一战机坠海
  • 五一假期上海铁路预计发送446万人次,同比增长8.4%
  • 央行副行长:研究建立民营中小企业增信制度,破解民营中小企业信用不足等融资制约