別不信!servlet獲取到的參數值,也許徹底出於你的意料!

先貼出來簡單得不能再簡單的demo頁面效果:javascript

 

以下是spring mvc的Controller:html

@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頁面,java

<!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>

 

如上,當經過瀏覽器訪問http://localhost:8083/mytest/toCancel?orderNo=123,經過log可知打印出來的orderNo=123,這沒什麼可質疑的。jquery

but,而後,再點擊頁面上的「取消訂單」,打印出來的日誌你猜是什麼?好奇的你,想知道答案就Ctrl+A吧~~orderNo=123,nullweb

是否是徹底出於你的意料?!spring

 

 

如何解釋這種狀況?sql

個人理解:servlet在解析請求參數的值時,會經過逗號拼接全部地方的請求。本例orderNo參數的取值,包括get方式的orderNo參數,還包括form表單裏的name="orderNo"域的值,因此,點擊按鈕事件時,orderNo參數的值是「123,null」。瀏覽器

今天在對生產排障時,奇怪的發現,查單的sql語句裏,orderNo的值是「123,null」或「123,123」,最後發現原來是頁面和webcontroller交互處理不當致使的。本文記錄下來,以備園子裏其餘同窗作參考。mvc

相關文章
相關標籤/搜索