从零开始学GeoServer源码十一(如何处理多个文件解析器Multipart Resolver引起的冲突问题)
创始人
2024-05-30 08:55:01
0

目录

  • 前言
  • 1.现象
  • 2.排查问题
  • 3.找到问题
  • 4.解决问题
  • 5.总结

前言

本文起源于我们遇到的一个问题,本来 GeoServer 使用的好好的,但是有天突然发现,无法在 GeoServer 中上传样式的 sld 文件了,报错 “No Multipart-config for Servlet” ,这不是奇怪了,我们命名配置了文件解析器了,为什么会产生这种错误,经过排查是存在文件解析器冲突问题,本来特此记录一下。

1.现象

  一个普通的上传样式 sld 样式文件,结果报错:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.排查问题

  很明显这是一个文件上传报错,意思是没有配置 Multipart 文件解析器,但是奇怪的是我们明明配置了文件解析器了,我们的另外一个文件上传模块都能好好的工作,以下这个文件上传模块的配置:
在这里插入图片描述
  这就很奇怪了,这不是有文件解析器吗?为什么不起作用?难道说还要再配置一个文件解析器?于是给 web 模块也配置上解析器,结果还是不行,这不是奇怪了。
  于是我们转变下思路,这个 sld 上传功能是 Wicket 框架自带的,是不是 Wicket 哪里配置有问题,于是去查 Wicket 文档
在这里插入图片描述
  还是没找到答案。于是考虑到是不是 GeoServer 的bug,将原生 GeoServer 重新编译测试,居然可以正常上传,那就是我们哪里改出的问题!那么关于文件上传,我们还改了哪里呢?自然就是我们自己写的文件上传模块,也就是上文中的配置。

3.找到问题

  那么答案显而易见了,肯定是我们自己写的文件解析器和 Wicket 的文件解析器冲突了,导致 sld 的上传没能被 Wicket 的解析捕获到,那么我们下一步工作就是来解决两个 Multipart Resolver 的冲突问题了。

4.解决问题

  多个文件解析器的冲突解决,网上有很多资料,最简单的就是我们自己写一个文件解析器,这个解析器继承 Spring 的解析器,根据自己的业务进行一些修改,主要是修改 isMultipart 方法,代码如下:

import org.springframework.web.multipart.commons.CommonsMultipartResolver;
import javax.servlet.http.HttpServletRequest;
public class UserDefineMultipartResolver extends CommonsMultipartResolver {@Overridepublic boolean isMultipart(HttpServletRequest request){String servletPath=request.getServletPath();String uri=request.getRequestURI();if(uri.startsWith("/geoserver/file/Upload")){//说明是文件,是multipart,需要spring的multipart解析return true;}else if(servletPath.equals("/web")){//说明不是multipart,直接return falsereturn false;}else {//其他的交给父类去判断return super.isMultipart(request);}}
}

配置的时候自然也要把解析器配置成我们自己的解析器
在这里插入图片描述

  其实注释已经写的很明白了,就是如果是我们自己的方法,自己的文件,直接 return true,告诉 Spring 要进行解析,如果是其他情况,就走 GeoServer 默认的处理方法。这样我们的方法和 Wicket 的方法都能正常运行。

5.总结

  万事万物都是有原因的,不正常的运行状态必然是有不正常的逻辑引起的。我们正式靠着这一逻辑,一步一步,逐渐定位问题并解决问题,最终解决了多个 Multipart Resolver 之间的冲突问题。希望各位读者也能秉持这一思想,精益求精。回见~

相关内容

热门资讯

小仓鼠在笼子里一动不动的是怎么... 小仓鼠在笼子里一动不动的是怎么回事?小仓鼠应该是生病了,建议尽快处理,找兽医看看,他们最专业。目前应...
扬州何园的寻访感受 扬州何园的寻访感受 你好,请参考: 初见何园,似乎有种似曾相识的感觉,或许意识到这种想...
童年傻事作文---速来 童年傻事作文---速来童年傻事 童年是多么美好,童年的生活令人向往,童年的天空总是那么蓝,而童...
家庭幽默大赛老韩头一家幽默服装... 家庭幽默大赛老韩头一家幽默服装秀家庭幽默大赛老韩头一家幽默服装秀这都被他看出来了  今天晒内裤了,室...
乐器名称 乐器名称我在小提琴协奏曲《梁祝》的视频里这种乐器不知叫什么名字,请懂音乐和乐器的朋友给予解答,谢谢。...
电视剧《老马家的幸福往事》中的... 电视剧《老马家的幸福往事》中的马鸣和徐丽娜在马鸣的大学里的图书馆里偷书时用留声机听的歌是什么名字的请...
流鬼的介绍 流鬼的介绍 流鬼,是古代民族,分布在今俄罗斯勘察加半岛,有数万人。
请问为爱所困火吗 请问为爱所困火吗一般般。爱情偶像剧。此剧上一年开播,还上了微博热搜榜我认为很火,为爱所困第二部还有不...
什么是手诊 什么是手诊手诊的概念就是指通过人体手的纹路形态、变化、规律等方式,对人体器官的演变作出推理的一种防治...
双子星公主法和希的有几集,第一... 双子星公主法和希的有几集,第一部第二部都要,如果知道第三部也透露一点,请求不要编,法和希最后怎样了拜...
王熙凤简介 王熙凤简介《红楼梦》中人物,贾琏之妻,王夫人的内侄女。长着一双丹凤三角眼,两弯柳叶吊梢眉,身量苗条,...
大学生应从哪些方面进行自我探索 大学生应从哪些方面进行自我探索兴趣、能力、价值观、性格,这四个是最主要的方面,其中价值观是核心
谁有好看的卡通人物的电脑背景! 谁有好看的卡通人物的电脑背景!卡通人物的背景要清色! 看得清 要男生的 我有Clannad主题...
幼儿园小班孩子座位固定好还是经... 幼儿园小班孩子座位固定好还是经常换好?我家孩子座位老换,我觉得不好,大家觉得呢?... 我家孩子座...
我的爸爸的作文 我的爸爸的作文我的父亲 人们常说父爱如山,可在我看来,我的父亲对我的爱,并非完全如山那样严峻,有时却...
潘朵拉之心第二季动漫什么时候出 潘朵拉之心第二季动漫什么时候出动画只出了第一季 没有要出第二季的消息 可能性估计很小目前漫画还在连载...
时不我待是什么意思 时不我待是什么意思时不我待的意思是时间不等待人,要抓紧时间,不要虚度光阴。出处:日月逝矣,岁不我与。...
葫芦小金刚里大娃怎么被抓的 葫芦小金刚里大娃怎么被抓的掉泥潭被捉的
有一部小说叫穿越千年来爱你还是... 有一部小说叫穿越千年来爱你还是什么的有一部小说叫穿越千年来爱你还是什么的内容讲的是一个女的在路上走着...
火影忍者力 米娜是红眼吗 火影忍者力 米娜是红眼吗红眼?首先这几集是原创,非岸本创作。在岸本的剧情结构里面只有木叶白眼、写轮眼...