随笔分类 -  SpringMVC

介绍 SpringMVC 的常用使用方法,使用技巧及其原理
摘要:转载自 根据文件名获取contentType 作为一个Java后端,你的项目里面不可能不引用spring的,所以下面提供的是依赖spring-web的方案: public class MainTest { public static void main(String[] args) { // 根据文 阅读全文
posted @ 2022-12-06 10:46 极客子羽 阅读(2737) 评论(0) 推荐(2) 编辑
摘要:简介 如果能够根据文件内容计算出md5值,并且用这个md5值来作为文件后缀,那么只要文件内容发生变化,文件名就会发生变化,那么服务器发布时,用户就能访问到最新版本的js/css等文件了。 例如,我们在html代码中写的是 <link rel="shortcut icon" th:href="@{/p 阅读全文
posted @ 2022-04-16 19:54 极客子羽 阅读(1897) 评论(0) 推荐(0) 编辑
摘要:先来看一下 org.springframework.web.servlet.resource.PathResourceResolver 的继承关系图: ResourceResolver 接口需要实现 resolveUrlPath(返回值为String) 和 resolveResource(返回值为 阅读全文
posted @ 2022-04-16 17:17 极客子羽 阅读(399) 评论(0) 推荐(0) 编辑
摘要:一、使用示例 使用 @RestControllerAdvice 注解类,使用 @ExceptionHandler(JsonParseException.class) 指明要处理的全局异常。 import com.fasterxml.jackson.core.JsonParseException; i 阅读全文
posted @ 2022-03-17 15:05 极客子羽 阅读(781) 评论(0) 推荐(0) 编辑
摘要:一、ExceptionHandlerExceptionResolver ExceptionHandlerExceptionResolver 的成员变量 : 参数解析器 argumentResolvers,类型为 HandlerMethodArgumentResolverComposite 返回值处理 阅读全文
posted @ 2022-03-17 14:52 极客子羽 阅读(430) 评论(0) 推荐(0) 编辑
摘要:源码分析 一、构造函数 org.springframework.web.method.annotation.ExceptionHandlerMethodResolver 仅有一个构造函数,源码如下: public ExceptionHandlerMethodResolver(Class<?> han 阅读全文
posted @ 2022-03-16 22:54 极客子羽 阅读(688) 评论(0) 推荐(0) 编辑
摘要:一、问题简介 如题,请求 http://localhost:8080/api/test?redirectUrl=https%3A%2F%2Fwww.baidu.com%2F&data=123 这样的 URL,Web应用服务器用以下控制器来接收: import com.example.demo.dto 阅读全文
posted @ 2022-02-10 18:02 极客子羽 阅读(2257) 评论(0) 推荐(0) 编辑
摘要:在 Web 应用启动时,@RequestMapping 注解解析成 RequestMappingInfo 对象,并且注解的每个属性都解析成一个对应的 RequestCondition。 通过对条件的筛选,选出符合条件的 RequestMappingInfo,如果包含多个 RequestMappingInfo,需要对条件进行排序,再选出优先级最高的一个 RequestMappingInfo。 最后再通过 RequestMappingInfoHandlerMapping 获取对应的 HandlerMethod ,然后就可以封装执行过程了。 阅读全文
posted @ 2020-12-23 20:22 极客子羽 阅读(2812) 评论(1) 推荐(0) 编辑
摘要:对于 RequestMappingHandlerMapping 而言,getHandler 就是要找一个最最匹配的 HandlerMethod 对象。 这个寻找最佳匹配 HandlerMethod 的逻辑就“藏”在 lookupHandlerMethod 中,主要步骤如下:第一步,用请求的 url 路径获取 RequestMappingInfo 列表(“url索引匹配”);若匹配不上,只能全量遍历所有 RequestMappingInfo。第二步,完全匹配 RequestMappingInfo 和 HttpServletRequest。匹配逻辑在 RequestMappingInfo#getMatchingCondition 中。第三步,对匹配结果 Match 排序,选出最佳的 HandlerMethod,排序比较的逻辑在 RequestMappingInfo#compareTo 中。 阅读全文
posted @ 2020-11-29 22:24 极客子羽 阅读(420) 评论(0) 推荐(0) 编辑
摘要:考虑到篇幅安排,本文主要针对HandlerMapping初始化部分进行讲解。 初始化 HandlerMethod 的过程:1. 扫描 Spring 容器中的所有 Controller Bean; 2. 找出 Controller Bean 中的所有方法; 3. 创建 RequestMappingInfo; 4. 创建 HandlerMethod; 5. 注册到 MappingRegistry 阅读全文
posted @ 2020-11-29 12:30 极客子羽 阅读(987) 评论(0) 推荐(1) 编辑
摘要:如果你也有以下疑问?那么就一起来看看这篇引导篇吧 1. 被 @RequestMapping 注解的方法是如何“注册”到 DispatcherServlet 中的? 2. 在 http 请求到达服务器之后,又是如何找到“合适”的被 @RequestMapping 注解的方法? 3. http 请求的参数是如何变为 @RequestMapping 方法中的参数的? 4. @RequestMapping 方法的返回值又是如何变成我们期望的网页或者内容的? 阅读全文
posted @ 2020-11-28 09:06 极客子羽 阅读(624) 评论(0) 推荐(0) 编辑
摘要:本文主要讲解在 SpringMVC 框架中,DispatcherServlet 分发 Http 请求到对应处理器的流程。doDispatch 的主要流程就是 获取处理器 getHandler, 获取处理器适配器 getHandlerAdapter,执行处理器适配器的 handle 方法。 其中,getHandlerInternal 因子类的不同,而有二类不同的行为,一类是 AbstractUrlHandlerMapping,另一类是AbstractHandlerMethodMapping 阅读全文
posted @ 2020-11-20 15:16 极客子羽 阅读(653) 评论(0) 推荐(0) 编辑
摘要:BeanNameUrlHandlerMapping 和 SimpleUrlHandlerMapping 同属于 AbstractUrlHandlerMapping 的子类,他们都有 URL 映射处理器的能力。 BeanNameUrlHandlerMapping 筛选出 Name 或者 别名以 "/" 开头的 Bean ,将这些 Bean 注册为 “Handler”,实现 URL 映射。这种方式在配置上会比 SimpleUrlHandlerMapping 要便利一些。 阅读全文
posted @ 2020-11-17 15:42 极客子羽 阅读(1640) 评论(0) 推荐(0) 编辑
摘要:SimpleUrlHandlerMapping 的关键成员变量是 urlMap,可以通过 setMappings 或者 setUrlMap 增量添加。其父类 AbstractUrlHandlerMapping 的关键成员变量是 handlerMap,可以通过 registerHandler 注册 url 和 “Handler” 对象的映射。“Handler”对象主要有四类:HandlerMethod,Servlet ,Controller,HttpRequestHandler 阅读全文
posted @ 2020-11-17 10:00 极客子羽 阅读(1967) 评论(0) 推荐(0) 编辑
摘要:如果配置了监听器 ContextLoaderListener ,那么会创建一个 “root WebApplicationContext”。 如果配置了多个 FrameworkServlet 及其子类,会为它们中的每一个创建一个 “local WebApplicationContext” 阅读全文
posted @ 2020-11-16 17:26 极客子羽 阅读(1330) 评论(0) 推荐(0) 编辑
摘要:ContextLoaderListener 加载过程: 首先,contextInitialized 通知 Spring Web 应用程序 Servlet 上下文发生变更。 接着,我们需要为 Spring Web 应用程序创建一个 WebApplicationContext,一般来说,这个实现类是 XmlWebApplicationContext。 然后,我们需要为 Spring 应用程序上下文创建一个 ConfigurableListableBeanFactory,一般来说,这个实现类是 DefaultListableBeanFactory。 最后,在 Spring 容器加载 Bean 定义时,会调用 loadBeanDefinitions 从 configLocations 即配置文件路径下,读取和解析配置文件。 阅读全文
posted @ 2020-11-14 15:15 极客子羽 阅读(895) 评论(0) 推荐(0) 编辑
摘要:在 Clock 类上添加 @Component 注解,在需要定时执行的方法上面加上 @Scheduled 注解,并添加 cron 表达式。常见问题包括 @Scheduled 定时任务不生效,@Scheduled 定时任务执行两次等。 阅读全文
posted @ 2020-11-12 13:08 极客子羽 阅读(1159) 评论(0) 推荐(0) 编辑