昨天做了一个简单的模拟登录功能,用个form表单给Servlet传两个参数(usernaem、password)然后就在后台获取这两个值看是否一样,若一样就在页面输出Welcome、不一样就输出Wrong。
填写页面很容易,写处理的Servlet的时候 就遇到了麻烦。代码如下:
String username = (String)request.getAttribute("username");
String password = (String)request.getAttribute("password");
if(username = = password){
out.println("WELCOME!")
}else{
out.println("ERROR!");
}
问题来了:
不管我输入的是否一样,界面都和我说“WELCOME”。看着挺亲切的但是出问题了。
那我就在控制台打印一下看看值吧。username和password的值都为null。这时意识到可能应该使用request.getParameter("..");一换果然就成功了。
结论:null == null为真的,但是null.equals(null)报错
getParameter()和getAttribute()的区别:
1、返回值不同,getParameter()的返回值是String而getAttribute()的返回值是Object
2、request.getAttribute()方法返回request对象容器中的数据值(肯定是有人先setAttribute了),而request.getParameter()方法 是 获取http提交过来的数据。说的简单点:getParameter()得到的数据是网页的使用者给的,而getAttribute()得到的数据很可能 是程序员在哪搞的鬼。
3、getParameter:用于客户端重定向时,即点击了链接或提交按扭时传值用,即用于在用表单或url重定向传值时接收数据 用。
getAttribute:用于服务器端的重定向时,即在Servlet中使用了forward函数getAttribute只能拿到程序setAttribute的值。