今天写代码学习filter时,遇到了一件很奇怪的事情,就是当在jsp中同时提交文件和一个text组件时,servlet中的if语句无法返回true,代码如下
这是jsp代码:
<form action="uploadservlet" method="post" enctype="multipart/form-data">
<input type="file" name="myfile" aligin="center"><br><br>
<input type="text" name="psd" aligin="center"><br><br>
<input type="submit" value="上传文件">
</form>
这是filter中的代码
if(ps=="1") {
System.out.println("filter运行成功");
req.getRequestDispatcher("list.jsp").forward(req, res);
return;
}
如果这样写代码的话,filter中的代码永远都不会返回true,也就无法执行其中的相应代码,而当改为
if(ps!="1") {
System.out.println("filter运行成功");
req.getRequestDispatcher("list.jsp").forward(req, res);
return;
}
时,又会一直返回false,在试探了很久之后,我感觉到可能是enctype="multipart/form-data"这一段代码的原因,如果去掉这个属性就可以了。
在网上查阅之后发现enctype 属性规定在发送到服务器之前应该如何对表单数据进行编码。
默认地,表单数据会编码为 “application/x-www-form-urlencoded”。就是说,在发送到服务器之前,所有字符都会进行编码(空格转换为 “+” 加号,特殊符号转换为 ASCII HEX 值)
enctype的属性和信息为
问题可以定位到这里,但是背后的原理不容易弄清楚,想要详细了解的可以参照以下链接:
http://www.w3school.com.cn/tags/att_form_enctype.asp
https://blog.csdn.net/mazhibinit/article/details/49667511