随笔都是学习笔记
随笔仅供参考,为避免笔记中可能出现的错误误导他人,请勿转载。

下表列出了DispatcherServlet检测到的特殊bean:

Bean typeExplanation

HandlerMapping

将请求映射到处理程序以及用于预处理和后处理的拦截器列表。映射基于一些标准,这些标准的细节因HandlerMapping实现而异。

 

两个主要的HandlerMapping实现是RequestMappingHandlerMapping(支持@RequestMapping带注释的方法)和SimpleUrlHandlerMapping(维护URI路径模式到处理程序的显式注册)。

HandlerAdapter

帮助DispatcherServlet调用映射到请求的处理程序,而不管实际是如何调用处理程序的。例如,调用带注释的控制器需要解析注释。HandlerAdapter的主要目的是对DispatcherServlet屏蔽此类细节。

HandlerExceptionResolver

解决异常的策略,可能将它们映射到处理程序、HTML错误视图或其他目标。参见异常。

ViewResolver

解析从处理程序返回到实际视图的基于逻辑字符串的视图名称,并将其呈现给响应。请参见视图分辨率和视图技术。

LocaleResolverLocaleContextResolver

解析客户端正在使用的地区以及可能的时区,以便能够提供国际化的视图。看地区。

ThemeResolver

解决您的web应用程序可以使用的主题-例如,提供个性化的布局。看到主题。

MultipartResolver

在一些多部分解析库的帮助下,对多部分请求进行抽象解析(例如,浏览器表单文件上传)。看到几部分的解析器。

FlashMapManager

存储和检索“输入”和“输出”FlashMap,可用于将属性从一个请求传递到另一个请求,通常通过重定向。看到Flash属性。

一、创建项目并添加依赖

首先创建一个空的maven项目,然后:

 

 

 

添加maven依赖:

 <!--依赖-->
    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.3.20</version>
        </dependency>
    </dependencies>

进去添加web项目,确定。

 

二、配置DispatcherServlet的启动参数

 

 

 在web.xml中配置servlet:

/* 和 / 都是拦截所有请求,/ 会拦截的请求不包含 *.jsp, 而 /* 的范围更大,还会拦截 *.jsp 这些请求

<?xml version="1.0" encoding="UTF-8"?>
<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_4_0.xsd"
         version="4.0">
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param><!--设置springmvc配置文件的位置-->
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring-mvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup><!--启动服务器时就进行加载-->
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern><!--拦截.jsp以外的请求-->
    </servlet-mapping>
</web-app>

创建controller和配置spring的xml文件:

 

 

 

package cn.cdulm.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class Acontroller {
    @RequestMapping("/hello")
    public String hello(String name){
        System.out.println("hello() -- " + name);
        return "redirect:a.jsp";
    }
}

 

有两个jsp文件:

 

 

 

此时启动服务器:

 

三、向web中导入需要的包

 

 

 然后访问http://localhost:8080/springMVC/hello 会出现404没有找到的错误,是因为没有手动导入包:

 

 

 

 

 

 重启服务器:

 

 

 再次访问 http://localhost:8080/springMVC/hello 路径:

 

 

 会自动重定向到a.jsp页面。

 此时控制台输出:

那么在访问的时候加上参数 http://localhost:8080/springMVC/hello?name=zhangsan :

 

输出结果包含name参数。

 

四、请求流程

1、客户端发送请求http:llocalhost:8080/springMVC/hello

2、由tomcat接受到对应的请求

3、SpringMVC的前端控制器DispatcherServlet接收到所有的请求

4、查看请求地址和@RequestMapping注解的哪个匹配,来找到具体的类的处理方法

5、前端控制器找到目标处理类和方法之后,执行目标方法

6、方法执行完成之后会有一个返回值,SpringMVC会将这个返回值用视图解析器进行解析拼接成完整的页面地址

7、DispatcherServlet拿到页面地址之后,转发到具体的页面

 

  

 

 

posted on 2022-06-08 15:31  时间完全不够用啊  阅读(75)  评论(0编辑  收藏  举报