SpringWebMVC - 复习整理

SpringMVC

1 Overview

学习方法 课程说明 秦老师课前说的:
2020年4月23日 发布

SE 入门, 能看懂代码

Web 框架在精简它

框架 按正常, 这里是要从官网文档自学的, 不能再被老师带. 锻炼自学能力, 锻炼笔记能力, 锻炼项目能力

SSM整合, 相当于在Web阶段的项目

Spring IoC和AOP特别重要, 要再复习

SpringMVC中也有个很重要的东西, 执行流程

博客很重要, 工作时如果没有对应文档, 可能会崩溃

版本: 老师用5.1.9, 我自己选用了5.2.0

1.1 MVC

模型(DAO service) | 视图(jsp) | 控制器(Servlet)

后端很多特别牛批的控制器, 很多底层也都是Servlet

职责

Controller 1. 取得表单数据 2. 调用业务逻辑 3. 转向指定页面

Model 1. 业务逻辑 2. 保存数据状态

View 显示页面

pojo:

  • vo: 视图层的实体类对象, 更灵活
  • dto: 数据传输时的对象

面试: 你的项目的架构是设计好的还是演进的??

坑 一般都是演进的. 才合理. 阿里巴巴, MySQL --> AliSQL --> AliRedis

所有项目一般都是All in one --> 微服务

1.2 SpringMVC

为什么要用它呢?

  • 轻量, 易学
  • 高效地, 基于请求\响应的框架. (不是以事件为驱动)
  • 可与SpringFramework无缝集成
  • 约定优于配置
  • 功能强大, 支持: RESTful | 数据合法验证 | 异常处理 | 拦截器 …
  • 市占率高

RESTful, 不需要问号拼接参数

1.3 基本原理 执行流程

A - DispatcherServlet

Spring的web框架围绕 DispatcherServlet 设计

作用: 转发\调度 ,将请求分发到不同"处理器"

本质: 还是Servlet, 如下图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ScKeGjYf-1587626996863)(D:\微云同步助手\364291826\同步文件夹\知识库\10 - md文库 秦疆老师\框架\SpringMVC.assets\image-20200422105032987.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GZK1wibv-1587626996865)(D:\微云同步助手\364291826\同步文件夹\知识库\10 - md文库 秦疆老师\框架\SpringMVC.assets\image-20200421214015127.png)]

中文版

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bIyZM00F-1587626996866)(SpringMVC.assets/image-20200422111900346.png)]

秦老师的图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pW9fkAAz-1587626996869)(SpringMVC.assets/image-20200422114808087.png)]

基本原理 - 简述: (based on 老师公众号)

  1. DispatcherServlet, 代表FrontController, 是整个SpirngMVC的"控制中心". 用户发出request, DS接收请求. 解析URL:
    • 例如: http://localhost:8080/SpringMVC/hello
    • http://localhost:8080 - 服务器域名端口
    • /SpringMVC - 部署在服务器上的具体web站点
    • /hello - 控制器
    • 综述: 请求位于服务器上"SpringMVC站点"的"hello"控制器
  2. HandlerMapping根据url中信息, 中众多注册过的Handler们中找具体的
  3. HandlerExecution (理解不太深刻), 主要作用是根据url\查找控制器hello
  4. HandlerAdapter按特定规则执行Handler, Handler再让具体的Controller执行
  5. Controller调用执行我们写的业务代码, 得到数据, 存入ModelAndView对象, 并把该对象返回给Adapter, 再给DS
  6. DS调用ViewResolver解析mv对象中的"逻辑视图名", 同时将数据渲染给这个具体的View
  7. DS通过逻辑视图名, 找到渲染好的View, 呈现

摘自老师: 没有笨人只有懒人

基本原理 - 个人理解:

HandlerMapping 是众多Handler们的映射器 注册中心, 通过它找到具体的Handler的信息, 把信息告诉给DS, DS再通过Adapter调用具体的handler, 也就是我们写的Controller

ModelAndView 是Controller方法的返回值, 理解可以认为"给前端带个需要的值, 并且指定哪个页面文件"

ViewResolver 作用

  1. 提取mv中model中的数据
  2. 解析mv中指定的view名字信息
  3. 拼接前缀路径+视图名字+后缀, 找到对应view
  4. 将数据渲染到view中
  5. 个人理解: VR是从MandV中提取出数据和指定view信息, 再把两者结合(渲染), 丢给DS, DS展现…ok

B - 补充: Maven资源过滤问题

Maven存在资源过滤问题, 经常出现xml文件编辑后不能正常out到target中, 可以在parent module的pom.xml中添加以下代码来解决:

<build>
   <resources>
       <resource>
           <directory>src/main/java</directory>
           <includes>
               <include>**/*.properties</include>
               <include>**/*.xml</include>
           </includes>
           <filtering>false</filtering>
       </resource>
       <resource>
           <directory>src/main/resources</directory>
           <includes>
               <include>**/*.properties</include>
               <include>**/*.xml</include>
           </includes>
           <filtering>false</filtering>
       </resource>
   </resources>
</build>

1.4 RESTful

(已经比较熟悉了, 这里只补充一些)

作用:

  • 简洁, 显而易见
  • 高效 (支持缓存)
  • 可能有一定安全性, 因为url上可以避免暴露太多后台代码信息 (秦老师看法)

注意点:

  • requestMapping有相同url, 但接收请求的method不同的 (一个get 一个post), 则会根据实际请求方式不同自动匹配
  • 别忘了@PathVariable

1.5 小黄鸭调试法

向自己, 如同向他人一样, 解释一下代码的作用 流程. 说到一半可能就明白了

2 Hello SpringMVC

2.1 通过代码理解: XML

手动配置各个组件, 用Spring + SpringMVC实现一次HelloWorld!

  1. 确保Maven中webmvc的依赖正确导入, 确保projectStructure > artifact > 中依赖都正确

  2. 准备好一个SpringFramework的核心配置文件: springmvc-servlet.xml, in resources目录(classpath:)

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           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">
    
    </beans>
    
  3. 配置DispatcherServlet: in web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
             version="4.0">
    
        <!--配置DS-->
        <servlet>
            <servlet-name>springmvc</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <!--DS需要绑定Spring的核心配置文件-->
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath:springmvc-servlet.xml</param-value>
            </init-param>
            <!--启动级别: 1-->
            <load-on-startup>1</load-on-startup>
        </servlet>
        <!--斜杠和斜杠* 有区别: 斜杠只匹配请求,斜杠*匹配请
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值