
springMvc
CoderOu
一个相信努力就会有结果的程序员,以兴趣驱动技术!
------ CoderOu
展开
-
springMVC之利用Servlet3.0的SPI机制实现零配置原理
在打开springMVC官方文档的开头介绍DispatcherServlet的时候,他首先介绍了一段配置:https://docs.spring.io/spring/docs/current/spring-framework-reference/web.htmlpublic class MyWebApplicationInitializer implements WebApplicationInitializer { @Override public void onStartup(Se原创 2020-08-29 20:40:02 · 561 阅读 · 5 评论 -
【springMVC源码解读系列】(一、项目启动:创建web应用容器,设置父容器)
spring源码解读地址:https://gitee.com/oushiyou/spring-framework-5.2.8.RELEASE这里首先附上一张整体流程图,以供解读的时候可以进行参考:我们在使用springMVC的时候,通常的做法是在web.xml中配置DispatcherServlet, 然后传入springMVC的配置文件位置。比如: <servlet> <servlet-name>springmvc</servlet-name>原创 2020-08-02 23:17:49 · 211 阅读 · 0 评论 -
【源码系列之springMVC】(三、请求上下文持有者:RequestContextHolder)
RequestContextHolder:请求上下文持有者,他是通过ThreadLocal放入当前请求线程中的,通过他的静态方法getRequestAttributes可以获取到RequestAttributes,如果我们是web项目,那么他的子类就是ServletRequestAttributes。我们可以根据processRequest方法中可以看出(以下只是代码片段):protected final void processRequest(HttpServletRequest request, Ht原创 2020-07-15 14:00:27 · 3023 阅读 · 0 评论 -
【源码系列之springMVC】(二、请求处理:processRequest)
客户端发送get或者post等请求,会调用Servelt项相对应的方法,比如get请求,就会执行Servlet的doGet方法。进过查看,DispatcherServelt类中并没有覆盖这几种方法,根据java多态的特性,如果子类没有此方法,那么就去直接父类找。然后在FrameworkServlet类中找到了处理这些请求的方法:FrameworkServlet的processRequest方法处理所有请求。...原创 2020-07-10 17:07:34 · 2185 阅读 · 2 评论 -
【源码系列之springMVC】(一、servlet入口:DispatcherServlet统筹全局之初始化web上下文)
今天来说说深入一下SpringMVC,在学习SpringMVC源码之前,必须得了解javaEE原生的Servlet的工作流程,以tomcat为例子:在web.xml中配置servlet,指定servlet-class以及servlet-mapping。然后请求过来根据mapping映射到servlet的类,执行其中的doGet、doPost等方法。具体这里就不细说了。一、从我们的web.xml入手2.1 从init参数设置bean属性:ServletConfigPropertyValues方法2.2 如果原创 2020-07-09 17:40:16 · 396 阅读 · 0 评论 -
Springboot官网学习(7、Web应用程序 十二Spring Web MVC 之ConfigurableWebBindingInitializer 初始化参数绑定配置】)
这节来说springboot中的初始化参数配置,使用过SSM的都知道,springmvc中的初始化参数配置是可以通过@InitBinder来实现参数初始化配置,示例:以去除字符串前后空格为例:package com.osy.config;import com.osy.editorregistrar.ZyDateEditor;import org.springframework.beans.propertyeditors.StringTrimmerEditor;import org.spring原创 2020-06-22 14:27:56 · 516 阅读 · 0 评论 -
Springboot官网学习(7、Web应用程序【十一Spring Web MVC 之WebMvcConfigurer(addViewControllers方法,配置预先处理控制器,比如:404)】)
addViewControllers是预先配置一些没有逻辑的控制器,后面可能根据一些情况,然后转发到这里,这里就简单使用一下吧,使用的情况应该不是很多。package com.osy.config;import com.osy.annotation.AdminController;import com.osy.annotation.AppController;import org.springframework.context.annotation.Bean;import org.springf原创 2020-06-21 21:08:11 · 868 阅读 · 0 评论 -
Springboot官网学习(7、Web应用程序【十Spring Web MVC 之WebMvcConfigurer(addCorsMappings方法,配置跨域请求处理。)】)
跨域这个词,我相信在前后端分离项目中,应该是比较常见的一个词语,跨域具体我这里就不细说了,直接上代码看看springboot中如何配置跨域的:(代码中注释很详细)package com.osy.config;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;@Configurationpublic class WebMvc原创 2020-06-21 20:48:25 · 570 阅读 · 0 评论 -
Springboot官网学习(7、Web应用程序【九Spring Web MVC 之WebMvcConfigurer(addResourceHandlers方法,添加静态资源路径映射)】)
这个比较常用,配置静态资源与请求地址映射,使得springmvc不对其进行拦截,并且能够快速找到:代码如下:package com.osy.config;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;@Configurationpublic class WebMvcConfiguration { @Bean原创 2020-06-21 20:33:24 · 2764 阅读 · 0 评论 -
Springboot官网学习(7、Web应用程序【八Spring Web MVC 之WebMvcConfigurer(addInterceptors方法,添加生命周期拦截器)】)
我们在项目中,有时候需要监听一下从发出请求到后台处理渲染页面完成这一时间段内的生命周期,并根据实际业务加以限制,比如比较常用的就是拦截所以验证是否登录。那么springmvc给我们提供了添加自定义生命周期拦截器的配置,那就是addInterceptors,那么我们就来学习一下他的使用吧。1、创建配置类,并且通过注解@Bean的方式返回WebMvcConfigurer加入到spring容器里面package com.osy.config;import com.osy.annotation.AdminC原创 2020-06-21 14:30:39 · 4011 阅读 · 0 评论 -
Springboot官网学习(7、Web应用程序【七Spring Web MVC 之WebMvcConfigurer(configureContentNegotiation方法,内容协商机制)】)
今天来说说内容协商机制。内容协商机制这个太专业的名称,说下来,头一次听的话,估计是无法理解他其中的含义的。那么我这里就用大白话说一下吧。就是客户端向服务端发送一个请求,然后服务端给客户端返回什么格式的数据的,是需要两端进行协商的,既然是协商,那么他们有什么协议或者规则呢?下面一探究竟:一般现在服务端返回的数据基本都是json格式的数据,以前返回的是xml,那么现在如果要返回xml格式的数据,springmvc也是提供得有方法的。@RequestMapping系列注解中produces可以指定返回原创 2020-06-21 12:05:39 · 1757 阅读 · 5 评论 -
Springboot官网学习(7、Web应用程序【六Spring Web MVC 之WebMvcConfigurer(configurePathMatch方法,给控制器加上统一前缀)】)
WebMvcConfigurer是springMvc提供的一个可以扩展的配置springmvc的,那么在springboot中如何使用呢?springboot官网提到WebMvcConfigurer是配置跨域Cors引出的:官方实例:@Configuration(proxyBeanMethods = false)public class MyConfiguration { @Bean public WebMvcConfigurer corsConfigurer() {原创 2020-06-20 23:11:52 · 3846 阅读 · 0 评论 -
Springboot官网学习(7、Web应用程序【五Spring Web MVC 之模板引擎以及静态资源】)
之前我们写的项目中,使用SSM中,我们的静态资源需要我们在配置文件中进行配置的,但是springboot的约定大于配置的理念,就节省了我们去手动配置,难么他约定的在哪里,然后springmvc不进行拦截呢?默认情况下,Spring Boot从类路径中名为/static(/public或/resources或/META-INF/resources)的目录或根目录提供静态内容ServletContext。它使用ResourceHttpRequestHandlerSpring MVC中的from,因此您可以通原创 2020-06-20 22:00:51 · 177 阅读 · 3 评论 -
Springboot官网学习(7、Web应用程序【四Spring Web MVC 之MessageCodesResolver 参数绑定,全局异常处理参数绑定错误】)
Spring MVC的具有产生错误代码从绑定错误的渲染错误消息的策略:MessageCodesResolver。如果您设置spring.mvc.message-codes-resolver-format属性PREFIX_ERROR_CODE或POSTFIX_ERROR_CODE,Spring Boot会为您创建一个(请参阅中的枚举DefaultMessageCodesResolver.Format感觉一头雾水:于是搜索了一波,作用:在springmvc进行参数绑定的时候,会出现一些绑定错误,那么他就.原创 2020-06-19 19:22:55 · 1373 阅读 · 0 评论 -
Springboot官网学习(7、Web应用程序【三Spring Web MVC 之自定义JSON序列化器和反序列化器,让你的项目起飞】)
上一节Springboot官网学习(7、Web应用程序【一 Spring Web MVC 之HttpMessageConverters消息转换器】)我们学习了自己定制消息转换器,SpringMVC框架使用HttpMessageConverter转换器类来转换http请求数据和响应数据。如果需要配置的话,通过注解@Bean来返回我们自己配置的消息转换器。HttpMessageConverter在转换http请求和响应的过程中,就需要将java对象转为JSON字符串,也叫做序列化;或者将JSON字符串转为jav原创 2020-06-18 23:34:16 · 370 阅读 · 1 评论 -
spring自带的jdbcTemplate的BeanPropertyRowMapper在数据库字段映射到实体时,null映射成为默认值
公司开发一直都是使用的spring自带的jdbcTemplate,虽然拼接sql比较麻烦,但是个人觉得使用起来比较灵活,一些复杂的sql可以通过java轻松来进行组装。但是有一个比较致命的问题就是,有些基本数据类型,比如int,long,double之类的,如果数据库为空,那么就会报异常,解决方案一: 将数据库设置默认值,这样能够解决一部分问题,对于left join 等链接查询的,如果链接的不存在,那么也会出现同样的问题,问题得不到完全解决;解决方案二: 使用基本数据类型的封装类,使用封装类有比较多原创 2020-06-10 10:17:18 · 2304 阅读 · 1 评论 -
springmvc实现全局参数绑定去除前后空格,使用@InitBinder初始化绑定注解
在公司做项目的时候,由于前期项目没有规划好,导致在做查询的时候,用户复制过来进行查询的大多前面后空格,然后不注意就查不出来,使客户有一种系统有问题的感觉,比较头疼。由于之前对springmvc理解不是很透彻,想过在实体的get方法或者set方法做处理,在get或者set属性时候去除空格,项目使用的是lombok,参照了一些文档,试图修改lombok在生成get或者set的方法,最后未果。后面想了一下,springmvc参数绑定原理,觉得springmvc可能提供了这方面的扩展,所以就按照springmv原创 2020-06-10 09:42:47 · 1172 阅读 · 1 评论