当前位置: 首页 > 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>

http://www.xdnf.cn/news/208891.html

相关文章:

  • MODSIM选型指南:汽车与航空航天企业如何选择仿真平台
  • 极客天成参与”AI助力智慧城市构建”主题演讲暨招商引智专题推介活动
  • 哈希表笔记(一 )
  • 【东枫电子】AI-RAN:利用人工智能驱动的计算基础设施变革 RAN
  • 后端部署:Flask + pymysql + MySQL迁移到服务器(以Linux为例)
  • Android Framework常见问题
  • 包装类的缓存机制
  • SELinux 从理论到实践:深入解析与实战指南
  • 算法题(137):丢手绢
  • 在yolo中Ultralytics是什么意思呢?超越分析的智能
  • 篮球足球体育球员综合资讯网站模板
  • git学习之git常用命令
  • MySQL 在 CentOS 7 环境下的安装教程
  • Go 语言中的 `recover()` 函数详解
  • 快速了解Go+微服务(概念和一个例子)
  • CA添加删除辅小区信令流程
  • 联邦学习与安全多方计算的结合是隐私保护机器学习领域
  • Android启动应用时屏蔽RecyclerView滑动,延时后再允许滑动,Kotlin
  • 华为云IoT平台与MicroPython实战:从MQTT协议到物联网设备开发
  • 4、RabbitMQ的七种工作模式介绍
  • CSS--图片链接水平居中展示的方法
  • Rust Ubuntu下编译生成环境win程序踩坑指南
  • 《Origin画百图》之带颜色映射的3维散点图
  • 局部和整体的关系
  • elementui里的el-tabs的内置样式修改失效?
  • Error: error:0308010C:digital envelope routines::unsupported 高版本node启动低版本项目运行报错
  • OpenCV 图形API(71)图像与通道拼接函数-----从图像(GMat)中裁剪出一个矩形区域的操作函数 crop()
  • 一文简单记录打通K8s+Kibana流程如何启动(Windows下的Docker版本)
  • 高翔《视觉SLAM十四讲》第七章视觉里程计3d-2d位姿估计代码详解与理论解析
  • AI图片跳舞生成视频,Uni Animate本地部署。