SpringMVC01--SpringMVC概述

SpringMVC01--SpringMVC概述

1.1 SpringMVC简介

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

1.2 SpringMVC优点

  1. 基于 MVC 架构
    基于 MVC 架构,功能分工明确,解耦合。
  2. 容易理解,上手快,使用简单。
    SpringMVC 也是轻量级的,jar 很小。不依赖特定的接口和类。
  3. 作为 Spring 框架一部分,能够使用 Spring 的 IOC 和 AOP 方便整合Strtus,MyBatis,Hiberate,JPA 等其他框架。
  4. SpringMVC 强化注解的使用,在控制器,Service,Dao 都可以使用注解 ,方便灵活。
    使用@Controller 创建处理器对象,@Service 创建业务对象,@Autowired 或者@Resource在控制器类中注入 Service, Service 类中注入 Dao。

1.3 第一个SpringMVC程序

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

1.3.1 新建Maven web项目

SpringMVC01--SpringMVC概述

1.3.2 添加Maven依赖

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.2.5.RELEASE</version>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <!-- 编码和编译和JDK版本 -->
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.1</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
    </plugins>
  </build>

1.3.3 注册*调度器

webapp/WEB-INF/web.xml

	<!--注册springmvc的核心对象DispatcherServlet-->
    <servlet>
        <servlet-name>myweb</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--自定义springmvc读取的配置文件的位置-->
        <init-param>
            <!--springmvc的配置文件的位置的属性-->
            <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>myweb</servlet-name>
        <!--
            使用框架的时候, url-pattern可以使用两种值
            1. 使用扩展名方式, 语法 *.xxxx , xxxx是自定义的扩展名。 常用的方式 *.do, *.action, *.mvc等等
               不能使用 *.jsp
               http://localhost:8080/myweb/some.do
               http://localhost:8080/myweb/other.do
            2.使用斜杠 "/"
        -->
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>

1)全限定性类名

该*调度器为一个 Servlet,名称为 DispatcherServlet。*调度器的全限定性类名在导入的 Jar 文件 spring-webmvc.jar 的org.springframework.web.servlet下可找到。

2)load-on-startup

<servlet/>中添加的作用是,标记是否在Web服务器(这里是Tomcat)启动时会创建这个 Servlet 实例,即是否在 Web 服务器启动时调用执行该 Servlet 的 init()方法,而不是在真正访问时才创建。

它的值必须是一个整数。

当值大于等于 0 时,表示容器在启动时就加载并初始化这个 servlet,数值越小,该 Servlet的优先级就越高,其被创建的也就越早;
当值小于 0 或者没有指定时,则表示该 Servlet 在真正被使用时才会去创建。
当值相同时,容器会自己选择创建顺序。

3)url-pattern

对于<url-pattern/>,可以写为 / ,建议写为 *.do 或者 *.action的形式。

1.3.4 创建SpringMVC配置文件

SpringMVC01--SpringMVC概述

1.3.5 创建处理器

在类上与方法上添加相应注解即可。
@Controller:表示当前类为处理器
@RequestMapping:表示当前方法为处理器方法。该方法要对 value 属性所指定的 URI进行处理与响应。被注解的方法的方法名可以随意。

package com.suyv.controller;

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

/**
 *  @Controller:创建处理器对象,对象放在springmvc容器中。
 *  位置:在类的上面
 *  和Spring中讲的@Service ,@Component
 */
@Controller
public class MyController {
    /**
     * @RequestMapping: 请求映射,作用是把一个请求地址和一个方法绑定在一起。
     *                  一个请求指定一个方法处理。
     *       属性: 1. value 是一个String,表示请求的uri地址的(some.do)。
     *                value的值必须是唯一的, 不能重复。 在使用时,推荐地址以“/”
     *       位置:1.在方法的上面,常用的。
     *            2.在类的上面
     *  返回值:ModelAndView 表示本次请求的处理结果
     *   Model: 数据,请求处理完成后,要显示给用户的数据
     *   View: 视图, 比如jsp等等。
     */
    @RequestMapping(value = {"/some.do","first.do"})
    public ModelAndView doSome(){  
        ModelAndView mv = new ModelAndView();
        //添加数据, 框架在请求的最后把数据放入到request作用域。
        //request.setAttribute("msg","欢迎使用springmvc做web开发");
        mv.addObject("msg","欢迎使用springmvc做web开发");
        mv.addObject("fun","执行的是doSome方法");
        //指定视图, 指定视图的完整路径
        //当配置了视图解析器后,可以使用逻辑名称(文件名),指定视图
        //框架会使用视图解析器的前缀 + 逻辑名称 + 后缀 组成完成路径, 这里就是字符连接操作
        mv.setViewName("show");
        //返回mv
        return mv;

    }
    @RequestMapping(value = {"other.do","secend.do"})
    public ModelAndView doOther(){
        ModelAndView mv = new ModelAndView();
        mv.addObject("msg","欢迎使用springmvc做web开发");
        mv.addObject("fun","执行的是doOther方法");
        mv.setViewName("other");
        return mv;
    }
}

1.3.6 声明组件扫描器

    <!--声明组件扫描器-->
    <context:component-scan base-package="com.suyv.controller" />

1.3.7 定义目标页面

在 webapp 目录下新建一个子目录 view,在其中新建一个 jsp 页面 show.jsp与other.jsp。
other.jsp
SpringMVC01--SpringMVC概述
show.jsp
SpringMVC01--SpringMVC概述

1.3.8 配置视图解析器

    <!--声明 springmvc框架中的视图解析器, 帮助开发人员设置视图文件的路径-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--前缀:视图文件的路径-->
        <property name="prefix" value="WEB-INF/view/"></property>
        <!--后缀:视图文件的扩展名-->
        <property name="suffix" value=".jsp"></property>
    </bean>

1.3.9 修改index.jsp页面

SpringMVC01--SpringMVC概述

1.3.10 执行结果

SpringMVC01--SpringMVC概述
SpringMVC01--SpringMVC概述

SpringMVC01--SpringMVC概述

1.4 SpringMVC的MVC组件

SpringMVC01--SpringMVC概述

1.5 SpringMVC 执行流程

1.5.2 流程图

SpringMVC01--SpringMVC概述

1.5.2 执行流程简单分析

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

上一篇:springMVC总结


下一篇:Linux常用命令