zoukankan      html  css  js  c++  java
  • Spring MVC温故而知新 – 从零开始

    Spring MVC简介

    Spring MVC是一款基于MVC架构模式的轻量级Web框架,目的是将Web开发模块化,对整体架构进行解耦。

    Spring MVC有一下优点:

    作为Spring框架的一部分,拥有Spring的优点(IOC,AOP等)

    支持灵活的URL到页面控制器的映射

    提供灵活的数据验证、格式化、数据绑定机制

    支持RESTful风格

    Spring MVC请求流程

    Spring MVC框架的整体请求流程如下:

    上图中涉及到Spring MVC的几个功能组件:

    前端控制器(DispatcherServlet):接收用户请求并返回请求结果。它的作用相当于一个转发器或中央处理器,控制整个执行流程,对各组件进行调度降低组件之间的耦合。

    处理器映射器(HandlerMapping):根据用户请求的URL,通过注解或者XML配置,查找相应的处理器Handler

    处理器适配(HandlerAdapter):根据映射器查找出的Handler,完成调用处理器中的方法

    处理器(Handler):请求处理的具体逻辑,返回数据和视图信息

    视图解析器(View Resolver):解析具体视图,通过ModelAndView对象中的View信息,将逻辑视图名解析成真正的视图View

     请求流程具体步骤详解:

    1:用户发起请求,请求会被前端控制器(DispatcherServlet)拦截

    2:前端控制器(DispatcherServlet)请求处理器映射器(HandlerMapping)查找Handler

    3:处理器映射器(HandlerMapping)根据配置找到相应Handler(可以更具注解或者XML配置),可能包含多个Interceptor拦截器,返回给前端控制器

    4:前端控制器(DispatcherServlet)请求处理器适配器(HandlerAdapter)去执行相应的Handler

    5:适配器交由对应Handler处理器执行

    6:  Handler处理器执行完成后返回ModelAndView对象给处理器适配器

    7:处理器适配器接受Handler处理器的返回结果,并将该结果返回给前端控制器(DispatcherServlet)

    8:前端控制器(DispatcherServlet)接收处理器适配器返回的数据和视图信息,请求视图解析器,解析对应的视图

    9:视图解析器根据View信息匹配的相应的视图结果,反回给前端控制器

    10:前端控制器接收具体视图,进行视图渲染,将Model数据填充到View视图中,生成最终视图

    11:前端控制器向用户返回结果

    从零开始搭建demo

    创建工程:

    Eclipse下新建一个动态Web项目

    工程默认目录结构:

     添加jar包依赖

    WebContent > WEB-INF > lib 文件夹下导入相应的jar包,其中核心的jar包是spring-webmvc-5.0.0.RELEASE.jar,其他是几个主要是spring用于管理上下文和beande 包、jstl标签库和一个用于打印日志的log包:

    在web.xml中配置前端控制器

     前端控制器相当于Spring MVC的专有servlet,用于拦截所有符合条件的请求,交由框架做后续处理

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
            xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
            xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" 
            id="WebApp_ID" 
            version="3.1">
            
      <!-- 配置前端控制器-DispatchServlet  -->
      <servlet>
      <servlet-name>springMvcNext</servlet-name>
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    
      <!-- contextConfigLocation不是必须的, 如果不配置contextConfigLocation, springmvc的配置文件默认在:WEB-INF/servlet的name+"-servlet.xml" -->
      <init-param>
              <param-name>contextConfigLocation</param-name>
            <param-value>classpath:applicationContext.xml</param-value>
      </init-param>
      </servlet>
      
      <servlet-mapping>
      <servlet-name>springMvcNext</servlet-name>
      <url-pattern>/</url-pattern> <!--根据url-pattern设定的规则拦截用户发来的请求 此处拦截所有请求,包括静态资源 ->
      </servlet-mapping>
     
    </web-app>

    其中<servlet-mapping>标签中定义url匹配规则为符合*.action的形式,对应的servlet名为springMvcNext,而<servlet>配置的控制器为org.springframework.web.servlet.DispatchServlet,该控制器为当前SpringMVC项目的前端控制器,<init-param>标签为当前控制器依赖的参数,两个参数分别代表上下文参数和参数加载路径。

    关于classpath:代表web项目编译后编译后的输出路径

    配置spring MVC配置

    在java源代码更目录下添加applicationContext.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:p="http://www.springframework.org/schema/p"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:mvc="http://www.springframework.org/schema/mvc"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security.xsd
            http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    
        <!-- 包扫描器  标签将用于激活Spring MVC注释扫描功能,允许使用@Controller和@RequestMapping等注释。-->
        <context:component-scan base-package="com.sl.controller" />
        
        <!-- 注解驱动 -->
        <mvc:annotation-driven />
        
        <!-- 配置视图解析器 -->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"  id="internalResourceViewResolver">
            <property name="prefix" value="/WEB-INF/view/" />
            <property name="suffix" value=".jsp" />
        </bean>
    </beans>

    添加控制器Controller与视图View

      

    Src目录下添加包com.sl.controller,添加控制器代码如下:

    package com.sl.controller;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.servlet.ModelAndView;
    
    @Controller
    public class HelloWorldController {
        
        @RequestMapping("/index")  //处理URL路径中以/index开头的所有请求: 包括 /index/* 和 /index.html
        public ModelAndView helloWorld() {
    
            String message = "Hello Spring MVC";
            return new ModelAndView("index", "message", message);
        }
    }

    在WEB-INF/view中添加视图文件index.jsp

    <html>
    <head>
        <title>Spring MVC </title>
    </head>
    <body>
        ${message}
    </body>
    </html>

    运行结果:

  • 相关阅读:
    杭电OJ-1031_Design T-Shirt
    杭电OJ-1036_Average is not Fast Enough!
    2019杭电多校一 L. Sequence (NTT)
    Binary Table CodeForces
    2019牛客多校一 H. XOR (线性基)
    Jzzhu and Numbers CodeForces
    Geometers Anonymous Club CodeForces
    [笔记] 扩展卢卡斯
    Luogu P2183 [国家集训队]礼物 扩展卢卡斯+组合数
    Luogu P4901 排队 fib数列+树状数组+倍增
  • 原文地址:https://www.cnblogs.com/ashleyboy/p/9054036.html
Copyright © 2011-2022 走看看