Spring MVC学习01

1. 什么是Spring MVC?

spring mvc是spring framework后续的开发产品,已经很好地融入进入spring web flow生态之中,用来方便开发以mvc为架构的产品

2.为什么使用Spring MVC?

  1. Spring MVC 轻量易学
  2. Spring MVC与Spring framework紧密结合,具有良好的生态
  3. Spring MVC优良的设计使得其具有很好的性能

3. Spring MVC 原理

未命名文件.png

  1. 请求发送给前端控制器,也就是DispatcherServlet
  2. 前端控制器调用HandlerMapping的接口解析请求之中的URL
  3. HandlerMapping调用HandlerExecution之中的接口根据解析URL查找请求的Controller
  4. HandlerExecution将查到的结果返回给HandlerMapping
  5. HandlerMapping将结果返回给DispatcherServlet
  6. DispatcherServlet将这一个查询结果以及请求给HandlerAdapter
  7. HandlerAdapter根据内容适配一个Controller
  8. Controller根据请求之中的内容调用Service层或者其他业务层方法,将业务处理结果以及要响应的视图名称封装进入ModelAndView对象之中,然后返回这个对象
  9. HandlerAdapter将这个对象返回给DispatcherServlet
  10. DispatcherServlet将ModelAndView对象发给Resolver解析
  11. Resolver解析视图,加上前缀和后缀,将处理结果返回给DispatcherServlet
  12. DispatcherServlet根据解析结果将Model以及View返回给前端

4. 搭建一个简单的Spring MVC项目

  1. 在web.xml之中配置DispatcherServlet的信息,绑定好SpringMVC的配置文件。
    url-pattern不能为/*,因为/*会响应/xxx.jsp请求,之后会导致Resolver不断添加.jsp后缀
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_1.xsd"
         version="6.1">

    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

</web-app>
  1. 设置SpringMVC的配置文件,将HandlerMapping,HandlerAdapter,以及Resolver接口对应的实现类注入到IOC容器之中。
<?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">

    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
    <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>

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

</beans>
  1. 创建Controller类 ,实现hanlerRequest这个方法,这个方法返回ModelAndView对象,其中包含Model信息以及View信息
package com.zalon.controller;

import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.jspecify.annotations.Nullable;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

public class HelloController implements Controller {
    @Override
    public @Nullable ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
        ModelAndView mv = new ModelAndView();
        mv.addObject("msg", "Hello SpringMVC");
        mv.setViewName("spring");

        return mv;
    }
}

  1. 在SpringMVC配置文件之中配置好Controller类的bean对象。由于之前选择的HandlerMapping是BeanNameUrlHandlerMapping,这个HandlerMapping会根据bean的id匹配url,所以Controller的bean对象的id要设置为请求的url
<bean id="/hello" class="com.zalon.controller.HelloController"/>
  1. 启动web容器,运行测试。
0
所有评论 0