SpringMVC学习笔记

SpringMVC

== 学习笔记,后续持续更新==

0. 一些基本概念及要求

ssm:spring + springMVC MVC三层架构 + mybatis

JavaSE:java基础学习

JavaWeb:java网站设计

框架:研究官方文档,锻炼自学能力,锻炼笔记能力,锻炼项目能力

大数据学习基于Spring的前后端建议:Spring + Spring MVC + Spring Boot + Spring Cloud + Linux + Vue;

课程要求:

  1. 至少要懂SpringMVC的执行流程
  2. SSM框架的整合

0. MVC简介

  • MVC是模型(model)、视图(view)、控制(Controller)的简写,是一种软件设计的规范。
  • MVC是采用将逻辑、数据、显示分离的方法来组织代码。
  • MVC主要的作用是降低了视图和业务逻辑间的双向耦合
  • MVC不是一种设计模式,MVC是一种架构模式,当然不同的MVC存在一定的差异

MVC框架

MVC层描述
Model(模型)数据模型,提供要展示的数据,因此包含了数据和行为,可以认为是领域模型或JavaBean组件(包含数据和行为),不过现在一般都是分离来:Value Object(数据Dao)和服务层(行为Service)。也就是模型提供了模型的数据查询和模型数据的状态
View(视图)负责进行模型的展示,一般是我们见到的用户界面,客户想要看到的东西
Controller(控制器)接收用户请求,委托给模型(model)进行处理(状态改变),处理完毕后把返回的模型数据返回给视图,由视图负责展示,也就是说控制器(Controller)在MVC框架中充当调度员的工作

最典型的MVC框架

JSP + servlet + JavaBean
JSP:属于视图层的内容
servlet:用于转发,重定向

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nMjZYrMz-1627749285717)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210710201205419.png)]

Model1时代

  • 早期开发通常采用两层结构完成:视图层和模型层

  • 优点:架构简单,比较适合小型项目开发

  • 缺点:JSP职责不单一,职责过重,不便于维护

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0EpkxNFn-1627749285720)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210710202509291.png)]

Model2时代

  • Model2把一个项目分成三部分,包括视图、控制、模型
  • JSP本质是一个Servlet

在这里插入图片描述

1. SpringMVC概述

SpringMVC是SpringFramework的一部分,是基于Java实现的MVC的轻量级Web框架

1.1 为什么要学SpringMVC

  1. 轻量级,易学
  2. 高效,基于请求响应的MVC框架
  3. 可以与Spring兼容性好,可以无缝结合
  4. 约定由于配置
  5. 功能强大:RESTful,数据验证、格式化、本地化、主题等
  6. 简洁灵活

1.2 中心控制器

​ Spring的web框架围绕DispatcherServlet设计。DispatcherServlet的作用是将请求分发到不同的处理器。从Spring2.5开始,使用Java5或者以上版本的用户可以采用基于注解的controller声明方式。

​ SpringMVC框架像许多其他的MVC框架一样,以请求为驱动,围绕一个中心Servlet分派请求及提供其他功能,DispatcherServlet是一个实际的Servlet(它继承自HttpServlet基类)

在这里插入图片描述

1.3 简要概述MVC的执行流程

  1. DispatcherServlet表示前置控制器,是整个SpringMVC的控制中心,用于拦截客户端发送的匹配的请求,并把拦截下来的请求,依据相应的规则划分到目标Controller中处理,是整个SpringMVC的第一步(DispatcherServlet是前端控制器设计模式的实现,提供SpringWebMVC的集中访问点,同时负责用户请求的分派,而且可以与SpringIOC容器无缝集成,从而可以兼容Spring框架)
    • 假设请求的url为:http://localhost:8080/SpringMVC/hello 可以将url拆分成三部分
      • http://localhost:8080 表示服务器域名
      • SpringMVC 表示我们请求的服务器上的web站点
      • hello表示控制器
    • 通过上面三点分析,我们请求的url含义为:请求为与http://localhost:8080上的SpringMVC站点的hello控制器
  2. HandlerMapping:为处理器映射,当DispatcherServlet调用HandlerMapping时,HandlerMapping会根据客户端发送的url请求查找Handler处理器
  3. HandlerExecutionChain:是Handler的执行链,由HandlerMapping会把请求映射为HandlerExecutionChain类型的handler对象,如上url别查找的控制器为:hello
  4. HandlerExecution将解析后的信息传递给DispatcherServlet,如:解析控制器映射等。
  5. HandlerAdapter:表示处理器适配器,由DispatcherServlet将经HandlerMapping处理得到的handler对象作为参数传递给HandlerAdapter的实例化对象,并按照一定规则执行handler(其实就是通过handler去找到对应的controller并执行的一个过程),返回一个ModelAndView对象
  6. Handler让具体的Controller执行
  7. Controller将具体的执行信息返回给HandlerAdapter,如:ModelAndView,
  8. HandlerAdapte将视图逻辑名或模型传递给DispatcherServlet
  9. DispatcherServlet调用视图解析器(ViewResolver)来解析HandlerAdapter传递的逻辑视图名
  10. 视图解析器将解析的逻辑视图名传递给DispatcherServlet
  11. DispatcherServlet根据视图解析器的视图结果,调用具体的视图
  12. DispatcherServlet将最终的视图呈现给用户

1.4 小结

使用SpringMVC必须配置的三大组件:处理器映射器,处理器适配器,视图解析器

通常,我们只需要手动配置视图解析器即可,而处理器映射器和处理器适配器只需要开启注解驱动即可,这样可以省去大段的xml配置

在这里插入图片描述

2. SpringMVC配置过程

2.1 原生态-配置版

  1. 新建一个Module,导入web模块支持
  2. 配置SpringMVC相关的依赖
  3. 配置web.xml文件,注册DispatcherServlet
<!--1. 配置Web容器的servlet控制中心-->
    <servlet>
        <!--1.1 配置Servlet的名称及类型-->
        <servlet-name>spring-mvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--1.2 配置Servlet控制器的拦截机制-->
        <init-param>
            <param-name>contextConfigLocaton</param-name>
            <param-value>classpath:</param-value>
        </init-param>
        <!--1.3 配置当前Servlet的运行级别-->
        <load-on-startup>1</load-on-startup>
    </servlet>

    <!--2. 配置Web控制中心的映射-->
    <servlet-mapping>
        <!--2.1 绑定Servlet-->
        <servlet-name>spring-mvc</servlet-name>
        <!--2.2 对映射内容进行过滤,/表示允许jsp之外的全部文件通过,/*表示允许全部文件通过-->
        <url-pattern>/</url-pattern>
    </servlet-mapping>
  1. 在web.xml指定好spring的配置文件后,为spring的配置文件添加以下内容
    <!--1. 配置Spring核心三要素-->
    <!--1.1 处理映射器-->
    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>

    <!--1.2 处理适配器-->
    <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>

    <!--1.3 视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp"/>
        <property name="suffix" value=".jsp"/>
    </bean>
	<!--2. spring的其它配置-->
    <!--BeanNameUrlHandlerMapping:bean-->
    <bean id="/hello" class="com.fuxi.spring.Collector.HelloController"/>
  1. 接下来可以构建Controller开发业务

2.2 注解-SpringMVC开发

  1. 新建一个Module,导入web模块支持
  2. 由于Maven可能UC存在资源过滤的问题,我们可以在poem.xml配置文件中将配置完善
<build>
    <resources>
        <!--配置Spring的src/main/java源码下的资源过滤,允许以.properties和.xml结尾文件通过-->
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
            <filtering>false</filtering>
        </resource>
        <!--配置Spring的src/main/resources源码下的资源过滤,允许以.properties和.xml结尾文件通过-->
        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
            <filtering>false</filtering>
        </resource>
    </resources>
</build>
  1. 在pom.xml文件中引入相关的依赖:包括Spring核心框架库、SpringMVC、Servlet、JSTL等,当然,如果在父类pom.xml已经引入了,则可以无需引入

  2. 配置web.xml

    • 注意
      • 注意web.xml的版本问题,尽量要使用最新版,比如当前使用的环境,使用的就是web 4.0版本
      • 要注册DispatcherServlet
      • 管线SpringMVC的配置文件
      • 启动级别为1
      • 映射路径【尽量不用用/*,否则可能会出现404】
  3. 添加SpringMVC配置文件

    • 过程

      • 让IOC的注解生效
      • 静态资源过滤:HTML,JS,CSS,图片,视频……
      • MVC的注解驱动
      • 配置视图解析器
  4. 完成上述配置,整个Spring-MVC-Annotation的基本环境配置就已经完成了,这时候就可以开始进行Controller层、Service层、Dao(Mapper)层的业务开发了。

  5. Spring-MVC开发中常用注解

    注解应用描述
    @Component组件
    @Repository常作为dao层容器注解
    @Service常作为Service层注解
    @Controller常作为Controller层注解@Controller代表这个类会被Spring托管,被这个注解的类中所有的方法,如果返回的是String,并且没有具体页面可以跳转,那么就会被视图解析器解析

3. RestFul风格

3.1 概念

​ Restfult是一个用于做资源定位和资源操作的风格。它既不是标准,也不是协议,仅仅是一种风格,基于这种风格开发的软件可以更简洁,更有层次,且更易于实现缓存等机制。

3.2 功能

  • 资源:互联网所有的事物都可以被抽象为资源
  • 资源操作:使用PSOT、DELETE、PUT、GET,使用不同方法对资源进行操作
  • 分别对应 添加、删除、修改、查询

3.3 传统资源操作与RestFult资源操作的对比

3.3.1 传统资源操作示例:
http://127.0.0.1/item/queryItem.action?id=1	查询,GET
http://127.0.0.1/item/saveItem.action	新增,POST
http://127.0.0.1/item/updateItem.action	更新,POST
http://127.0.0.1/item/deleteItem.action?id=1	删除,GET或PSOT
3.3.2 RestFul操作资源示例
http://127.0.0.1/item/1	查询,GET
http://127.0.0.1/item	新增,POST
http://127.0.0.1/item	更新,PUT
http://127.0.0.1/item/1	删除,

4. SpringMVC:结果跳转方式

4.1 ModelAndView

  1. 在Spring-MVC的主配置文件中配置“视图解析器”
  2. 在Controller层通过实现Controller接口的方式实现Controller层对应类的具体方法。即通过原生态的方式完成对Controller层跳转的实现

4.2 ServletAPI

  1. 通过SpringMVC来实现转发和重定向,则不需要 视图解析器(如果已经写了视图解析器,可以在配置文件中将其暂时注解
  2. HttpServletResponse实现三种视图跳转控制
ServletAPI描述
HttpServletResponse通过HttpServletResponse实现输出
HttpServletResponse通过HttpServletResponse实现重定向
HttpServletResponse通过HttpServletResponse实现转发

示例:

在这里插入图片描述

  1. 通过return实现跳转和重定向:

    示例:

在这里插入图片描述

5. Ajax

ajax三要素:

  • url:请求连接
  • data:要发送的数据
  • recallfunction:回调函数,一般常用的有两个success()和error()
//post模式
$.post({
    url: window.location.href.replace(window.location.pathname, "")+"/a1",
    data: {"":$("#username").val()},
    success:function (data) {
        console.log("成功获取到服务器响应");
        alert(data);
    },
    error:function(){
        alert("未获取到数据的的响应")
    }
})

//get模式
$.get({
    url: window.location.href.replace(window.location.pathname, "")+"/a1",
    data: {"":$("#username").val()},
    success:function (data) {
        console.log("成功获取到服务器响应");
        alert(data);
    },
    error:function(){
        alert("未获取到数据的的响应")
    }
})

6. 文件上传与下载

  • SpringMVC可以很好的支持文件上传,但因为SpringMVC并没有装配MultipartResolver,因此默认情况下不能处理文件上传工作,如果想要使用Spring的文件上传功能,需要在上下文中高配置MultipartResolver

  • 前端表单要求:为了能上传文件,必须将表单的method设置为POST,并将enctype设置为multipart/form-data,只有在这样配置下,浏览器才会把用户选择的文件以二进制数据的方式发送给服务器
    在这里插入图片描述

  • <form action="" enctype="multipart/form-data" method="post">
        <input type="file" name="file"/>
        <input type="sumbit"/>
    </form>
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值