别不信!servlet获取到的参数值,也许完全出乎你的意料!-创新互联

先贴出来简单得不能再简单的demo页面效果:

主要从事网页设计、PC网站建设(电脑版网站建设)、wap网站建设(手机版网站建设)、响应式网站建设、程序开发、微网站、小程序开发等,凭借多年来在互联网的打拼,我们在互联网网站建设行业积累了丰富的成都网站设计、成都做网站、网络营销经验,集策划、开发、设计、营销、管理等多方位专业化运作于一体,具备承接不同规模与类型的建设项目的能力。

别不信!servlet获取到的参数值,也许完全出乎你的意料!

如下是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页面,


<%@ page contentType="text/html;charset=UTF-8" %>


    
    


    
取消订单

如上,当通过浏览器访问http://localhost:8083/mytest/toCancel?orderNo=123,通过log可知打印出来的orderNo=123,这没什么可质疑的。

but,然后,再点击页面上的“取消订单”,打印出来的日志你猜是什么?好奇的你,急于想知道答案的话就Ctrl+A吧~~orderNo=123,null

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

如何解释这种情况?

我的理解:servlet在解析请求参数的值时,会通过逗号拼接所有地方的请求。本例orderNo参数的取值,包括get方式的orderNo参数,还包括form表单里的name="orderNo"域的值,所以,点击按钮事件时,orderNo参数的值是“123,null”。

今天在对生产排障时,奇怪的发现,查单的sql语句里,where条件中orderNo的参数值不是一个特定的字符串,而是“123,null”或“123,123”,最后发现原来是jsp页面和webcontroller交互处理不当导致的。本文记录下来,以备园子里其他同学做参考。

别不信!servlet获取到的参数值,也许完全出乎你的意料!

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


网站标题:别不信!servlet获取到的参数值,也许完全出乎你的意料!-创新互联
新闻来源:http://ybzwz.com/article/goshe.html