SpringMVC
文章平均质量分 93
SpringMVC全面进阶
流烟默
这个作者很懒,什么都没留下…
展开
-
SpringMVC运行流程分析之核心流程
前面[SpringMVC运行流程分析之前置流程](https://janus.blog.csdn.net/article/details/54949773)博文中我们分析了springMVC请求处理的前置流程,本文我们分析其核心流程也就是`doDispatch(request, response);`。# 【1】整体结构```javaprotected void doDispatch(HttpServletRequest request, HttpServletResponse response)原创 2016-10-10 17:07:26 · 7726 阅读 · 0 评论 -
SpringMVC运行流程分析之前置流程
前面我们分析了[SpringMVC源码分析之策略对象初始化](https://janus.blog.csdn.net/article/details/86582227),那么接下来我们看一下SpringMVC的执行流程。SpringMVC的核心流程主要是由DispatcherServlet处理的,DispatcherServlet也是springMVC的灵魂处理器。其本质是一个servlet,那么我们就按照servlet的观点去看一下。# ① XXXServlet的请求确定如下是HttpServ原创 2017-02-09 17:42:51 · 1560 阅读 · 0 评论 -
一个由服务端返回的long值改变引发的血案
背景:服务端返回信息,其中某ID字段是long型,值是16位。前端拿到后再传给服务端,某ID值发生了改变。**这是因为,JS 中能精准表示的最大整数是:**```javaMath.pow(2, 53),十进制即 9007199254740992```所以我们需要服务端返回给前端时对这种情况进行处理,本文是在springboot环境下使用fastJsonHttpMessageConverter引申介绍。# 【1】自定义MyLongSerializerAndDeserializer我们自定义M原创 2017-01-16 15:22:05 · 581 阅读 · 0 评论 -
Tiles与SpringMVC整合应用实践
Tiles框架为创建Web页面提供了一种模板机制,它能将网页的布局和内容分离,支持EL,OGNL,MVEL等进行动态解析。它用模板定义网页布局,每个页面模板都是一个简单的 JSP 页,它定义了一些由占位符(也可以指定具体jsp)组成的外形,以放置内容。执行时,Tiles 将会用相应的内容来替换占位符,因此,创建整个页面即形成布局。Tiles框架是建立在JSP的include指令基础上的,但它提供了比原创 2017-05-24 14:20:35 · 1497 阅读 · 0 评论 -
SpringBoot中那些常用注解分析
这里我们尝试总结开发中常用的那些注解使用与区别。# 【1】定义/注入bean的注解## ① @Component标明带该注解的类是“组件”。当使用基于注解的配置和类路径扫描时,此类类被视为自动检测的候选类。@Component 注解作用于类,通常是通过路径扫描来自动侦测以及自动装配到 Spring 容器中(我们可以使用 @ComponentScan 注解定义要扫描的路径从中找出标识了需要装配的类自动装配到 Spring 的 bean 容器中)。如下所示,其只有一个属性value用来定义组件名称。原创 2016-12-09 11:03:28 · 1761 阅读 · 0 评论 -
SpringMVC常见组件之DataBinder数据绑定器分析
什么是数据绑定?简单一句话就是把请求中参数信息绑定到目标方法的参数上。数据绑定是参数解析过程中的一部分。如下图所示:那么这里我们就要研究一下数据绑定相关的那些组件。【1】绑定工厂WebDataBinderFactory工厂嘛,使用了工厂方法设计模式,只有一个抽象方法用来让子类实现以创建一个WebDataBinder实例。public interface WebDataBinderFactory { WebDataBinder createBinder(NativeWebRequest webRe原创 2021-11-05 15:47:50 · 3097 阅读 · 0 评论 -
SpringMVC常见组件之HandlerAdapter分析
处理器适配器,主要是DispatcherServlet用来调用handler的。简单来说就是DispatcherServlet根据handlerMapping找到一个HandlerExecutionChain。然后根据HandlerExecutionChain里面的handler来获取HandlerAdapter。HandlerAdapter调用handle方法处理请求。为啥要HandlerAdapter呢? 看名字,适配器模式。根据不同类型的handler在调用目标(方法)前提前进行相应处理。如何不用适原创 2021-10-19 16:28:50 · 2222 阅读 · 0 评论 -
SpringMVC常见组件之HandlerMapping分析
在Spring MVC 3.1 之前的版本中,Spring默认使用 DefaultAnnotationHandlerMapping,AnnotationMethodHandlerAdapter来处理 @RequestMapping注解和请求方法调用,而从3.1开始提供了一组新的API,RequestMappingHandlerMapping和RequestMappingHandlerAdapter完成这些工作。【1】几个概念① RequestMappingInfo这个类是对请求映射的一个抽象,它包含了原创 2021-10-14 17:27:21 · 1134 阅读 · 0 评论 -
SpringMVC中使用FreeMarker实践
使用RESTful风格,故需要额外注意DispatcherServlet的url-pattern和applicationContext.xml中的配置。 <mvc:default-servlet-handler/>【1】xml配置applicationContext.xml配置:<?xml version="1.0" encoding="UTF-8&qu原创 2017-11-27 21:11:11 · 565 阅读 · 0 评论 -
SpringMVC基础配置详解与实践
【1】SpringMVC中一些基础类SpringMVC通过一些"特殊的bean"来处理请求、以合适的方式渲染响应。① HandlerMapping将请求与用于预处理和后处理的拦截器列表一起映射到处理程序 。映射基于某些标准,其细节因HandlerMapping 实现而异。两个主要HandlerMapping实现是RequestMappingHandlerMapping (支持带@RequestMapping注释的方法)和SimpleUrlHandlerMapping (维护 URI 路径模式到处理程原创 2021-08-19 19:13:35 · 993 阅读 · 1 评论 -
方法参数相关属性params、@PathVariable和@RequestParam用法与区别
【1】paramsparams: 指定request中必须包含某些参数值是,才让该方法处理。 @RequestMapping(value = "testParamsAndHeaders", params = { "username","age!=10" }) public String testParamsAndHeaders() { System.out.printl原创 2017-02-21 13:17:58 · 19450 阅读 · 5 评论 -
SpringMVC与REST相结合实现RESTful风格
【1】REST简介REST : 即 Representational State Transfer 。(资源)表现层状态转化。资源 : 网络上的一个实体或者说是网络上的一个具体信息。 每种资源对应一个特定的URI,因此URI为每一个资源的独一无二的识别符。状态转化 : 每发出一个请求,就代表了客户端和服务器端的一次交互过程。HTTP协议是一个无状态协议,即所有的状态都保存在服务器上。因此用户想原创 2017-02-20 21:20:40 · 5157 阅读 · 0 评论 -
SpringMVC中那些Java Config
官网文档:[https://docs.spring.io/spring-framework/docs/5.3.10-SNAPSHOT/reference/html/web.html#mvc-config](https://docs.spring.io/spring-framework/docs/5.3.10-SNAPSHOT/reference/html/web.html#mvc-config)简单来讲,就是使用Java 配置替代以的xml配置。MVC Java配置和MVC XML namespace提原创 2017-09-02 11:01:36 · 4804 阅读 · 0 评论 -
SpringMVC中@ModelAttribute应用实践
**前置博文:**[SpringMVC常见组件之DataBinder数据绑定器分析](https://janus.blog.csdn.net/article/details/121163715)[SpringMVC常见组件之HandlerMethodArgumentResolver解析](https://janus.blog.csdn.net/article/details/57413251)# **【1】场景需求与分析**背景需求如下,当更新一个对象时,某个字段比如密码不能被修改。**常见解原创 2017-02-20 22:14:06 · 6158 阅读 · 5 评论 -
SpringMVC-@RequestMapping的参数和用法
RequestMapping里面的注解包含的参数如图:RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。@RequestMapping 除了修饰方法, 还可来修饰类 :类定义处: 提供初步的请求映射信息。相对于 WEB 应用的根目录;方法处: 提供进一步的细分映射信息。 相对于类定义处的 URL。若类定义处未原创 2017-02-15 11:56:14 · 105842 阅读 · 16 评论 -
SpringMVC中Controller里面的那些注解
# 【1】Controller的声明SpringMVC提供了一个基于注解的编程模型,带有`@Controller`和`@RestController`注解的组件使用注解来表示请求映射、请求输入、异常处理等。带注解的控制器具有灵活的方法签名,不必扩展基类,也不必实现特定的接口。**以下示例显示了由注解定义的控制器:**```java@Controllerpublic class HelloController { @GetMapping("/hello") public Str原创 2017-02-20 16:42:56 · 3845 阅读 · 0 评论 -
SpringMVC中转发与重定向(redirect与forward)实践实例
forward 转发,如return “forward:/hello”; 浏览器的地址栏不会变,但是有视图返回来redirect 重定向,如return “redirect:/hello”; 浏览器的地址栏会变。spring控制器最后返回一个ModelAndView(urlName)点击查看视图详解过程 , 其中urNamel可以是一个视图名称,由视图解析器负责解析后将响应流写回客户端;也可以通过r原创 2017-02-23 09:31:42 · 7611 阅读 · 0 评论 -
SpringMVC中资源国际化使用实践
默认情况下,SpringMVC根据Accept-Language参数判断客户端的本地类型。当接受到请求时,SpringMVC会在请求上下文中查找一个本地化解析器(LocalResolver) ,找到后使用它获取请求所对应的本地化类型信息。SpringMVC还允许装配一个动态更改本地化类型的拦截器,这样通过指定一个请求参数就可以控制单个请求的本地化类型。关于国际化: 1. 在页面上能够原创 2017-04-23 18:04:59 · 621 阅读 · 0 评论 -
SpringMVC中支持的那些视图解析技术
# 【1】JSP and JSTLSpring框架有一个内置的集成,用于将SpringMVC与JSP和JSTL结合使用。使用JSP开发时,通常会声明一个`InternalResourceViewResolver` bean。`InternalResourceViewResolver`可用于分派到任何Servlet资源,但特别是JSP。作为最佳实践,我们强烈建议您将JSP文件放在`“WEB-INF”`目录下的目录中,这样客户端就不会直接访问。```xml<bean id="viewResolve原创 2017-05-04 21:42:01 · 2897 阅读 · 0 评论 -
Spring MVC - context:component-scan实现原理与实例
一、<context:component-scan/>想必@Component,@Repository,@Service,@Controller几个常用的Type-Level的Spring MVC注解,大家都很清楚他们的意思跟用途。标记为@Component的类,在使用注解配置的情况下,系统启动时会被自动扫描,并添加到bean工厂中去(省去了配置文件中写bean定义了),另外三个分别表示MVC三层模原创 2017-02-21 10:18:17 · 9471 阅读 · 1 评论 -
SpringMVC使用MultipartResolver和MultipartFile实现文件上传
SpringMVC为文件上传提供了直接支持,这种支持是通过即插即用的MultipartResolver实现的。Spring用Jakarta Commons FileUpload技术实现了一个MultipartResolver实现类:CommonsMultipartResolver。SpringMVC上下文中默认没有装配MultipartResolver,因此默认情况下不能处理文件上传工作,...原创 2017-04-25 22:24:01 · 1843 阅读 · 0 评论 -
SpringMVC里的Model、Map、ModelMap以及ModelAndView
首先理解,model从哪里来?SpringMVC内部使用一个org.springframework.ui.Model接口存储的数据模型,它的功能类似于java.uitl.Map,但是比Map更好用 org.springframework.ui.ModelMap实现Map接口。SpringMVC在调用方法前会创建一个隐含的数据模型,作为模型数据的存储容器, 成为”隐含模型”.如果处理方法入参为Map或原创 2016-10-14 17:13:07 · 17717 阅读 · 2 评论 -
SpringMVC源码分析之策略对象初始化
前面我们分析了springmvc的各种组件,那么组件在什么时候初始化的呢?我们这里就研究一下。# 【1】DispatcherServlet如下所示是`DispatcherServlet`的继承树示意图,其继承自`FrameworkServlet`,而`FrameworkServlet`又继承了`HttpServletBean`并实现了`ApplicationContextAware`接口。`HttpServletBean` 则继承了HttpServlet 并实现 EnvironmentCapable原创 2019-01-21 18:42:04 · 842 阅读 · 0 评论 -
Web.xml - Servlet与Filter的url-pattern
URL-PATTERN语义详解:在web.xml文件中,以下语法用于定义映射。① 以&quot;/&quot;开头和以&quot;/*&quot;结尾的是用来做路径映射的。② 以前缀&quot;*.&quot;开头的是用来做扩展映射的。③ &quot;/&quot; 是用来定义default servlet映射的。④ 剩下的都是用来定义详细映射的。比如:原创 2017-04-28 13:51:11 · 2637 阅读 · 1 评论 -
Servlet3.0+环境下使用注解注册Servlet、Filter和Listener组件
【1】Servlet3.0前① Servlet实例实例代码如下,通常继承HttpServletpublic class HelloWorld extends HttpServlet { private String message; public void init() throws ServletException { // 执行必需的初始化 ...原创 2018-04-19 20:37:20 · 1841 阅读 · 0 评论 -
Servlet3.0中支持的异步处理
【1】HelloAsyncServlet在Servlet 3.0之前,Servlet采用Thread-Per-Request的方式处理请求,即每一次Http请求都由某一个线程从头到尾负责处理。如果一个请求需要进行IO操作,比如访问数据库、调用第三方服务接口等,那么其所对应的线程将同步地等待IO操作完成, 而IO操作是非常慢的,所以此时的线程并不能及时地释放回线程池以供后续使用,在并发量...原创 2018-04-20 15:46:59 · 1049 阅读 · 0 评论 -
Servlet3.0+下使用ServletContainerInitializer注册JAVA组件
【1】ServletContainerInitializer是什么在web容器启动时为提供给第三方组件机会做一些初始化的工作,例如注册servlet或者filtes等,servlet规范中通过ServletContainerInitializer实现此功能。每个框架要使用ServletContainerInitializer就必须在对应的jar包的META-INF/services 目录创...原创 2018-04-20 12:03:28 · 9882 阅读 · 3 评论 -
web.xml中项目常见配置与节点加载顺序详解
【1】web.xml常见配置&lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/ja原创 2017-09-29 11:22:20 · 2293 阅读 · 4 评论 -
SpringMVC与Servlet3.0整合实现异步处理
Servlet3.0提供了异步处理支持,SpringMVC对其进行了封装,可以通过两种方式进行异步处理。【1】Callable官方文档地址:https://docs.spring.io/spring/docs/5.0.5.RELEASE/spring-framework-reference/web.html#mvc-ann-async-callable其原理如下:1、控...原创 2018-04-20 17:14:38 · 2557 阅读 · 0 评论 -
SpringMVC与Servlet3.0整合 - ServletContainerInitializer注解配置项目
【1】SpringServletContainerInitializerServletContainerInitializer 该篇博文说明了ServletContainerInitializer是什么以及如何在项目中使用。SpringMVC同样实现了该功能。web容器在启动的时候,会扫描每个jar包下的META-INF/services/javax.servlet.ServletCo...原创 2018-04-20 16:31:56 · 4410 阅读 · 0 评论 -
SpringMVC中<mvc:annotation-driven/>标签原理与实践详解
【1】AnnotationDrivenBeanDefinitionParser通常如果我们希望通过注解的方式来进行Spring MVC开发,我们都会在***-servlet.xml中加入<mvc:annotation-driven/>标签来告诉Spring我们的目的。但是我们为什么这么做呢?这个标签是什么意思呢?它做了什么呢?同样为了弄清楚这些问题, 像<context:component-scan原创 2017-09-15 16:25:42 · 8503 阅读 · 11 评论 -
SpringMVC常见组件之HandlerMethodArgumentResolver解析
在前面我们分析[SpringMVC常见组件之HandlerAdapter分析](https://janus.blog.csdn.net/article/details/120848435)中提到过如下过程```javaRequestMappingHandlerAdapter.invokeAndHandle(webRequest, mavContainer);--ServletInvocableHandlerMethod.invokeAndHandle(webRequest, mavContainer原创 2017-02-26 14:17:04 · 1806 阅读 · 0 评论 -
SpringMVC中处理静态资源的几种方式
【1】第一种示例与解决办法将DispatcherServlet请求映射设置为 / ,将会拦截所有的请求。不能访问静态资源。解决办法:在SpringMVC的配置文件中配置如下标签解决<mvc:default-servlet-handler/>其XSD文档说明如下:/*配置一个handler通过转发请求到servlet容器的默认servlet来处理静态资源*/Configures a handler原创 2017-02-24 13:50:19 · 6268 阅读 · 1 评论 -
SpringMVC中使用JSR303进行数据校验实践详解
前面学习了SpringMVC的数据类型转换和格式化。今天学习SpringMVC的数据校验。【1】JSR 303JSR 303 是Java 为Bean 数据合法性校验提供的标准框架,它已经包含在JavaEE6.0中。JSR 303 通过在Bean属性上标注类似于@NotNULL、@Max等标准的注解指定校验规则,并通过标准的验证接口对Bean进行验证。【2】Hibernate Validator扩展注原创 2017-04-16 15:23:06 · 2391 阅读 · 1 评论 -
SpringMVC中重定向请求时传输参数原理分析与实践
本文要解决的是重定向请求时,把数据传到目标地方。# 【1】几个概念## **① Redirect Attributes**默认情况下,所有模型属性都被视为在重定向URL中作为URI模板变量暴露。在其余的属性中,基本类型或基本类型的集合或基本类型的数组将自动附加为查询参数。如果专门为重定向准备了一个模型实例,那么将基本类型属性作为查询参数附加可能是理想的结果。但是,在带注解的控制器中,模型可以包含为渲染目的添加的其他属性(例如,下拉字段值)。为了避免此类属性出现在URL中,`@RequestMa原创 2017-04-13 22:31:33 · 1846 阅读 · 0 评论 -
SpringMVC中类型转换器Converter<S,T>详解
`ConversionService`是Spring类型转换体系的核心接口,可以利用`conversionServiceFactoryBean`在Spring工厂容器中定义一个`conversionService`。Spring将自动识别出`ConversionService`,并在bean属性配置及SpringMVC处理方法入参绑定等场合使用它进行`数据转换`。![在这里插入图片描述](https://img-blog.csdnimg.cn/800fd828c2b24c85adc324904bafa原创 2017-03-09 22:41:05 · 4084 阅读 · 0 评论 -
SpringMVC常见组件之HandlerMethodReturnValueHandler解析
在前面我们分析[SpringMVC常见组件之HandlerAdapter分析](https://janus.blog.csdn.net/article/details/120848435)中提到过如下过程:```javaRequestMappingHandlerAdapter.invokeAndHandle(webRequest, mavContainer);--ServletInvocableHandlerMethod.invokeAndHandle(webRequest, mavContaine原创 2017-02-24 16:53:08 · 5758 阅读 · 0 评论 -
SpringMVC与Struts2等MVC控制器
1、Struts2是类级别的拦截, 一个类对应一个request上下文,SpringMVC是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,所以说从架构本身上SpringMVC就容易实现restful url,而struts2的架构实现起来要费劲,因为Struts2中Action的一个方法可以对应一个url,而其类属性却被所有方法共享,这也就无法用注解或其他方式标...原创 2017-03-08 22:23:57 · 1264 阅读 · 0 评论 -
SpringMVC中form标签与数据绑定应用实践
SpringMVC提供了一个form标签,通过其可以实现模型数据中的属性和HTML表单元素属性绑定,以实现表单数据更便捷编辑和表单的回显。通过form表单的modelAttribute属性指定绑定的模型属性。若没有指定该属性,将默认从request域中获取command的表单bean,如果该属性也不存在,将抛出异常。如下所示:SpringMVC提供的表单组件标签的共同属性① path :表单字段原创 2017-02-22 21:43:07 · 4383 阅读 · 0 评论 -
Spring、SpringMVC和SpringBoot框架中那些容器
# 【1】SpringMVC和Tomcat## ① ServletContext如下图所示,这里获取到的`ServletContext`是`ApplicationContextFacade`,是一个`ApplicationContext`的外观对象(也就是说这里应用了设计模式中的外观模式)。`ApplicationContextFacade`有三个属性:`classCache`、`objectCache`和源目标对象context(`ApplicationContext`)。**context(`A原创 2017-02-22 14:24:28 · 1342 阅读 · 0 评论