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>
  3. 编写 index.jsp 页面

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>

    <html> <head> <title>入门程序</title> </head> <body>

    入门

    入门程序 </body> </html>
  4. 编写 suc.jsp 页面

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>

    <html> <head> <title>成功</title> </head> <body>

    入门成功了2...

    </body> </html>
  5. 编写 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";
     }

    }

  6. 配置核心的控制器(配置 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>
  7. 编写 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/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context http://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>
  8. 启动 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>
相关推荐
四谎真好看1 小时前
Java 黑马程序员学习笔记(进阶篇18)
java·笔记·学习·学习笔记
桦说编程1 小时前
深入解析CompletableFuture源码实现(2)———双源输入
java·后端·源码
java_t_t1 小时前
ZIP工具类
java·zip
lang201509282 小时前
Spring Boot优雅关闭全解析
java·spring boot·后端
pengzhuofan2 小时前
第10章 Maven
java·maven
百锦再3 小时前
Vue Scoped样式混淆问题详解与解决方案
java·前端·javascript·数据库·vue.js·学习·.net
刘一说3 小时前
Spring Boot 启动慢?启动过程深度解析与优化策略
java·spring boot·后端
壹佰大多3 小时前
【spring如何扫描一个路径下被注解修饰的类】
java·后端·spring
百锦再3 小时前
对前后端分离与前后端不分离(通常指服务端渲染)的架构进行全方位的对比分析
java·开发语言·python·架构·eclipse·php·maven
DokiDoki之父3 小时前
Spring—注解开发
java·后端·spring