JSP中验证用户登录时出现空指针异常问题

yuyaangel 2010-08-06 10:36:06
最近在做一个用户登录页面,本来我的登录页面和验证登录页面是分开的,即输入完用户名和密码并点击确定后跳转到另一个页面进行验证,验证成功后再回到相应页面,后来觉得不好,于是想把两个页面合并起来,即将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没几天,有些东西不懂导致用错了滴,还请指出,谢谢了。
...全文
756 31 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuyaangel 2010-08-18
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 laowai250 的回复:]

错误出在,你的HTML文本域的名字和你获取的名字不一样

你这里的代码应该写的更严谨一点。
偷懒一点的方法是
String usnm = request.getParameter("Username");
String pswd = request.getParameter("Password");

if(usnm == null || usnm.equals("")){
……
[/Quote]
"laowai250",你真是我滴救命恩人,我今天晚上在调程序的时候差点死在这里了:原来null与“”不相等!
真是太感谢了。
a404125339 2010-08-18
  • 打赏
  • 举报
回复
if(!usnm.equals("angel")||!pswd.equals("123456")){//用户名或密码错误
应该改为 if(!"angel".equals(usnm)||!"123456".equals(pswd)){//用户名或密码错误



否则就会产生null异常的
niu90 2010-08-18
  • 打赏
  • 举报
回复
ls都给出答案了,蹭分的
sustbeckham 2010-08-18
  • 打赏
  • 举报
回复
String usnm = request.getParameter("Username");
String pswd = request.getParameter("Password");


呵呵 楼上这么多人说了 我就顶一下吧
hepeng_8 2010-08-18
  • 打赏
  • 举报
回复
String usnm = request.getParameter("Username1");
String pswd = request.getParameter("Password1");


这里面取值的时候 不能用id 用的是name属性
wing1119 2010-08-11
  • 打赏
  • 举报
回复
晕,呵呵,这种问题我刚开始学习时也老出现,明明记得自己写的没问题,可就是出错,仔细一查就是因为一些单词啥的少写等,还有LZ以后可以用"angel"equeals(username);这样就可以避免出现不必要的空指针了!
king138888 2010-08-11
  • 打赏
  • 举报
回复
在用equals比较时,比较稳妥的写法是将确保不为空的String放在前:
请试着将:if(!usnm.equals("angel")||!pswd.equals("123456"))
改为:if(!"angel".equals()||!"123456".equals(pswd))
zhaoya120925417 2010-08-11
  • 打赏
  • 举报
回复
呵呵,随便看下,他们的回答是对的啊
cheng20100915 2010-08-11
  • 打赏
  • 举报
回复

楼主的问题有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){
执行<%...%>中的所以代码
}

tomandy 2010-08-11
  • 打赏
  • 举报
回复
8楼正确但是还有很细心的
佩服!!
lp916854197 2010-08-11
  • 打赏
  • 举报
回复

String usnm = request.getParameter("Username1");
String pswd = request.getParameter("Password1");
上面的前辈说的是真的也是正确的 细心点吗 还有接受的时候还要注意字符串和int的接受
yuyaangel 2010-08-10
  • 打赏
  • 举报
回复
恩,说得也是,是应该用到数据库的,所以说我这只是一个极其简单的验证哪,呵呵,数据库什么的,正在学呢。
zlss_17 2010-08-07
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 loveztbdcz 的回复:]
一般这两句话都不是像你这样写的,如果你没有传入的话肯定回报空指针异常,应该这样写
if(!"angle".equals(usnm)||!"123456".equals(pswd))这么写的话就不会再报空指针异常
[/Quote]

对的
打杂家的 2010-08-07
  • 打赏
  • 举报
回复
一般这两句话都不是像你这样写的,如果你没有传入的话肯定回报空指针异常,应该这样写
if(!"angle".equals(usnm)||!"123456".equals(pswd))这么写的话就不会再报空指针异常
chuchuzinnia 2010-08-07
  • 打赏
  • 举报
回复
你现在的问题是解决了,可是你这样做会有很多的问题,你只是用简单的验证,没有通过数据库查询获得。
建议LZ把逻辑代码放到servlet里,页面form提交给servlet处理。
jsp部分只做显示用。
sunny936 2010-08-07
  • 打赏
  • 举报
回复
LZ ,
String usnm = request.getParameter("Username1");
String pswd = request.getParameter("Password1");
yuyaangel 2010-08-07
  • 打赏
  • 举报
回复
哈哈,知道了,这样就行了:
<%
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的提醒,谢谢大家。
yuyaangel 2010-08-07
  • 打赏
  • 举报
回复
额,,,真是抱歉,那个地方是在这里敲代码时敲错了,而实际上并不是那个的问题,那里没问题的话,它还是出现空指针异常的问题。不信试试?实在不知道怎么回事。。
RefreshingBreeze 2010-08-06
  • 打赏
  • 举报
回复
加油啊
qq329480985 2010-08-06
  • 打赏
  • 举报
回复
呵呵...LZ粗心了..
加载更多回复(10)

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧