最近在做一个用户登录页面,本来我的登录页面和验证登录页面是分开的,即输入完用户名和密码并点击确定后跳转到另一个页面进行验证,验证成功后再回到相应页面,后来觉得不好,于是想把两个页面合并起来,即将form标签的action属性定义为当前页面。
由于开始做,因而我的验证思路十分简单,我限定一个用户名和密码,然后再和用户输入的进行比对。
代码如下(login.jsp):
<form action="login.jsp" method="post">
<p>用户名:<input type="text" name="Username1" value="username"></p>
<p>密码:<input type="password" name="Password1" value="password"></p>
<p>
<input type="submit" value="登录" name="Submit">
<input type="reset" value="重置" name="Reset">
</p>
</form>
<%
String usnm = request.getParameter("Username");
String pswd = request.getParameter("Password");
if(!usnm.equals("angel")||!pswd.equals("123456")){//用户名或密码错误
%>
<strong>用户名或密码错误!</strong>
<%}else{%>
<p>登录成功,页面自动跳转中...</p>
<meta http-equiv="refresh" content="3;url=index.jsp">
<%}%>
结果浏览器直接报错:java.lang.NullPointerException
我知道它是指这句话:if(!usnm.equals("angel")||!pswd.equals("123456"))
中的usnm和pswd为空,但是我刚开始就给它们赋值了啊(value="username",value="password")
而且应该是当我点击登录后它才开始验证吧,我明明还没有填写,更没有点击登录按钮,它怎么就直接去验证了呢?
请各位指点一下吧。
顺便说一句,我学JSP没几天,有些东西不懂导致用错了滴,还请指出,谢谢了。
由于开始做,因而我的验证思路十分简单,我限定一个用户名和密码,然后再和用户输入的进行比对。
代码如下(login.jsp):
<form action="login.jsp" method="post">
<p>用户名:<input type="text" name="Username1" value="username"></p>
<p>密码:<input type="password" name="Password1" value="password"></p>
<p>
<input type="submit" value="登录" name="Submit">
<input type="reset" value="重置" name="Reset">
</p>
</form>
<%
String usnm = request.getParameter("Username");
String pswd = request.getParameter("Password");
if(!usnm.equals("angel")||!pswd.equals("123456")){//用户名或密码错误
%>
<strong>用户名或密码错误!</strong>
<%}else{%>
<p>登录成功,页面自动跳转中...</p>
<meta http-equiv="refresh" content="3;url=index.jsp">
<%}%>
结果浏览器直接报错:java.lang.NullPointerException
我知道它是指这句话:if(!usnm.equals("angel")||!pswd.equals("123456"))
中的usnm和pswd为空,但是我刚开始就给它们赋值了啊(value="username",value="password")
而且应该是当我点击登录后它才开始验证吧,我明明还没有填写,更没有点击登录按钮,它怎么就直接去验证了呢?
请各位指点一下吧。
顺便说一句,我学JSP没几天,有些东西不懂导致用错了滴,还请指出,谢谢了。
String pswd = request.getParameter("Password1");
偷懒一点的方法是
String usnm = request.getParameter("Username");
String pswd = request.getParameter("Password");if(usnm == null || usnm.equals("")){
return;
}if(pswd == null || pswd .equals("")){
return;
}
再去判断
if(!usnm.equals("angel")||!pswd.equals("123456")){
建议写个工具类,将所有字符串先过滤一次。如果是NULL就变成""然后再去判断不为"" 就不会出现空指针异常了
}
<%
un = request.getParameter("Username");
pswd = request.getParameter("Password");
if (un == null||pswd == null) {}//如果为空则啥事也不干
else if(un.equals("angel")&&pswd.equals("123456")){
%>
<p>登录成功,页面自动跳转中...</p>
<meta http-equiv="refresh" content="3;url=index.jsp">
<p>若浏览器未自动跳转,请点击此处<a href="index.jsp">返回主页</a></p>
<%} else {//用户名或密码错误%>
<strong>用户名或密码错误!</strong>
<%}%>
就是加了一句if (un == null||pswd == null) {};这样的话,如果为空则啥事也不干,嘿嘿,成功了。
多谢laowai250的提醒,谢谢大家。
String usnm = request.getParameter("Username1");
String pswd = request.getParameter("Password1");
建议LZ把逻辑代码放到servlet里,页面form提交给servlet处理。
jsp部分只做显示用。
if(!"angle".equals(usnm)||!"123456".equals(pswd))这么写的话就不会再报空指针异常
楼主的问题有3个错误,一个
错误1:楼主太马虎了name取错了
原文改成:
String usnm = request.getParameter("Username1");
String pswd = request.getParameter("Password1");
2.异常处理:
没有传入的话肯定回报空指针异常,原文改成:
if(!"angle".equals(usnm)||!"123456".equals(pswd))这么写的话就不会再报空指针异常
3.顺序逻辑错误:
当楼主你点确定时,页面跳转到login.jsp,页面将重新加载信息,用户名和密码的文本框中被value值替代.
假设楼主输入用户名为admin,按确定后,页面跳转,执行String usnm = request.getParameter("Username1");
usnm的值将是username而不是admin,永远登录不成功!
改正做法:
把jsp <%...%> 代码写在页面最开始的位置,并加条件判断
如:
if(request.getParameter(Username1)!=null){
执行<%...%>中的所以代码
}
请试着将:if(!usnm.equals("angel")||!pswd.equals("123456"))
改为:if(!"angel".equals()||!"123456".equals(pswd))
String usnm = request.getParameter("Username1");
String pswd = request.getParameter("Password1");
上面的前辈说的是真的也是正确的 细心点吗 还有接受的时候还要注意字符串和int的接受
真是太感谢了。
String pswd = request.getParameter("Password1");
这里面取值的时候 不能用id 用的是name属性
String pswd = request.getParameter("Password");
呵呵 楼上这么多人说了 我就顶一下吧
应该改为 if(!"angel".equals(usnm)||!"123456".equals(pswd)){//用户名或密码错误否则就会产生null异常的