springmvc简介

什么是SpringMvc

1.Spring MVC框架是一个开源的Java平台,为开发强大的基于Java的Web应用程序提供全面的基础架构支持非常容易和非常快速。PS:说白了就是为了代替之前的servlet产生的比servlet要强大好用很多

2.Spring web MVC框架提供了MVC(模型 - 视图 - 控制器)架构和用于开发灵活和松散耦合的Web应用程序的组件

2.1模型(Model)封装了应用程序数据,通常它们将由POJO类组成。
2.2视图(View)负责展示数据,一般来说它生成客户端浏览器可以解释HTML输出。
2.3控制器(Controller)负责处理用户请求并构建适当的模型,并将其传递给视图进行解析展示。

springmvc执行流程:

执行过程参考链接:
https://www.cnblogs.com/wangjiming/p/10487832.html
https://www.jianshu.com/p/8abf147f65f9

在这里插入图片描述

步骤说明:
(1)用户通过客户端浏览器想服务器(比如tomcat)发送请求,请求会被soringmvc的前端控制器(DispatcherServlet)拦截。
(2)DispatcherServlet拦截到请求后,会调用HandlerMapping处理器映射器。
(3)处理器映射器根据请求的url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
(4)DispatcherServlet会通过返回信息选择并调用合适的HandlerAdapter处理器适配器。
(5)HandlerAdapter会调用并执行具体的Handler(处理器),这里的处理器指的就是程序中编写的Controller类,也被称之为后端处理器。
(6)Controller执行完毕后,会返回一个ModelAndView对象,该对象中会包含视图名称和封装的数据。
(7)HandlerAdapter将ModelAndView对象返回给前端控制器DispatcherServlet。
(8)DispatcherServlet会根据ModelAndView对象选择并调用合适的视图解析器ViewResolver。
(9)ViewResolver根据视图名称解析,返回一个具体的视图View给DispatcherServlet。
(10)DispatcherServlet对视图View进行渲染(即将模型数据填充到视图中)。
(11)视图渲染后的结果返回给客户端浏览器显示。

前端控制器相当于医院的智能导诊台。

具体以springmvc三大组件(处理器映射器。处理器适配器,视图解析器)分三大块:

在这里插入图片描述

springmvc小案例(不使用注解方式):

准备环境:idea开发工具2020.1.4(个人工具)、maven3.6.3、tomcat8.5.31.
在这里插入图片描述

第一步:
创建一个普通的maven工程模块/项目,然后右键模块,添加支持的框架,选择web-Application。

在这里插入图片描述

在这里插入图片描述

第二步:在项目中添加相应的springmvc依赖的jar,并检查web发布中是否有依赖

(1)导入的包有:
在这里插入图片描述
maven中依赖坐标这样写:
在这里插入图片描述

<dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>5.2.9.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.2.9.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.2</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>5.6.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>5.2.9.RELEASE</version>
        </dependency>
    </dependencies>

(2)然后在模块的工件Artifacts(打jar包的地方)中确保发布的项目中有lib文件夹和lib下的相关jar依赖。

在这里插入图片描述

在这里插入图片描述

第三步.在web项目中配置web.xml文件:

(1)配置前端控制DispatchServlet,指定spingmvc配置文件的位置
(2)配置拦截所有的请求

初始化参数配置
在这里插入图片描述
注意如果初始化参数不指定 springmvc.xml位置的话:
当我们在web-xml中不指定初始化参数绑定spring配置文件的话,系统会默认去web应用的/WEB-INF/下找一个名字叫:前端控制器名-servlet.xml。所以我们也可以自己去创建一个这个文件。

配置启动加载
在这里插入图片描述
如果load-on-startup元素不存在则应用程序会在第一个servlet请求是加载该DispatcherServlet.如果配置为1.表示服务器启动时,会立即加载该Servlet.
在这里插入图片描述
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">
    <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>/</url-pattern>
    </servlet-mapping>
</web-app>

第四步:框架自身的配置:springmvc的配置文件,三个核心组件(处理器映射器,处理器适配器,视图解析器)

原始视图返回做法:
在这里插入图片描述
视图解析器拼接做法:springmvc配置文件中配置视图解析器:
在这里插入图片描述

在这里插入图片描述
现在我们配置三个核心组件的完整效果:
在这里插入图片描述
springmvc.xml代码:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">

	<!--  配置处理器Handle,映射"/test"请求-->
    <bean id="/test" class="com.fan.controller.HelloController"></bean>

    <!--处理器映射器,将处理器Handle的name作为url进行查找-->
    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>
   
    <!--处理器适配器-->
    <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean>
    
    <!--  视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/pages/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>

</beans>

第五步.编写jsp

在这里插入图片描述

第六步:
(1)自定义类实现Controller接口,编写Controller逻辑:
在这里插入图片描述
HelloController 代码:

package com.fan.controller;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloController implements Controller {
    public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
        ModelAndView mv = new ModelAndView();
        mv.addObject("msg", "springwebmvc");
        mv.setViewName("test");
        return mv;
    }
}

(2)处理器映射器根据bean名字来找对应的处理类Controler
在这里插入图片描述

最后启动tomcat服务器测试

梳理springmvc执行流程:

在这里插入图片描述

使用注解完成springmvc案例:

前面几个步骤都一样:不同的是springmvc.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!--自动扫描base-package下的包或者子包下面的类,然后-把与spring相关
    的带注解的类,注入成spring容器中的bean-->
    <context:component-scan base-package="com.fan"></context:component-scan>

    <!--代替了HandelerMapping和HandlerAdapter两大组件-->
    <mvc:annotation-driven></mvc:annotation-driven>

    <!--使用默认的Servlet类响应静态文件-->
    <mvc:default-servlet-handler></mvc:default-servlet-handler>

    <!--视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/pages/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>

</beans>

在这里插入图片描述

在这里插入图片描述
mvc:annotation-driven作用:

会自动注册RequestMappingHandlerMapping与RequestMappingHandlerAdapter两个Bean,代替了自己手动配置那三大组件中的前两个,我们只需要配置注解驱动即可。这是Spring MVC为@Controller分发请求所必需的,并且提供了数据绑定支持,@NumberFormatannotation支持,@DateTimeFormat支持,@Valid支持读写XML的支持(JAXB)和读写JSON的支持(默认Jackson)等功能。
我们处理响应ajax请求时,就使用到了对json的支持。

对action写JUnit单元测试时,要从spring IOC容器中取DefaultAnnotationHandlerMapping与AnnotationMethodHandlerAdapter 两个bean,来完成测试,取的时候要知道是<mvc:annotation-driven />这一句注册的这两个bean。

mvc:default-servlet-handler标签的作用

使用默认的Servlet类过滤静态文件。使得静态资源不作为一个后台请求去调用controller,而是作为一个静态资源去解析。

mvc:default-servlet-handler标签的作用参考:https://blog.csdn.net/codejas/article/details/80055608

然后controller类:

package com.fan.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller//将此类对象注册到容器中
public class HelloController {

    //自定义的一个方法
    @RequestMapping("/hello")//请求的路径
    public String hello(Model model){//形参是数据模型类型Model,每次调用此方法,springmvc都会创建Model对象,并将其作为参数传递给方法。
        //封装数据,因为此方法返回值是String,不能携带数据,为了能携带数据,参数model通过调用addAttribute方法来添加需要的数据。
        model.addAttribute("msg","hello,springmvc");
        return "hello";//直接返回视图名称
    }
}

注意:使用注解方式,程序的运行需要依赖spring的AOP包。
与实现了Controller接口的方式(不适用注解)相比,注解更简单,同时Controller接口的实现类只能处理一个单一的请求,而注解可以同时处理多个请求。所以开发中用注解方式

在这里插入图片描述

然后将当前项目添加到tomcat中,并运行测试:

在这里插入图片描述

成功显示。

说明:请求处理方法的返回值可以是以下类型:ModelAndView,Model,Map,View,String,void,Callable等,但是开发中我们常用的是ModelAndView,String,void.

ModelAndView:可以添加数据并指定视图。
String:可以跳转视图。但不能携带数据.(如果要写到,方法参数中用Model)。
void:主要用在异步请求中,只能返回数据,而不会跳转视图。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值