• SpringMVC入门


    一、SpringMVC是什么

    Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把Model,View,Controller分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合。

    此外,Spring MVC 的注解驱动和对 REST 风格的支持,也是它最具特色的功能。无论是在框架设计,还是扩展性、灵活性等方面都全面超越了 Struts2 等 MVC 框架。并且由于 Spring MVC 本身就是 Spring 框架的一部分,所以可以说与 Spring 框架是无缝集成,性能方面具有先天的优越性,对于开发者来说,开发效率也高于其它的 Web 框架,在企业中的应用越来越广泛,成为主流的 MVC 框架。

    二、SpringMVC工作流程

    在这里插入图片描述

    1. 用户发来一个请求,首先进入的是前端控制器DispatcherServlet
    2. 前端控制器(DispacherServlet)将用户发来的请求发送给处理器映射器(HandlerMapping)
    3. 处理器映射器根据前端控制器发来的用户的请求找到对应符合的控制器(Handler),并且将其封装成处理器执行链,返回给前端控制器。
    4. 处理器适配器接收到来自前端控制器的执行链后,找到对应执行此执行链的处理器适配器(HandlerAdapter)来调用的具体的控制器(就是说其对应的方法或者逻辑)
    5. 处理器适配器 (HandlerAdaptoer) 会调用对应的具体的 Controller(处理业务逻辑)
    6. 控制器执行完成后,会返回一个ModelAndView对象给处理器适配器
    7. 处理器适配器将返回来的ModelAndView对象返回给前端控制器(到这里所有的业务处理过程就要完了,接下就是将结果以页面的的形式响应给用户)
    8. 前端控制器将返回回来的ModelAndView对象交给视图解析器(ViewResolver),视图解析器根据传过来的View对象解析成对应的页面对象
    9. ViewResolver 将封装好的将页面对象和Model对象返回给 DIspatcherServlet
    10. 前端控制器再将返回回来的对象交给视图(View)
    11. 视图根据传过来的Model对象再一次的对页面进行渲染(将模型数据填充至视图中),然后在返回给前端控制器。
    12. 前端控制器将完成的结果响应给浏览器,然后浏览器在展现给用户。

    三、SpringMVC核心组件

    • DispatcherServlet

    DispatcherServlet是SpringMVC框架了里面的前端控制器

    作用:统一处理用户发来的请求并和响应,相当于一个中间转换器,减少了各个组件之间的调度,减少的耦合性。

    • HandlerMapping

    HandlerMapping是SpringMVC框架里面的处理器映射器

    作用:根据请求发来的url 和method找到对应的Handler(就是说在一个用到SpringMVC框架的项目中会有好多方法和逻辑,这个组件的作用就是找到对应的方法和组件返回给前端控制器)

    • Handler

    Handler处理器,注意,这个需由工程师自己开发。

    作用:在 DispatcherServlet 的控制下,Handler对具体的用户请求进行处理。

    • HandlerAdapter

    HandlerAdapter是SpringMVC框架提供的处理器适配器

    作用:根据映射器找到的处理器Handler信息,按照特定的规则去执行相关的处理器 Handler。

    • ViewResolver

    ViewResolver是SpringMVC框架提供的视图解析器

    作用:就是字如其名,就是用来将处理的结果解析成视图来展现给用户。视图解析器根据逻辑视图名解析成物理视图名,生成View视图对象,最后对视图进行渲染响应给用户。

    • View

    View是开发者自己提供的视图

    作用:根据model对象的要求来渲染页面,然后前端控器在响应给用户。

    四、入门案例

    4.1 添加pom.xml依赖

    
    <jstl.version>1.2jstl.version>
    <standard.version>1.1.2standard.version>
    
    <spring.version>5.0.2.RELEASEspring.version>
    ...
    
    <dependency>
        <groupId>org.springframeworkgroupId>
        <artifactId>spring-webmvcartifactId>
        <version>${spring.version}version>
    dependency>
    <dependency>
        <groupId>jstlgroupId>
        <artifactId>jstlartifactId>
        <version>${jstl.version}version>
    dependency>
    <dependency>
        <groupId>taglibsgroupId>
        <artifactId>standardartifactId>
        <version>${standard.version}version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    4.2 创建spring-mvc.xml

    
    <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:mvc="http://www.springframework.org/schema/mvc"
           xmlns="http://www.springframework.org/schema/beans"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
          http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
        
        <context:component-scan base-package="com.ycxw"/>
     
        
        <mvc:annotation-driven/>
     
        
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            
            <property name="viewClass"
                      value="org.springframework.web.servlet.view.JstlView">property>
            <property name="prefix" value="/WEB-INF/jsp/"/>
            <property name="suffix" value=".jsp"/>
        bean>
     
        
        
    beans>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    1.扫描com.ycxw及其子包下的控制器,使用context:component-scan标签实现。
    2.注册了支持注解驱动的组件,使用mvc:annotation-driven标签实现。
    3.创建了一个视图解析器,用于解析JSP视图,使用标签实现。
    4.配置了处理静态资源(如CSS、JS和图片),使用mvc:resources标签实现。

    4.3 配置web.xml

    
    <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_3_1.xsd"
             version="3.1">
      <display-name>Archetype Created Web Applicationdisplay-name>
      
      
      <context-param>
        <param-name>contextConfigLocationparam-name>
        <param-value>classpath:spring-context.xmlparam-value>
      context-param>
      
      <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class>
      listener>
      
     
      
      <filter>
        <filter-name>encodingFilterfilter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilterfilter-class>
        <async-supported>trueasync-supported>
        <init-param>
          <param-name>encodingparam-name>
          <param-value>UTF-8param-value>
        init-param>
      filter>
      <filter-mapping>
        <filter-name>encodingFilterfilter-name>
        <url-pattern>/*url-pattern>
      filter-mapping>
      
      <servlet>
        <servlet-name>SpringMVCservlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
        
        <init-param>
          <param-name>contextConfigLocationparam-name>
          <param-value>classpath:spring-mvc.xmlparam-value>
        init-param>
        <load-on-startup>1load-on-startup>
        
        <async-supported>trueasync-supported>
      servlet>
      <servlet-mapping>
        <servlet-name>SpringMVCservlet-name>
        <url-pattern>/url-pattern>
      servlet-mapping>
    web-app>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50

    配置步骤:

    1. 配置Spring与Web项目集成
    2. 配置中文乱码过滤器
    3. 配置SpringMVC核心控制器DispatcherServlet

    4.4 SpringMVC配置Web

    package com.xqx.web;
     
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
     
    
    @Controller
    public class DemoController {
        @RequestMapping(value="/hello")
        public String hello(){
            System.out.println("调用了hello方法...");
            return null;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    1. 该类使用了@Controller注解,表示它是一个控制器组件。
    2. 在该控制器类中,定义了一个处理请求的方法hello(),它使用@RequestMapping注解来指定处理的URL路径为"/hello"。当客户端发送一个匹配该路径的请求时,该方法会被调用。

    4.5 jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>SpringMVCtitle>
    head>
    <body>
    HelloWorld
    body>
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述

    4.6 静态资源处理

    所有文件都会被spring-mvc.xml配置文件进行拦截,所以要添加配置,让处理器扫描扫该资源

    <mvc:resources location="/static/" mapping="/static/**"/>
    
    • 1
  • 相关阅读:
    ensp——防火墙安全策略配置实验
    Unity中C#的 == 和 Equals 的区别是什么
    neo4j图数据库基本概念
    剑指 Offer 09. 用两个栈实现队列
    springweb层控制类的使用
    基于粒子群算法优化BP神经网络的PID控制算法(Matlab代码实现)
    2021秋招---leetcode-总结
    BUUCTF crypto做题记录(8)新手向
    HttpClient发送MultipartFile多文件及多参数请求
    代码随想录训练营第47天休息日|210.课程表II
  • 原文地址:https://blog.csdn.net/TestXzing/article/details/132679162