乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Tomcat使用注意事項(xiàng)_servlet版本

       一本正經(jīng)地胡鬧 2019-11-15

      原文鏈接: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)用都是沒有意義的。
      OK,既然如此,那就優(yōu)化唄!

      解決

      但是這個(gè)filter作為一個(gè)基礎(chǔ)SDK,已經(jīng)被接近200個(gè)業(yè)務(wù)方使用,所以不得不考慮升級(jí)的成本,為了使得推動(dòng)升級(jí)的過程可以較為順利,所以希望盡量減少業(yè)務(wù)方升級(jí)的成本(最好是只需要改一下POM文件中的版本就可以)。
      于是乎,想了個(gè)主意,自定義一個(gè)XXXRequest implements HttpServletRequest ,然后重寫getAttribute方法。其實(shí)就是簡單的代理。
      把filter中的邏輯移到這個(gè)XXXRequest中,原先filter中的doFilter改為:

      public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException {
              HttpServletRequest request = (HttpServletRequest) servletRequest;
              HttpServletResponse response = (HttpServletResponse) servletResponse;
              chain.doFilter(new XXXRequest(request), response);
          }

      在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):

      java.lang.NoClassDefFoundError: javax/servlet/http/HttpUpgradeHandler

      盯著代碼沉默一會(huì),我覺得自己的代碼沒有問題,自信是程序員的本能!但是,問題就是這么發(fā)生了!本人有個(gè)習(xí)慣,電腦上必裝jdk6,jdk7,jdk8,tomcat6,tomcat7,tomcat8,就是為了這一刻。于是嘗試了不同的環(huán)境,發(fā)現(xiàn)在tomcat7下,會(huì)報(bào)上面的錯(cuò),如果是tomcat6的話:

      java.lang.NoClassDefFoundError: javax/servlet/http/Part

      好吧,還是NoClassDefFoundError。可是我的POM里是有依賴的?。?/p>

      <dependency>
                  <groupId>javax.servlet</groupId>
                  <artifactId>javax.servlet-api</artifactId>
                  <version>3.1.0</version>
              </dependency>

      去看了看Tomcat官網(wǎng)的介紹,才明白,不同版本的Tomcat支持的Servlet規(guī)范的版本是不一樣的:
      這里寫圖片描述

      錯(cuò)竟然就是我用的javax.servlet-api版本太高,只有Tomcat8.0.x之后才支持。

      于是試了Tomcat8,果然可以!當(dāng)然,解決方案其實(shí)是降低我這個(gè)sdk中的javax.servlet-api的版本。
      永遠(yuǎn)都有自己不知道的東西,我能做的只有吸取每次教訓(xùn)。希望可以對(duì)你們工作和學(xué)習(xí)有一點(diǎn)幫助。

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多