从零开始学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 之间的冲突问题。希望各位读者也能秉持这一思想,精益求精。回见~

相关内容

热门资讯

重磅!一线城市房地产调控全面松... 一线城市房地产调控全面松绑,释放购房新信号2025 年,房地产市场风云突变,一则重磅消息如惊雷般响彻...
晶科能源携多款创新光储方案亮相... 转自:证券日报网    本报记者 曹琦    6月11日至13日,第十八届(2025)国际太阳能光伏...
“山有木兮卿有意,昨夜星辰恰似... “山有木兮卿有意,昨夜星辰恰似你”是什么意思?“山有木兮卿有意,昨夜星辰恰似你”的意思是“我对你有意...
股权转让+增资 日联科技拿下... 转自:证券日报网    本报记者 李亚男    6月13日晚间,日联科技集团股份有限公司(以下简称“...
一个人开什么店好,两万块开什么... "劳动人民、劳动灵魂和劳动都是人."这在去年开始流行,所有工作的人都拿他们的工作开玩笑。经过几十年的...
杭州市城区周边哪里有菜地(旱地... 杭州市城区周边哪里有菜地(旱地)或山地租?我想租个几亩种种?若有,大概要多少钱一亩?杭州市城北郊区就...
西湖不欢迎“粗暴的手” 转自:中国环境网近日,“杭州西湖石刻有人拔断松鼠尾巴”一事引起了网友们的关心和讨论。对此,西湖水域管...
吕姓股民向普利退发起索赔 许峰...   受损股民可至Hehson股民维权平台登记该公司维权:http://wq.finance.sina...
家里有几个多事的大姑姐怎么办 家里有几个多事的大姑姐怎么办其实只要心态放平一点就好了,家里的大姑姐平常也没有什么事情做,所以只能聊...
贝尔计划赛季末重返皇马,贝尔重... 贝尔计划赛季末重返皇马,贝尔重回皇马的主要原因有哪些?齐达内让他进入首发,不是信任,而是希望在今年夏...
名侦探柯南为什么会有快兰的说法 名侦探柯南为什么会有快兰的说法你可以去看剧场版十四天空中的遇难船的1分30秒的预告片里面有……小兰和...
求跟侠岚类型的动画片 求跟侠岚类型的动画片《千年寻》一样!
刘备为何不踏实治理好夺取的荆州... 刘备为何不踏实治理好夺取的荆州四郡,而是非要借南郡?因为南郡的地理位置太过于紧要,是荆州四郡的门户,...
问道手游70套装怎么做 问道手... 问道手游70套装怎么做 问道手游70级极品套装打造步骤全面解析首先来说的第一个问题 套装是由超级...
苏超第四轮燃爆,网友:小龙虾大... 格隆汇6月14日|据央视财经,在苏超第四轮赛事中,淮安队将迎战南京队,被大家调侃是“小龙虾”与“盐水...
卓驭科技CEO沈劭劼:智能驾驶...   2025第十七届轩辕汽车蓝皮书论坛于2025年6月13日-15日在广州举行。卓驭科技CEO沈劭劼...
倾世王妃的繁体字怎么写的啊 倾世王妃的繁体字怎么写的啊倾世皇妃__倾世皇妃倾世王妃差别就在第一个字
羊城夏夜上演“粤乐新唱·潮挞非... 中新网广州6月14日电 (程景伟 文瑶)当高胡的悠扬遇见架子鼓的爆裂,当粤剧的锣鼓铿锵与贝斯的低沉吟...
前5月我国人民币贷款增加10.... 转自:中工网人民日报海外版北京6月13日电(记者徐佩玉)中国人民银行13日发布的金融统计数据显示,前...
光纤宽带机房为什么有尖叫声 光纤宽带机房为什么有尖叫声呵呵,主板设备,交换机里面有很多小的散热风扇,你听到的声音应该是风扇的声音...