解决servlet filter中if语句无效问题

今天写代码学习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


版权声明:本文为qq_39587172原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。