1.SpringMVC概述

Posted 小马Mark

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1.SpringMVC概述相关的知识,希望对你有一定的参考价值。

SpringMVC简介

SpringMVC 也叫 Spring web mvc。是 Spring 框架的一部分,是在 Spring3.0 后发布的。

Spring 框架提供了构建 Web应用程序的全功能 MVC 模块。

使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的Spring MVC框架或集成其他MVC开发框架,如Struts1(现在一般不用),Struts 2(一般老项目使用)等等。

SpringMVC优点

  1. 基于MVC架构,功能分工明确,解耦合
  2. 开发一个注解的 SpringMVC 项目,SpringMVC 是轻量级的,jar 很小。不依赖的特定的接口和类。
  3. 作为Spring框架一部分,能够使用Spring的IoC和Aop 。方便整合Struts,MyBatis,Hibernate,JPA 等其他框架。
  4. SpringMVC强化注解的使用,在控制器,Service,Dao 都可以使用注解。方便灵活。
    • 使用@Controller 创建处理器对象,@Service 创建业务对象,@Autowired 或者@Resource在控制器类中注入 Service, Service 类中注入 Dao。

第一个SpringMVC程序

所谓 SpringMVC 的注解式开发是指,在代码中通过对类与方法的注解,便可完成处理器在 springmvc 容器的注册。(注解式开发是重点)

实现步骤

  1. 新建一个maven的web项目

  2. pom.xml中导入依赖

    导入springmvc依赖就间接导入了spring的依赖

  3. 注册中央调度器(核心)

    • 在web.xml文件中注册springmvc框架的核心对象DispatcherServlet
    • DispatcherServlet叫做中央调度器,实际上是Servlet,其父类是继承了HttpServlet
    • DispatcherServlet也叫做前端控制器(front controller)
    • DispatcherServlet负责接收用户提交的请求,调用其他的控制器对象,并把请求的处理结果显示给用户。
  4. 创建控制器类

    • 在类的上面加入@Controller注解,用来创建对象,并放入到springmvc容器中
    • 在类中的方法上面加入@RequestMapping注解
  5. 创建springmvc的配置文件(spring配置文件一样)

    • 声明组件扫描器,指定@Controller注解所在包名
    • 声明视图解析器,帮助处理视图
  6. 创建视图文件,用来发起请求和接收服务器返回的数据

  7. 配置Tomcat,启动tomcat,进行测试

导入依赖

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>
<!-- springMVC的依赖 -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.2.5.RELEASE</version>
</dependency>

注册中央调度器

在web.xml文件中

    <!--
        声明注册springmvc的核心对象DispatcherServlet,注册中央调度器
    -->
    <servlet>
        <servlet-name>myMvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

        <!--自定义springmvc读取的配置文件的位置
                不自定义读取位置,springmvc默认是读取的WEB-INF/<servlet-name>-servlet.xml
                                                    (WEB-INF/myMvc-servlet.xml)
        -->
        <init-param>
            <!--指定springmvc的配置文件的位置的属性-->
            <param-name>contextConfigLocation</param-name>
            <!--指定自定义文件位置classpath:***   ,从类路径开始,即resources目录下-->
            <param-value>classpath:springmvc.xml</param-value>
        </init-param>
        <!--
            让DispatcherServlet随着Tomcat服务器的启动而创建对象
        -->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <!--指定哪些路径下的使用myMvc配置的对象-->
    <servlet-mapping>
        <servlet-name>myMvc</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>

说明:

  1. 该中央调度器为一个 Servlet,名称为 DispatcherServlet。中央调度器的全限定性类名在导入的 Jar 文件 spring-webmvc-5.2.5.RELEASE.jar 的第一个包 org.springframework.web.servlet下可找到。
  2. <servlet/>中添加<load-on-startup/>的作用:
    • 标记是否在Web服务器(这里是Tomcat)启动时会创建这个 Servlet 实例,即是否在 Web 服务器启动时调用执行该 Servlet 的 init()方法,而不是在真正访问时才创建。
    • <load-on-startup/>:表示Tomcat启动后创建对象的顺序
      • 值是最好一个非负整数(>=0),数值越小,Tomcat创建其对象越早
      • 如果值为负数或者没有指定,则表示Servlet 在真正被使用时才会去创建
      • 如果有其他的与其值相同,则容器会自己选择创建顺序
  3. 对于<url-pattern/>,可以写为 / ,建议写为*.do 的形式

创建控制器类

package com.maj.controller;

/*
 * 处理用户提交的请求,springmvc中是使用方法处理的
 *   方法是自定义的,可以有多种返回值,多种参数,方法名称自定义
 * */


import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller  // 默认创建对象的名称为myController
public class MyController 

    /**
     * 使用doSome()方法进行处理some.do的请求
     *
     * @RequestMapping:请求映射 
     * 作用:把一个请求地址和一个方法绑定在一起,一个请求指定一个方法处理
     * 		使用@RequestMapping修饰的方法可以处理请求,类似于Servlet中doGet()和doPost()方法
     * 属性:
     * 		1.value是一个String,表示请求的uri地址的,值必须唯一
     * 				使用时,推荐使用地址以"/...."开头
     				value属性的值可以是一个String或者一个String数组,表示一个地址或者多个
     * 位置:1.在方法上使用
     * 		2.在类上使用
     * <p>
     * 返回值:ModelAndView是springmvc框架中的类,表示本次请求处理的结果
     * Model:数据,请求处理完毕后,要显示给用户的数据
     * View:视图,比如JSP等等
     */
    @RequestMapping(value = "/some.do")
    public ModelAndView doSome() 

        // 调用service处理请求,把处理结果放入到返回值ModelAndView中
        ModelAndView mv = new ModelAndView();
        /*
           添加返回数据
           等返回ModelAndView后,框架在请求的最后把数据放入到request作用域中
                request.setAttribute("msg", "欢迎使用springmvc");
        */
        mv.addObject("msg", "欢迎使用springmvc");

        /*
            指定视图(完整的视图路径)
            等返回ModelAndView后,框架对视图执行forward操作:
         request.getRequestDispather("/WEB-INF/view/show.jsp").forward(request,response);
        */
        mv.setViewName("/WEB-INF/view/show.jsp");

        return mv;
    


创建springmvc的配置文件

<?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: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/context
       https://www.springframework.org/schema/context/spring-context.xsd">

    <context:component-scan base-package="com.maj.controller" />
</beans>

创建视图文件

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <h1>第一个springMVC程序</h1>
    <h3><a href="some.do">发起some.do的请求</a></h3>
</body>
</html>

show.jsp在/WEB-INF/view/目录下:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title> 
</head>
<body>
    <h1>show.jsp页面</h1>
    <p>msg数据:$requestScope.msg</p>
</body>
</html> 

到这里基本web流程就可完成,以上的就可以进行测试。

修改视图解析器的注册

SpringMVC 框架为了避免对于请求资源路径与扩展名上的冗余,在视图解析器InternalResouceViewResolver 中引入了请求的前辍与后辍。

ModelAndView 中只需给出要跳转页面的文件名即可,对于具体的文件路径与文件扩展名,视图解析器会自动完成拼接。

    <!--视图解析器,设置视图文件的路径-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--前缀:视图文件的路径-->
        <property name="prefix" value="/WEB-INF/view/"/>
        <!--后缀:视图文件的后缀-->
        <property name="suffix" value=".jsp" />
    </bean>

简单执行流程

  1. 浏览器提交请求到中央调度器
  2. 中央调度器直接将请求转给处理器映射器。
  3. 处理器映射器会根据请求,找到处理该请求的处理器,并将其封装为**处理器执行链(HandlerExecutionChain)**后返回给中央调度器。
  4. 中央调度器根据处理器执行链中的处理器,找到能够执行该处理器的处理器适配器。
  5. 处理器适配器调用执行处理器。
  6. 处理器将处理结果及要跳转的视图封装到一个对象 ModelAndView 中,并将其返回给处理器适配器。
  7. 处理器适配器直接将结果返回给中央调度器。
  8. 中央调度器调用视图解析器,将 ModelAndView 中的视图名称封装为视图对象。
  9. 视图解析器将封装了的视图对象返回给中央调度器
  10. 中央调度器调用视图对象,让其自己进行渲染,即进行数据填充,形成响应对象。
  11. 中央调度器响应浏览器。

说明:

  • **处理器映射器:**框架把实现了HandlerMapping接口的类都叫映射器(可以有多个)

    • 作用:根据请求,从springmvc容器对象中获取处理器对象
  • **HandlerExecutionChain:**类中保存了处理器对象和项目中所有的拦截器List<HandlerInterceptor>

  • **处理器适配器:**springmvc框架中的对象实现了HandlerAdapter接口都是适配器

    • 作用:执行处理器方法,得到处理器的处理结果
  • **视图解析器:**springmvc框架中实现了ViewResoler接口的类(可以多个)

    • 作用:使用前缀,后缀组成视图完整路径,创建View对象。
    • View是一个接口,表示视图的,在框架中jsp,html不是string表示,而是使用View及其实现类表示视图

以上是关于1.SpringMVC概述的主要内容,如果未能解决你的问题,请参考以下文章

1.SpringMVC概述

1.SpringMVC概述

1.SpringMVC概述

SpringMVC 框架系列之组件概述与配置详解

资源: 资源限定符概述, 资源限定符示例

SpringMvc介绍。