原文鏈接:http://www./detail.html?id=8732 背景最近在工作中,發(fā)現(xiàn)一個(gè)filter處理HttpServletRequest,處理完之后在把一些結(jié)果setAttribute到request中,供后續(xù)使用,但是發(fā)現(xiàn)這個(gè)filter中的邏輯很多情況下都是不必要的,而且這個(gè)filter使用非常廣泛,這么多次不必要的邏輯處理,導(dǎo)致了某個(gè)服務(wù)的QPS高的可怕,保守估計(jì),至少有60%的服務(wù)調(diào)用都是沒有意義的。 解決但是這個(gè)filter作為一個(gè)基礎(chǔ)SDK,已經(jīng)被接近200個(gè)業(yè)務(wù)方使用,所以不得不考慮升級(jí)的成本,為了使得推動(dòng)升級(jí)的過程可以較為順利,所以希望盡量減少業(yè)務(wù)方升級(jí)的成本(最好是只需要改一下POM文件中的版本就可以)。
在XXXRequest的getAttribute時(shí),才會(huì)真正的來調(diào)用服務(wù),進(jìn)行原先的邏輯處理??梢岳斫鉃閼刑幚砹耍挥性谡嬲枰臅r(shí)候才走這塊邏輯。 問題暴露開始推動(dòng)業(yè)務(wù)方升級(jí)了,一開始興高采烈,直到有一天一個(gè)人來找我,說,升級(jí)完之后項(xiàng)目啟動(dòng)不了了。自己debug完之后,發(fā)現(xiàn):
盯著代碼沉默一會(huì),我覺得自己的代碼沒有問題,自信是程序員的本能!但是,問題就是這么發(fā)生了!本人有個(gè)習(xí)慣,電腦上必裝jdk6,jdk7,jdk8,tomcat6,tomcat7,tomcat8,就是為了這一刻。于是嘗試了不同的環(huán)境,發(fā)現(xiàn)在tomcat7下,會(huì)報(bào)上面的錯(cuò),如果是tomcat6的話:
好吧,還是NoClassDefFoundError。可是我的POM里是有依賴的?。?/p>
去看了看Tomcat官網(wǎng)的介紹,才明白,不同版本的Tomcat支持的Servlet規(guī)范的版本是不一樣的: 錯(cuò)竟然就是我用的javax.servlet-api版本太高,只有Tomcat8.0.x之后才支持。 于是試了Tomcat8,果然可以!當(dāng)然,解決方案其實(shí)是降低我這個(gè)sdk中的javax.servlet-api的版本。 |
|