SpringMVC快速入门与详解

一、SpringMVC简介

1. 概念

 Spring MVC 是一种基于 Java 的实现 MVC 设计模式的 Web 框架,该框架通过将 Web 应用程序划分为模型、视图和控制器来简化 Web 应用程序的开发。Spring MVC 通过基于注解或 XML 配置的方式实现 Web 控制器,使得开发者能够更加灵活地定制和控制 Web 应用程序的行为和外观。

2. 核心组件

 Spring MVC 的核心组件包括:前端控制器(DispatcherServlet)、处理器映射器(HandlerMapping)、处理器适配器(HandlerAdapter)、视图解析器(ViewResolver)以及处理器(Controller)等。在 Spring MVC 中,用户发送的请求首先会被前端控制器接收,并根据配置文件中定义的处理器映射器来找到相应的处理器,然后由处理器适配器对处理器进行适配,并将处理结果返回给前端控制器。最后,前端控制器根据配置文件中定义的视图解析器将处理结果解析成相应的视图并返回给用户。

Spring MVC 的生命周期主要包括以下阶段:

  • 前端控制器的初始化:前端控制器(DispatcherServlet)在容器启动时进行初始化,通过加载配置文件来获取 HandlerMapping、HandlerAdapter、ViewResolver 等组件,并对它们进行初始化。

  • 请求的接收和处理:当用户发送请求时,请求首先被前端控制器(DispatcherServlet)接收。前端控制器将请求转发给处理器映射器(HandlerMapping)进行处理器映射,找到与请求相匹配的处理器(Controller)。

  • 处理器适配器的调用:前端控制器通过处理器适配器(HandlerAdapter)对处理器进行适配,将请求信息传递给处理器,并调用处理器的相应方法进行处理。

  • 视图解析器的解析:处理器将处理结果返回给前端控制器,前端控制器通过视图解析器(ViewResolver)将处理结果解析成相应的视图,并返回给用户。

  • 视图的渲染:前端控制器将解析出的视图返回给用户,用户可以看到相应的页面效果。

  • 后置处理器的执行:在整个处理过程中,Spring MVC 还提供了一些后置处理器(例如拦截器),这些后置处理器可以在请求的各个阶段进行拦截并进行一些自定义的处理。

  • 前端控制器的销毁:当 Web 应用程序关闭时,前端控制器会被销毁,同时会调用处理器适配器、处理器、视图解析器等组件的销毁方法。

二、使用步骤

  1. 引入SpringMVC相关依赖包
    在Maven项目中,可以通过添加以下依赖项来引入SpringMVC:
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>${spring.version}</version>
</dependency>
  1. 配置SpringMVC的DispatcherServlet
    在web.xml中配置DispatcherServlet,将所有请求转发到SpringMVC中:
<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring-mvc-config.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

  1. 配置SpringMVC的上下文
    在spring-mvc-config.xml中配置SpringMVC的上下文,包括视图解析器、控制器、拦截器等。
  2. 编写控制器
    编写控制器类,处理请求并返回响应:
@Controller
public class HelloWorldController {

    @RequestMapping(value = "/hello")
    public ModelAndView helloWorld() {
        ModelAndView mav = new ModelAndView("hello");
        mav.addObject("message", "Hello World!");
        return mav;
    }

}
  1. 编写视图
    在webapp/WEB-INF/views目录下,编写JSP视图:

  2. 运行程序
    启动Web服务器,并在浏览器中访问http://localhost:8080/hello,即可看到Hello World页面。

三、示例

  1. 在 web.xml 文件中配置 DispatcherServlet:
<servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring-mvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

  1. 在 /WEB-INF/spring-mvc.xml 文件中配置 SpringMVC:
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
                        http://www.springframework.org/schema/beans/spring-beans.xsd
                        http://www.springframework.org/schema/mvc
                        http://www.springframework.org/schema/mvc/spring-mvc.xsd
                        http://www.springframework.org/schema/context
                        http://www.springframework.org/schema/context/spring-context.xsd"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

    <context:component-scan base-package="com.example.controller"/>

    <mvc:annotation-driven/>

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

</beans>
  1. 创建一个简单的 Controller:
@Controller
@RequestMapping("/")
public class HelloController {

    @GetMapping("/hello")
    public String hello(Model model) {
        model.addAttribute("message", "Hello World!");
        return "hello";
    }

}
  1. 在 /WEB-INF/views/hello.jsp 中创建视图:
  2. 最后在浏览器中访问 http://localhost:8080/hello 即可看到 "Hello World" 字样的页面
posted @ 2023-03-25 17:39  手可敲星辰脚驾七彩云  阅读(57)  评论(0编辑  收藏  举报