SpringMVC再复习1
一、三层架构
-
表现层(WEB 层)
-
定义 :是应用程序与客户端进行交互的最外层,主要负责接收用户的请求,并将处理结果显示给用户。
-
作用 :在 Spring MVC 中,表现层通常采用 MVC 设计模式来构建。
-
技术 :一般会使用 JSP、HTML 等技术来展示数据给用户。
-
-
业务层
-
定义 :位于表现层和持久层之间,是应用程序的核心部分。
-
作用 :负责处理公司具体的业务逻辑,对数据进行处理和分析,实现业务规则和流程的控制。
-
-
持久层
-
定义 :是应用程序与数据库进行交互的底层。
-
作用 :负责数据的持久化操作,如数据的增删改查等,将业务数据存储到数据库中或者从数据库中读取数据。
-
二、MVC 概念
-
Model(模型)
-
定义 :是应用程序的数据模型,通常是一个 JavaBean 类。
-
作用 :用于封装数据,将数据以对象的形式进行存储和传递,便于数据的管理和使用。
-
-
View(视图)
-
定义 :是应用程序的用户界面,通常由 JSP、HTML 等技术实现。
-
作用 :用于展示数据给用户,将模型中的数据显示在界面上,让用户能够直观地看到和操作数据。
-
-
Controller(控制器)
-
定义 :是应用程序的控制中心,通常是一个 Java 类。
-
作用 :用于接收用户的请求,对请求进行处理和调度,调用相应的业务逻辑方法,对数据进行校验等操作。
-
三、Spring MVC 入门案例
-
创建 WEB 工程
-
使用开发工具(如 Eclipse、IntelliJ IDEA 等)创建一个新的 WEB 工程。
-
-
引入开发的 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>
-
编写 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>
-
编写 suc.jsp 页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>成功</title>
</head>
<body><h3>入门成功了2...</h3>
</body>
</html>
-
编写 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";}
}
-
配置核心的控制器(配置 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>
-
编写 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>
-
启动 Tomcat 服务器,进行测试
-
启动 Tomcat 服务器后,访问 index.jsp 页面中的超链接,会触发对 hello.do 的请求。
-
请求会被 DispatcherServlet 拦截,根据配置找到 HelloController 中的 sayHello 方法进行处理。
-
处理完成后,返回 suc.jsp 页面进行展示。
-
四、Spring MVC 执行流程
-
启动 Tomcat 服务器
-
当服务器启动时,由于在 web.xml 中配置了 load-on-startup 标签,会创建 DispatcherServlet 对象,并加载 springmvc.xml 配置文件。
-
-
创建控制器对象
-
配置了注解扫描后,Spring 会扫描指定的包及其子包,找到带有@Controller 注解的类,并创建其对象。
-
-
接收请求
-
客户端发送请求到服务器,请求 URL 会被 DispatcherServlet 拦截。
-
-
查找处理器
-
DispatcherServlet 根据请求 URL 和控制器类中@RequestMapping 注解的配置,找到对应的处理器方法。
-
-
执行处理器方法
-
调用处理器方法,处理业务逻辑。
-
-
返回视图名称
-
处理器方法执行完成后,返回一个字符串形式的视图名称。
-
-
解析视图
-
根据配置的视图解析器,将视图名称解析为具体的视图资源路径。
-
-
渲染页面
-
Tomcat 服务器根据解析后的视图路径,渲染页面并返回给客户端。
-
五、@RequestMapping 注解
-
作用
-
用于建立请求 URL 和处理方法之间的对应关系。
-
-
使用位置
-
可以作用在类上和方法上。
-
作用在类上 :作为第一级的访问目录。
-
作用在方法上 :作为第二级的访问目录。
-
-
属性
-
path :指定请求路径的 URL。
-
value :与 path 属性作用相同。
-
method :指定该方法的请求方式,如 GET、POST 等。
-
params :指定限制请求参数的条件。
-
六、请求参数的绑定说明
-
绑定机制
-
表单提交的数据都是以 k=v 的形式存在的,如 username=haha&password=123。
-
SpringMVC 的参数绑定过程是将表单提交的请求参数作为控制器中方法的参数进行绑定。
-
-
要求
-
提交表单的 name 属性和参数的名称必须相同,并且区分大小写。
-
-
支持的数据类型
-
基本数据类型和字符串类型
-
提交表单的 name 和参数的名称相同。
-
-
实体类型(JavaBean)
-
提交表单的 name 属性需要与 JavaBean 中的属性名称一致。
-
如果一个 JavaBean 类中包含其他的引用类型,表单的 name 属性需要编写成:对象. 属性,例如:address.name。
-
-
集合数据类型(List、Map 集合等)
-
在 JSP 页面中,可以通过 list[0]. 属性 的形式来提交集合属性的数据。
-
-
七、解决中文乱码问题
-
配置过滤器
-
在 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>