亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

SpringMVC同時使用<mvc:resources … />和日期轉換Formatter時出現問題的解決方法

2019-11-06 06:06:07
字體:
來源:轉載
供稿:網友

文章

另外加上了一些自己的一些解釋和標記 注:紅色標記的是自己的一些筆記

很久沒更新博文了,不是沒有學習,而是很多東西記在OneNote里面,收獲很多啊,因為各種雜事,所以對于博客很久沒更新了。

個人覺得:博客比起OneNote或者為知筆記之類的云筆不同在于博客應該記載的是比較成體系的東西,所以很多東西我準備統一回顧我學到的東西后,再成體系的更新在這里來。

廢話說多了,先處理RT的問題。

一、問題由來

在學習SPRingMVC的過程中,對于URL的攔截,我使用了RESTful,這是一種在形式上沒有動詞沒有后綴結尾的URL表現形式,利用PUT/POST/DELETE/GET來表示 更新、添加、刪除、查找4個不同動作的一種變現形式,具體的說明,我想我可能后來會將它寫成博文,但是我更推薦的是大家如果想了解這個方面的知識,請參考:http://www.ruanyifeng.com/blog/2011/09/restful.html 他才是大神。

因為使用了RESTful所以,在將Servlet作為Controller中的時候,web.xml中配置攔截的url-pattern就寫成了 / ,如下所示:

<servlet> <servlet-name>SpringMVC</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring/spring-mvc.xml</param-value> </init-param> <!--load-on-startup這沒有默認值的,如果不寫或者值是負數的話,那在 Servlet 容器啟動時并不會初始化這個 Servlet,而會在第一次用到時才進行初始化。正數值越小優選級越高--> <load-on-startup>1</load-on-startup> <!--async = False 表示同步方式運行,即程序要等到該語句(比如xmlDom.load())運行完畢并返回結果后才繼續執行下一條語句。這種方式編程較簡單,但程序會發生停頓現象(也就是俗稱的卡); async = True 表示異步方式運行,就是說程序發出命令后不等其運行完畢就繼續執行下一條語句。程序會通過相應的事件處理過程來接收和處理該語句的運行結果--> <async-supported>true</async-supported> </servlet> <servlet-mapping> <servlet-name>SpringMVC</servlet-name> <!-- 此處可以可以配置成 *.do ,對應struts的后綴習慣 --> <url-pattern>/</url-pattern> </servlet-mapping>

如果配置成這樣,對于靜態資源(js,CSS等)也會被攔截,因為沒有Mapping和其對應,很顯然會報404的錯誤。

二、問題處理方式

對于此靜態資源的問題,我采用了RT所示的

<mvc:resources mapping="/css/**" location="/WEB-INF/statics/css/" /> <mvc:resources mapping="/js/**" location="/WEB-INF/statics/js/" /> <mvc:resources mapping="/images/**" location="/WEB-INF/statics/images/" /> <mvc:resources mapping="/*.html" location="/" />

項目目錄結構如下:

這里寫圖片描述

在項目最初將其集成進去的過程中,沒有任何錯誤,一切看上去都是那么的美好。。。但是主角的故事必定充滿意外。。。

終于在那么一天,當我把全局的Formatter 集成進去,想將字符串轉成Date的時候,出問題啦,此時對于SpringMVC我的配置是:

<mvc:annotation-driven conversion-service="conversionService" /> <!-- 靜態資源映射 --> <!-- 比如${basePath}/css/ht.css 會自動請求location中的css --> <mvc:resources mapping="/css/**" location="/WEB-INF/statics/css/" /> <mvc:resources mapping="/js/**" location="/WEB-INF/statics/js/" /> <mvc:resources mapping="/images/**" location="/WEB-INF/statics/images/" /> <mvc:resources mapping="/*.html" location="/" /> <!-- 日期統一轉換 --> <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"> <property name="formatters"> <set> <bean class="com.mc.bsframe.formatter.DateFormatter"> <constructor-arg name="datePattern" value="yyyy-MM-dd HH:ss:mm" /> </bean> </set> </property> </bean>

錯誤提示是:

2016-06-08 23:22:13,966 DEBUG org.springframework.beans.TypeConverterDelegate.convertIfNecessary() - Original ConversionService attempt failed - ignored since PropertyEditor based conversion eventually succeededorg.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.util.ArrayList<?>] to type [java.util.List<org.springframework.core.io.Resource>] for value '[/WEB-INF/statics/js/]'; nested exception is org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type [java.util.ArrayList<?>] to type [org.springframework.core.io.Resource] at org.springframework.core.convert.support.ConversionUtils.invokeConverter(ConversionUtils.java:41) at org.springframework.core.convert.support.GenericConversionService.convert(GenericConversionService.java:192) at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:173) at org.springframework.beans.AbstractNestablePropertyaccessor.convertIfNecessary(AbstractNestablePropertyAccessor.java:576) at org.springframework.beans.AbstractNestablePropertyAccessor.convertForProperty(AbstractNestablePropertyAccessor.java:603) at org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:203) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.convertForProperty(AbstractAutowireCapableBeanFactory.java:1527) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1486) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1226) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:772) at org.springframework.context.support.AbstractapplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:839) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:538) at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:666) at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:632) at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:680) at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:551) at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:492) at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136) at javax.servlet.GenericServlet.init(GenericServlet.java:158) at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1238) at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1151) at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1038) at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4996) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5285) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1408) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1398) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745)Caused by: org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type [java.util.ArrayList<?>] to type [org.springframework.core.io.Resource] at org.springframework.core.convert.support.GenericConversionService.handleConverterNotFound(GenericConversionService.java:313) at org.springframework.core.convert.support.GenericConversionService.convert(GenericConversionService.java:195) at org.springframework.core.convert.support.CollectionToCollectionConverter.convert(CollectionToCollectionConverter.java:87) at org.springframework.core.convert.support.ConversionUtils.invokeConverter(ConversionUtils.java:35) ... 36 more

其實我當時很納悶,之前用Spring3.X的時候記得沒有這個問題出現,目前換成Spring4.X的時候就出現這個問題了,具體的原因優點深奧,相關的資料也查找到了,大體上就是之前的是對于資源的存儲使用的是String[]現在改成了ArrayList<>造成的問題。

三、解決方法

以上說了這么多,解決方法對于大部分人來說才是最重要的。

*移除全局的Formatter。 *使用另外的方式進行靜態資源的映射。 經過考慮我使用了后者,處理步驟如下:

1.靜態資源從WEB-INF下移動到WebApp下面。 2.注釋 <mvc resource…>代碼 3.在SpringMVC的xml配置中加上,它的意思就是沒有映射到的URL交給默認的web容器中的servlet進行處理:

<mvc:default-servlet-handler />

最終的關鍵配置如下:

<mvc:annotation-driven conversion-service="conversionService" /> <!-- 如果使用了RESTful形式的攔截,那么對于靜態資源的處理上,就需要加上此句,靜態資源(沒有映射的)就會 --> <mvc:default-servlet-handler /> <!-- 日期統一轉換 --> <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"> <property name="formatters"> <set> <bean class="com.mc.bsframe.formatter.DateFormatter"> <constructor-arg name="datePattern" value="yyyy-MM-dd HH:ss:mm" /> </bean> </set> </property> </bean>

接下來對于處理靜態資源,日期格式,整體搭建SSM,以及相關注意點后繼續出爐。

由于最后靜態文件交由RESTful形式攔截,去掉了<mvc:resources .../>總感覺很不好,而且最后也沒說之后會有什么問題,所以結合了網上的一些資料,還有一種解決方案就是: 1.問題的原因是`<mvc:resources .../> 和bean中ID為conversionService在同時出現就會出現這個問題,具體什么原因還不清楚。 2.只需要把ean中ID為conversionService的名稱改一下就可以了,什么都不要動,配置還是原來的配置 3.具體代碼實現: 這里寫圖片描述


上一篇:PAT 1023

下一篇:maven配置發布倉庫

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
超碰97人人做人人爱少妇| 97在线观看免费| 国产91亚洲精品| 欧美日韩亚洲一区二| 日本欧美一级片| 国产精品免费网站| 国产精品日韩电影| 日韩av免费在线看| 色吧影院999| 欧美自拍视频在线观看| 欧美一区二区三区四区在线| 国产欧美在线看| 国内精品国产三级国产在线专| 久久99亚洲精品| 国内精品美女av在线播放| 另类图片亚洲另类| 成人xvideos免费视频| 日韩av网站导航| 亚洲福利视频在线| 热re99久久精品国产66热| 日韩h在线观看| 欧美在线一级va免费观看| 成人福利网站在线观看| 亚洲国产精品久久精品怡红院| 亚洲精品美女在线观看播放| 国产精品无av码在线观看| 国产精品久久久久9999| 久久91亚洲精品中文字幕奶水| 国产91在线播放精品91| 久久精品国产免费观看| 亚洲香蕉在线观看| 欧美一区二区色| 欧美精品电影免费在线观看| 亚洲精品电影在线观看| 久久天天躁日日躁| 国产福利视频一区| 亚洲香蕉av在线一区二区三区| 国产丝袜一区二区| 91极品女神在线| 久久久久国产一区二区三区| 亚洲精品视频二区| 91高潮在线观看| 91久久精品国产| 久久成人精品一区二区三区| 亚洲日本欧美日韩高观看| 91情侣偷在线精品国产| 欧美性xxxxxxxxx| 91人成网站www| 亚洲欧美日韩区| 国产精品亚洲欧美导航| 91精品国产综合久久香蕉922| 欧美一区二区三区精品电影| 亚洲欧美另类自拍| 中文字幕亚洲综合久久| 亚洲已满18点击进入在线看片| 国产精品精品视频| 国产精品丝袜高跟| 国产美女91呻吟求| 国内精品久久久久久久久| 2019国产精品自在线拍国产不卡| 国产精品一区二区av影院萌芽| 国产一区二区三区视频免费| 亚洲影院高清在线| 欧美激情一区二区三区高清视频| 国产精品91久久久久久| 亚洲欧美变态国产另类| 欧美激情精品久久久久久免费印度| 日韩av一区在线观看| 久久综合久久88| 日韩av一区二区在线| 日韩高清欧美高清| 国产一区二区三区在线看| 亚洲精品第一国产综合精品| 精品国产依人香蕉在线精品| 国产999在线| 亚洲国产成人在线播放| 26uuu另类亚洲欧美日本老年| 亚洲成人网在线| 亚洲欧美国产精品专区久久| 亚洲精品美女久久久久| 久久久黄色av| 欧美日韩国产va另类| 亚洲性生活视频| 欧美成人在线影院| 欧美激情区在线播放| 国产日本欧美一区二区三区| 日本免费久久高清视频| 国产91精品久久久久久| 亚洲图片欧洲图片av| 一区二区三区久久精品| 欧美黑人性视频| 韩剧1988在线观看免费完整版| 欧美日韩综合视频网址| 国产精品男女猛烈高潮激情| 亚洲精品一区中文| 久久99久久久久久久噜噜| 日本高清不卡的在线| 成人网在线免费看| 欧美在线精品免播放器视频| 日韩欧美中文在线| 日韩欧美在线免费观看| 超在线视频97| www.亚洲成人| 久久久999成人| 日韩高清中文字幕| 国产精品视频区1| 国产97在线视频| 日韩久久精品电影| 中文字幕亚洲二区| 亚洲一级免费视频| 日韩在线视频观看| 欧美性猛交xxxx久久久| 国产亚洲成av人片在线观看桃| 久久久久久久久国产精品| 亚洲精品福利免费在线观看| 国产在线精品一区免费香蕉| 国产欧美一区二区三区在线| 欧美性jizz18性欧美| 中国日韩欧美久久久久久久久| 亚洲成人亚洲激情| 久久亚洲国产精品| 亚洲a一级视频| 国产91在线播放九色快色| 色偷偷88888欧美精品久久久| 久久精品影视伊人网| 日韩国产欧美精品在线| 91爱视频在线| 久久99精品久久久久久琪琪| 国产一区深夜福利| 一本一本久久a久久精品牛牛影视| 97在线观看视频国产| 久久精品夜夜夜夜夜久久| 91精品国产99久久久久久| 日韩成人在线播放| 国产精品女主播视频| 亚洲一区二区久久久久久| 亚洲激情在线视频| 成人做爰www免费看视频网站| 色综合久久天天综线观看| 欧美国产日韩中文字幕在线| 国产+人+亚洲| 日韩精品亚洲元码| 亚洲精品成a人在线观看| 亚洲人成自拍网站| 日韩精品免费电影| 亚洲欧美另类人妖| 欧美夫妻性生活xx| 国产精品99免视看9| 欧美激情视频在线免费观看 欧美视频免费一| 国产精品99久久久久久久久久久久| 久久久亚洲欧洲日产国码aⅴ| 精品亚洲va在线va天堂资源站| 国产精品久久999| 国产精品久久久久久久久借妻| 欧美性做爰毛片| 日韩av免费在线看| 国语自产在线不卡| 欧美国产日本在线| 91精品国产91久久久久久最新| 欧美激情在线视频二区| 亚洲国产天堂久久综合网| 精品久久久久久久久中文字幕| 精品日本高清在线播放| 欧美日韩综合视频网址|