SpringMVC 配置

一、MVC 模式简介

在软件开发的广袤天地中,MVC 模式宛如一座明亮的灯塔,指引着开发者构建高效、可维护的应用程序。Spring MVC 作为基于 Spring 框架的重要 web 开发模块,更是将 MVC 模式的优势发挥得淋漓尽致,堪称 Servlet 的强力升级版。

1.1 MVC 各组件职责

  • Model(模型层):这一层如同应用的数据大脑,包含了工程中的 Java Bean。Java Bean 又细分为两类:实体类 Bean,就像一个个数据保险箱,专门用于存储业务数据,比如在一个电商系统中,商品信息、用户信息等实体类就肩负着存储这些关键数据的重任;业务处理 Bean,它可以是 Servlet 或者 Dao 对象,主要负责处理业务逻辑以及与数据持久化相关的操作,例如在处理用户注册业务时,相关的 Servlet 或 Dao 对象会对用户输入的数据进行验证、存储等操作。
  • View(视图层):视图层是应用与用户直接对话的窗口,项目中的 html 或 jsp 等页面便是其主要载体。它的核心作用在于与用户进行交互,将数据以直观、友好的方式展示给用户,同时收集用户的输入信息。比如在一个新闻网站中,用户看到的新闻列表页面、新闻详情页面等都是视图层的体现,用户可以在这些页面上浏览新闻内容、进行评论等操作。
  • Controller(控制层):控制层在整个 MVC 架构中扮演着交通枢纽的角色,在 Spring MVC 框架里由 Controller 担当此重任,其前身是 Servlet。它的主要职责是接收来自用户的请求,对请求进行分析和处理,然后根据业务逻辑调用相应的模型层组件进行数据处理,最后将处理结果返回给视图层进行展示。例如在一个在线购物系统中,当用户点击 “添加商品到购物车” 按钮时,对应的 Controller 会接收到这个请求,调用相关的业务逻辑方法处理添加商品的操作,最后返回给用户一个操作结果页面。

MVC 思想并非特定编程语言或者 web 应用所独有的,它是一种广泛适用的规范。通过将一个应用清晰地划分为 Model、View 和 Controller 三个基本部分,这三个部分以最小的耦合协同工作,极大地提高了应用的可扩展性和可维护性。就像一辆汽车,发动机(Model)负责提供动力,仪表盘(View)负责展示信息,方向盘和变速箱(Controller)负责控制方向和速度,它们各司其职又协同配合,共同保证汽车的正常运行。

二、SpringMVC 入门案例搭建

2.1 创建 WEB 工程与引入依赖

搭建 SpringMVC 项目的第一步,是创建一个 WEB 工程。就像搭建一座房子,首先要打好地基。创建好工程后,我们需要引入开发所需的 jar 包,这些 jar 包就如同建房所需的各种建筑材料。通过在项目的pom.xml文件中进行如下配置来引入依赖:

xml


    5.0.2.RELEASE


    
        com.fasterxml.jackson.core
        jackson-databind
        2.9.0
    
    
        com.fasterxml.jackson.core
        jackson-core
        2.9.0
    
    
        com.fasterxml.jackson.core
        jackson-annotations
        2.9.0
    
    
        org.springframework
        spring-context
        ${spring.version}
    
    
        org.springframework
        spring-web
        ${spring.version}
    
    
    
        org.springframework
        spring-webmvc
        ${spring.version}
    
    
    
        javax.servlet
        servlet-api
        2.5
        provided
    
    
        javax.servlet.jsp
        jsp-api
        2.0
        provided
    
    
    
        ch.qos.logback
        logback-classic
        1.2.3
    
    
        org.thymeleaf
        thymeleaf-spring4
        3.0.9.RELEASE
    

2.2 配置 web.xml

接下来,我们需要对web.xml配置文档进行更改。web.xml就像是一个交通指挥中心,负责配置整个 web 应用的一些关键信息。首先,我们要确保web - app标签的配置正确,指定合适的版本和相关命名空间:

xml



2.3 配置核心控制器 DispatcherServlet

Spring MVC 的核心是基于原生 servlet 的强大前端控制器 DispatcherServlet,它就像一个智能的交通警察,对所有的请求和响应进行统一处理。在web.xml中配置 DispatcherServlet 的过程如下:

xml



    encodingFilter
    org.springframework.web.filter.CharacterEncodingFilter
    true
    
        encoding
        UTF-8
    


    encodingFilter
    /*



    default
    *.html



    dispatcherServlet
    org.springframework.web.servlet.DispatcherServlet
    
    
        contextConfigLocation
        classpath:springmvc.xml
    
    
    1


    dispatcherServlet
    /   



    /index.html

2.4 编写相关页面

我们需要编写index.htmlsuc.html页面。index.html就像是应用的大门,用户从这里进入应用,它提供了一个简单的界面,包含一个指向/SpringMVCDemo/hello.do的超链接:

html



    
    入门程序


    

入门

入门程序

suc.html则是用于展示处理结果的页面,它使用了 Thymeleaf 模板引擎来动态渲染数据:

html




    
    成功


    

Hello

2.5 编写 Controller 类和方法

创建一个HelloController类,使用@Controller注解将其交给 IOC 容器进行管理,就像把一把钥匙交给管理员,让管理员来管理这个类的生命周期和依赖注入等操作。在这个类中,编写一个处理请求的方法sayHello,使用@RequestMapping注解来映射请求路径:

java

//把当前类交给IOC容器进行管理
@Controller
public class HelloController {
    /**
     * 处理超链接发送出来的请求
     * @param model 用于向视图传递数据的模型对象
     * @return 返回视图名称
     */
    @RequestMapping(path = "/hello.do")
    public String sayHello(Model model){
        System.out.println("入门方法执行了2...");
        // 向模型中添加属性msg与值,可以在html页面中取出并渲染
        model.addAttribute("msg","hello,SpringMVC");
        // 配置了视图解析器后,直接返回视图名称suc,视图解析器会根据配置找到对应的实际页面
        return "suc";
    }
}

2.6 编写 springmvc.xml 配置文件

springmvc.xml是 Spring MVC 的重要配置文件,它就像一个指挥家,协调着各个组件的工作。在这个文件中,我们进行了如下配置:

xml



    
    
    
    
    
    
    
    
        
        
        
    
    
    
        
    
    
        
        
        
    
    
    
    
    
    

完成上述所有配置后,启动 Tomcat 服务器进行测试。如果一切配置正确,当用户访问index.html页面并点击 “入门程序” 超链接时,会触发HelloController中的sayHello方法,最终跳转到suc.html页面并展示 “hello,SpringMVC” 的信息。

三、SpringMVC 原理剖析

3.1 SpringMVC 中心控制器 DispatcherServlet

Spring 的 web 框架就像是一个精心设计的交响乐团队,而 DispatcherServlet 则是这个团队中的指挥家。它的核心作用是将请求精准地发送到不同的处理器,确保整个应用的流程顺畅运行。在启动 Tomcat 服务器时,由于配置了load - on - startup标签,DispatcherServlet 对象会被创建,同时它会加载springmvc.xml配置文件,就像指挥家在演出前会仔细研究乐谱一样,DispatcherServlet 通过加载配置文件来了解整个应用的架构和流程。

3.2 入门案例的执行流程

3.3 SpringMVC 官方提供图形入门案例中的组件分析

  1. 启动服务器与初始化:当 Tomcat 服务器启动时,因为load - on - startup配置为 1,DispatcherServlet 对象被创建,并且它会根据contextConfigLocation参数的值加载springmvc.xml配置文件。在这个过程中,Spring 容器被初始化,各种组件被创建并注册到容器中,就像搭建一个舞台,准备好各种道具和演员。
  2. 创建 Controller 对象:由于开启了注解扫描,@Controller注解标记的HelloController对象会被 Spring 容器创建,就像导演挑选演员并让他们做好演出准备。
  3. 请求到达与处理:当用户从index.jsp(这里假设index.html重定向到了index.jsp,实际情况中也可以直接从index.html发起请求)发送请求时

    请求会如同传递接力棒一般,率先抵达 DispatcherServlet 这个核心控制器。DispatcherServlet 会仔细审视请求的路径,依据配置在HelloController类中sayHello方法上的@RequestMapping注解,精准地找到需要执行的具体方法。这就好比在一个大型图书馆中,根据索引目录快速定位到所需的书籍。

  4. 视图解析与页面查找sayHello方法执行完毕后会返回一个视图名称(在这里是suc)。此时,视图解析器开始发挥关键作用,它会依据在springmvc.xml中配置的规则去寻找对应的实际页面。以本案例的配置来说,视图解析器ThymeleafViewResolver会在/html/目录下查找名为suc.html的文件。这类似于按照地图的指引,在城市的特定区域找到目标建筑。

  5. 页面渲染与响应:Tomcat 服务器找到suc.html页面后,会根据 Thymeleaf 模板引擎的规则对其进行渲染。在渲染过程中,sayHello方法通过model.addAttribute("msg","hello,SpringMVC")设置的msg属性值会被动态地填充到页面中对应的位置。最终,渲染好的页面作为响应返回给用户,用户在浏览器中就能看到展示了 “hello,SpringMVC” 信息的页面,完成一次完整的请求处理流程,就像一场精彩的演出完美落幕,观众欣赏到了最终的成果。

  6. 前端控制器(DispatcherServlet):作为整个 SpringMVC 架构的入口和核心调度者,DispatcherServlet 负责接收所有来自客户端的请求,并将这些请求分发给后续的组件进行处理。它就像一个大型商场的总服务台,所有顾客的咨询和需求都首先汇聚到这里,然后由总服务台的工作人员将需求分配到相应的部门去解决。
  7. 处理器映射器(HandlerMapping):处理器映射器的任务是根据请求的信息(例如请求的 URL),找到对应的处理器(Handler)。在我们的案例中,使用的BeanNameUrlHandlerMapping会根据处理器的 Bean 名称来映射请求。可以将其想象成一个智能的导航系统,根据输入的目的地信息,规划出到达目的地的路线,这里的目的地就是请求要访问的处理器。
  8. 处理器(Handler):处理器是真正处理请求业务逻辑的组件,在我们的案例中就是HelloController中的sayHello方法。它负责接收请求参数,调用相关的业务逻辑方法进行处理,然后返回处理结果。好比工厂中的工人,根据订单要求进行生产加工,最终产出产品。
  9. 处理器适配器(HandlerAdapter):由于不同类型的处理器可能有不同的接口和调用方式,处理器适配器的作用就是将 DispatcherServlet 传递过来的请求适配到具体的处理器上进行调用。在案例中使用的SimpleControllerHandlerAdapter用于适配实现了Controller接口的处理器。它类似于一个万能插头转换器,将不同规格的插头(请求)转换为能插入特定插座(处理器)的形式,确保请求能够正确地被处理器处理。
  10. 视图解析器(ViewResolver):视图解析器的职责是根据处理器返回的视图名称,找到对应的实际视图资源(如 JSP 页面、Thymeleaf 模板等),并将其解析为可以返回给客户端的视图对象。在本案例中,ThymeleafViewResolver根据配置的前缀/html/和后缀.html,以及视图名称suc,找到suc.html页面并进行解析。它就像一个翻译官,将抽象的视图名称翻译为具体的、可展示的页面资源。
  11. 视图(View):视图是最终呈现给用户的界面,它负责将模型中的数据展示出来。在我们的案例中,suc.html就是视图,通过 Thymeleaf 模板语法将model中的msg数据展示在页面上。视图就像是一幅精美的画作,将各种元素(数据)组合在一起,呈现给观众(用户)欣赏。

你可能感兴趣的:(ide,spring)