SpringMVC(浅谈)

SpringMVC

一、课程目标

1. 【理解】什么是SpringMVC
2. 【掌握】Spring的快速入门
3. 【理解】SpringMVC的执行流程
4. 【理解】SpringMVC的三大组件
5. 【掌握】SpringMVC的常用注解

二、回顾MVC

MVC是模型(Model) 、视图(View) 、控制器(Controller) 的缩写,是一种软件设计规范。

Model : javaBean (1.处理业务逻辑,2. 封装数据)
View: 视图  jsp/html(展示数据)
controller:控制器 (1.接收请求,2.调用模型,3.转发视图)

是将业务逻辑、数据、显示进行分离的方式来组织代码。

MVC主要作用是降低了视图与业务逻辑间的耦合度。

MVC不是一种设计模式,MVC是一种架构模式。当然不同的MVC存在一些差异!

最典型的MVC就是JSP+servlet+JavaBean的模式。

在这里插入图片描述

三、SpringMVC概述

Spring MVC是Spring Framework的一部分,是基于Java实现MVC的轻量级Web框架。它可以通过一套注解,让一个简单的Java类成为控制器,而无须实现任何接口。

简单一句话:SpringMVC简化Servlet的开发!!

总结:

SpringMVC主要解决web层的代码,本质是Servlet

3.1 Spring MVC的特点

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

四、SpringMVC快速入门

4.1 编写步骤

1. 创建web项目

2. 导入坐标

<!--依赖管理-->
<dependencies>
    <!--springMVC-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.1.5.RELEASE</version>
    </dependency>

    <!--servlet-->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.5</version>
        <scope>provided</scope>
    </dependency>
    <!--jsp-->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jsp-api</artifactId>
        <version>2.0</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

3. 配置前端控制器

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
         version="2.5">

    <!--前端控制器-->
    <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:spring-mvc.xml</param-value>
        </init-param>
        <!--指定servlet在tomcat启动时创建-->
        <load-on-startup>1</load-on-startup>
    </servlet>

    <!--拦截url规则:/(默认)-->
    <servlet-mapping>
        <servlet-name>DispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

4.编写controller和jsp

public class HelloWorldController {
    public String hello() {
        System.out.println("HelloWorldController 执行了....");
        return "/WEB-INF/jsp/hello.jsp";
    }
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>Title</title>
    </head>
    <body>
        Hello SpringMVC!!!
    </body>
</html>

5.配置controller

@Controller // 将该类交给Spring的ioc进行管理
public class HelloWorldController {
    // 请求的路径,一个请求对应一个方法
    @RequestMapping("/hello") 
    public String hello() {
        System.out.println("HelloWorldController 执行了....");
        // 转发到hello.jsp页面
        return "/WEB-INF/jsp/hello.jsp";
    }
}

6.编写spring-mvc.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: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/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="cn.yunhe.controller"/>

    <!--开启mvc注解支持-->
    <mvc:annotation-driven/>
</beans>

7.部署测试代码

在这里插入图片描述

4.2 SpringMVC执行流程

简易版

在这里插入图片描述

完整版

在这里插入图片描述

(1).发起请求到前端控制器(DispatcherServlet);

(2).前端控制器请求HandlerMapping查找Handler,可以根据xml配置、注解进行查找;

(3).处理器映射器HandlerMapping向前端控制器返回Handler;

(4).前端控制器调用处理器适配器去执行Handler;

(5).处理器适配器去执行Handler;

(6).Handler执行完成给适配器返回ModelAndView;

(7).处理器适配器向前端控制器返回ModelAndView(是springmvc框架的一个底层对象,包括Model和View);

(8).前端控制器请求视图解析器去进行视图解析,根据逻辑视图名称解析真正的视图(jsp…);

(9).视图解析器向前端控制器返回View;

(10).前端控制器进行视图渲染,视图渲染就是将模型数据(在ModelAndView对象中)填充到request域中。

(11).前端控制器向用户响应结果。

五、SpringMVC组件

5.1 SpringMVC三大组件

DispatcherServlet前端控制器,接收所有的请求(如果配置不包含jsp)
HandlerMapping将 请求url 和 处理器的方法 建立映射关系
HandlerAdapter负责调用具体的方法
ViewResovler视图解析器,解析结果,准备跳转到具体的视图

5.2 InternalResourceViewResolver视图解析分析

第一次使用SpringMVC,SpringMVC已经帮我们做好了默认的配置,我们直接使用即可!

在HelloWorldController中的hello方法的返回值是一个String,返回的结果是=="/WEB-INF/jsp/hello.jsp"==

将我们的视图页面做为字符串进行返回,InternalResourceViewResolver又是如何解析跳转到hello.jsp页面呢?
在这里插入图片描述

5.3 自定义视图解析器

5.3.1 修改spring_mvc.xml

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/jsp"></property>
    <property name="suffix" value=".jsp"></property>
</bean>

5.3.2 修改HelloWorldController

@RequestMapping("/hello") // 请求的路径
public String hello() {
    System.out.println("HelloWorldController 执行了....");
    return "hello";
}

5.3.3 测试

5.3.4 总结

在这里插入图片描述

六、常用注解

6.1 Controller

SpringMVC基于Spring容器,所以在进行SpringMVC操作时,需要将Controller存储到Spring容器中,故使用此注解

Controller的使用有两种方式:

  • 使用接口【了解】

    • 编写一个Controller类实现Controller接口

      //定义控制器
      //注意点:不要导错包,实现Controller接口,重写方法;
      public class ControllerTest1 implements Controller {
      
         public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
             //返回一个模型视图对象
             ModelAndView mv = new ModelAndView();
             mv.addObject("msg","Test1Controller");
             mv.setViewName("test");
             return mv;
        }
      }
      

    注意:Controller接口,是在org.springframework.web.servlet.mvc包下,接口中只有一个方法

    • 配置Controller

      <bean name="/t1" class="com.kuang.controller.ControllerTest1"/>
      

    说明:

    • 实现接口Controller定义控制器是较老的办法
    • 缺点是:一个控制器中只有一个方法,如果要多个方法则需要定义多个Controller;定义的方式比较麻烦;
  • 使用@Controller注解

    @Controller注解类型用于声明Spring类的实例是一个控制器,为了保证Spring能找到你的控制器,需要在配置文件中声明组件扫描。

    <!-- 自动扫描指定的包,下面所有注解类交给IOC容器管理 -->
    <context:component-scan base-package="cn.yunhe.controller"/>
    

6.2 RequestMapping

@RequestMapping注解用于映射url到控制器类或一个特定的处理程序方法。可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。

  • 用在方法上

    @RequestMapping("/hello") // 请求的路径
    public String hello() {
        System.out.println("HelloWorldController 执行了....");
        return "hello";
    }
    
    • 访问路径

      http://localhost:8080/hello

  • 用在类上

    @Controller
    @RequestMapping("/quick")
    public class HelloWorldController {
        @RequestMapping("/hello") // 请求的路径
        public String hello() {
            System.out.println("HelloWorldController 执行了....");
            return "hello";
        }
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值