SpringMvc-原理和入门

11 篇文章 0 订阅
7 篇文章 0 订阅

SpringMvc

SpringMvc是Spring框架中的产品之一,对应的解释,博主不再赘述,我们学习Spring,也不得不学习SpringMvc。

SpringMvc执行流程

在这里插入图片描述

大致过程如上图,深色框中的都不需要我们实现,我们仅仅需要关注Handler和View的部分,其他都由SpringMvc实现。
具体流程如下:

  1. 用户发起访问。
  2. DispatcherServlet根据用户的请求路径在HandlerMapping中查找对应的Handler。
  3. HandlerMapping生成处理器执行链HandlerExecutionChain(包括处理器对象和处理器拦截器)一并返回给DispatcherServlet。
  4. DispatcherServlet根据处理器Handler获取处理器适配器HandlerAdapter执行一系列的操作(比如请求数据封装,数据格式转换和数据验证等操作)。
  5. 执行处理器Handler(Controller控制器)。
  6. Handler处理完成后返回ModelAndView给处理器适配器。
  7. HandlerAdapter将Handler的执行结果ModelAndView返回给DispatcherServlet。
  8. DispatcherServlet将HandlerAdapter返回的ModelAndView传给ViewResolver解析。
  9. ViewResolver解析之后返回具体的View给DispatcherServlet。
  10. DispatcherServlet根据ViewResolver返回的View进行视图渲染(将ModelAndView中的Model数据填充到视图View中)。
  11. DispatcherServlet响应给用户。

入门案例

  1. 创建Maven项目,导入如下依赖:
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.2.4.RELEASE</version>
</dependency>

<!--演示原理需要,实际开发不会导入该依赖-->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>2.5</version>
</dependency>
  1. 在resources中编写SpringMvc配置文件springMvc-config.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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--处理器映射器:
        DispatcherServlet先通过处理器映射器找到处理对应请求的Handler(我们自己编写的类和方法)
    -->
    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>

    <!--处理器适配器:
        按照特定的规则去执行对应的Handler
    -->
    <bean class= "org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>

    <!--视图解析器:
        1.获取ModelAndView中的数据
        2.解析ModelAndView的视图名字
        3.根据视图解析器拼接这个视图名字,并找到响应的视图
        4.将ModelAndView中的数据渲染到这个视图中
        5.最后视图就呈现在用户的浏览器上
    -->
    <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

</beans>

  1. 在web中的WEB-INF下配置web.xml文件(让所有的请求都交由SpringMvc处理):
<servlet>
    <servlet-name>springMvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

    <!--配置DispatcherServlet要绑定Spring的配置文件-->
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:springMvc-config.xml</param-value>
    </init-param>

    <!--配置DispatcherServlet的启动级别为1,与服务器同时启动加载-->
    <load-on-startup>1</load-on-startup>

</servlet>

<!--
    /和/*的区别:
        /:只匹配所有的请求,不会去匹配jsp页面
        /*:匹配所有的请求,包括jsp页面
-->
<servlet-mapping>
    <servlet-name>springMvc</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

  1. 编写Handler处理类(HelloController):
package com.ara.controller;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

//实现Controller接口 表示这是一个处理器
public class HelloController implements Controller {
    //实现接口的方法 处理请求的方法
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {

        ModelAndView modelAndView = new ModelAndView();

        //设置返回数据Model
        String result = "Hello SpringMVC";
        modelAndView.addObject("msg",result);

        //设置返回视图
        modelAndView.setViewName("test");

        return modelAndView;
    }
}

  1. 在WEB-INF下创建jsp目录,然后创建test.jsp页面,作为视图。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%--取出模型中的数据--%>
${msg}
</body>
</html>

  1. 在SpringMvc的配置文件中添加处理器的bean:
<!-- BeanNameUrLHandlerMapping :bean id:对应请求路径-->
<bean id="/hello" class="com.ara.controller.HelloController"/>

  1. 现在我们就可以直接配置Tomcat,运行看结果了,我们运行之后就直接访问该项目下的hello,结果如下:
    在这里插入图片描述

到此,我们的第一个SpringMvc的入门程序就成功了。

当然,实际开发我们不会这样做,这个入门仅仅为了展示其原理,实际的开发,我们更多的是用注解开发,但是我们在学习时,需要先了解其原理,然后再学习简单的操作。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值