Tomcat 無(wú)法解析POST請(qǐng)求的參數(shù)


這幾天碰到一個(gè)問(wèn)題。服務(wù)發(fā)布后神妹,無(wú)法接收post請(qǐng)求颓哮。準(zhǔn)確的說(shuō),所有post請(qǐng)求的參數(shù)都為空鸵荠。為什么會(huì)出現(xiàn)這種情況呢冕茅?

首先,得明確所有的post請(qǐng)求都是存放在http body里面的蛹找。之所以通常我們可以通過(guò)getParamenter(name)去獲取參數(shù)姨伤,是因?yàn)槿萜鳎╰omcat, jetty等)對(duì)http body的內(nèi)容進(jìn)行了處理,把參數(shù)讀取到了paramenterMap里面庸疾。

接下來(lái)去解決問(wèn)題姜挺。

網(wǎng)上說(shuō)有一種情況,說(shuō)我的請(qǐng)求是multiplepart的方式彼硫。顯然不是這個(gè)原因炊豪,我已經(jīng)加了這樣的攔截,如果是multiple-part拧篮,直接轉(zhuǎn)成MultipartRequest词渤。況且,通過(guò)請(qǐng)求頭的打印串绩,可以驗(yàn)證這一點(diǎn)缺虐。

public class MultiplePartInterceptor implements Interceptor {

    public MultiplePartInterceptor() {
        super();
    }


    @Override
    public void intercept(Invocation inv) {
        String content_type = inv.getController().getRequest().getContentType();
        System.out.println(content_type);
        if (content_type != null && content_type.toLowerCase().indexOf("multipart") != -1) {
            if (inv.getController().getRequest() instanceof MultipartRequest == false)
                inv.getController().setHttpServletRequest( new MultipartRequest(inv.getController().getRequest()));
        }
        
        inv.invoke();
    }

}

還有一種說(shuō)法,就是我在getParamenter之前就調(diào)用了getInputStream或者getReader礁凡。因?yàn)檫@兩個(gè)方法只能讀取一次高氮,第二次讀取的時(shí)候就為null。getParamenter其實(shí)第一次也是從http body里面讀取一次顷牌。所以剪芍,如果getParamenter如果發(fā)生在getInputStream之后,那么getParamenter是沒(méi)有值的窟蓝。但是也明顯不是這個(gè)原因罪裹。因?yàn)椋绦蛑笆呛玫模竺媾既话l(fā)生的這個(gè)問(wèn)題状共。為了驗(yàn)證這個(gè)套耕,我還在getParamenter之后打印了http body里面的內(nèi)容。沒(méi)有問(wèn)題峡继。如果真的需要多次調(diào)用getInputStream冯袍,可以通過(guò)重寫(xiě)HttpServletRequestWrapper來(lái)實(shí)現(xiàn)這個(gè)。推薦一篇博客

System.out.println(getRequestBody(request.getInputStream()));

 //獲取http body
 private String getRequestBody(InputStream stream) {
        String line = "";
        StringBuilder body = new StringBuilder();
        int counter = 0;

        // 讀取POST提交的數(shù)據(jù)內(nèi)容
        BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
        try {
            while ((line = reader.readLine()) != null) {
                if (counter > 0) {
                    body.append("\r\n");
                }
                body.append(line);
                counter++;
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

        return body.toString();
    }

那么現(xiàn)在問(wèn)題來(lái)了碾牌,具體是什么原因呢康愤。之前用的tomcat8的容器,現(xiàn)在把tomcat8刪掉小染,換一個(gè)tomcat7翘瓮。一切正常贮折,post請(qǐng)求能正常接收裤翩。那肯定是tomcat的配置錯(cuò)了。經(jīng)過(guò)仔細(xì)比對(duì)调榄,終于發(fā)現(xiàn)了問(wèn)題的所在踊赠。之前為了上傳文件,設(shè)置了取消post請(qǐng)求限制maxPostSize=0每庆。但是筐带,tomcat8以后,maxPostSize必須小于0才能關(guān)閉post請(qǐng)求大小的限制缤灵。所以把maxPostSize的值改為-1就正常了伦籍。

<Connector connectionTimeout="20000" maxPostSize="-1" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>

有時(shí)候,在解決一個(gè)問(wèn)題的過(guò)程中腮出,往往會(huì)讓你對(duì)某個(gè)技術(shù)點(diǎn)有更深入的了解帖鸦。所以,不要怕遇到問(wèn)題胚嘲,重要的是遇到問(wèn)題后能形成解決問(wèn)題的思路作儿。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市馋劈,隨后出現(xiàn)的幾起案子攻锰,更是在濱河造成了極大的恐慌,老刑警劉巖妓雾,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件娶吞,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡械姻,警方通過(guò)查閱死者的電腦和手機(jī)寝志,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人材部,你說(shuō)我怎么就攤上這事毫缆。” “怎么了乐导?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵苦丁,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我物臂,道長(zhǎng)旺拉,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任棵磷,我火速辦了婚禮蛾狗,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘仪媒。我一直安慰自己沉桌,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布算吩。 她就那樣靜靜地躺著留凭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪偎巢。 梳的紋絲不亂的頭發(fā)上蔼夜,一...
    開(kāi)封第一講書(shū)人閱讀 51,462評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音压昼,去河邊找鬼求冷。 笑死,一個(gè)胖子當(dāng)著我的面吹牛窍霞,可吹牛的內(nèi)容都是我干的匠题。 我是一名探鬼主播,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼官撼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼梧躺!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起傲绣,我...
    開(kāi)封第一講書(shū)人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤掠哥,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后秃诵,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體续搀,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年菠净,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了禁舷。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片彪杉。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖牵咙,靈堂內(nèi)的尸體忽然破棺而出派近,到底是詐尸還是另有隱情,我是刑警寧澤洁桌,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布渴丸,位于F島的核電站,受9級(jí)特大地震影響另凌,放射性物質(zhì)發(fā)生泄漏谱轨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一吠谢、第九天 我趴在偏房一處隱蔽的房頂上張望土童。 院中可真熱鬧,春花似錦工坊、人聲如沸献汗。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)雀瓢。三九已至枢析,卻和暖如春玉掸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背醒叁。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工司浪, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人把沼。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓啊易,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親饮睬。 傳聞我的和親對(duì)象是個(gè)殘疾皇子租谈,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容