溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

別不信!servlet獲取到的參數(shù)值,也許完全出乎你的意料!

發(fā)布時(shí)間:2020-06-12 22:01:22 來(lái)源:網(wǎng)絡(luò) 閱讀:422 作者:Java_老男孩 欄目:編程語(yǔ)言

先貼出來(lái)簡(jiǎn)單得不能再簡(jiǎn)單的demo頁(yè)面效果:

別不信!servlet獲取到的參數(shù)值,也許完全出乎你的意料!

如下是spring mvc的Controller:

@RequestMapping("mytest")
@Controller
public class ZhangTestController {

    private Logger log = LogManager.getLogger();

    @RequestMapping(value = "toCancel")
    public String toCancel( HttpServletRequest request, HttpServletResponse response, String orderNo){
        log.info("orderNo={}",orderNo);
        request.setAttribute("orderNo", null);
        return "mytest/toCancel";
    }
}

如下toCancel.jsp頁(yè)面,

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<%@ page contentType="text/html;charset=UTF-8" %>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <script type="text/javascript" src="${pageContext.request.contextPath}/static/yimei/js/jquery-1.10.2.js"></script>
    <script type="text/javascript">
        $(document).ready(function () {

            $("#chargeQuery").click(function () {
                $("#inputForm").submit();
            });

        });

    </script>
</head>
<body>
    <form id="inputForm" action="" method="post" class="form-horizontal">
        <input type="text" name="orderNo" id="orderNo" value="${orderNo}"/>
    </form>
    <span class="buyer  pay-credit" id="chargeQuery">取消訂單</span>
</body>

</html>

如上,當(dāng)通過(guò)瀏覽器訪問(wèn)http://localhost:8083/mytest/toCancel?orderNo=123,通過(guò)log可知打印出來(lái)的orderNo=123,這沒(méi)什么可質(zhì)疑的。

but,然后,再點(diǎn)擊頁(yè)面上的“取消訂單”,打印出來(lái)的日志你猜是什么?好奇的你,急于想知道答案的話就Ctrl+A吧~~orderNo=123,null

是不是完全出乎你的意料?!

如何解釋這種情況?

我的理解:servlet在解析請(qǐng)求參數(shù)的值時(shí),會(huì)通過(guò)逗號(hào)拼接所有地方的請(qǐng)求。本例orderNo參數(shù)的取值,包括get方式的orderNo參數(shù),還包括form表單里的name="orderNo"域的值,所以,點(diǎn)擊按鈕事件時(shí),orderNo參數(shù)的值是“123,null”。

今天在對(duì)生產(chǎn)排障時(shí),奇怪的發(fā)現(xiàn),查單的sql語(yǔ)句里,where條件中orderNo的參數(shù)值不是一個(gè)特定的字符串,而是“123,null”或“123,123”,最后發(fā)現(xiàn)原來(lái)是jsp頁(yè)面和webcontroller交互處理不當(dāng)導(dǎo)致的。本文記錄下來(lái),以備園子里其他同學(xué)做參考。

別不信!servlet獲取到的參數(shù)值,也許完全出乎你的意料!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI