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没几天,有些东西不懂导致用错了滴,还请指出,谢谢了。
...全文
640 31 打赏 收藏 转发到动态 举报
写回复
用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)
Java范例开发大全(全书源程序),目录如下: 第1篇  Java编程基础 第1章  Java开发环境的搭建(教学视频:9分钟) 2 1.1  理解Java 2 1.2  搭建Java所需环境 3 1.2.1  下载JDK 3 1.2.2  安装JDK 4 1.2.3  配置环境 5 1.2.4  测试JDK配置是否成功 7 实例1  开发第一个Java程序 7 第2章  Java基础类型与运算符 实例2  自动提升 9 实例3  自动转换 10 实例4  常用基础类型之强制转换 11 2.2  运算符 12 实例5  算术运算符 12 实例6  关系运算符 13 实例7  逻辑运算符 14 实例8  位运算符 15 实例9  移位运算符 16 实例10  转型运算符 17 2.3  其他形式 18 实例11  常量与变量 18 实例12  各种进制的转换 19 实例13  Java的进制与移位运算符 22 第3章  条件控制语句(教学视频:75分钟) 26 3.1  if控制语句 26 实例14  判断输入的年份是否为闰年 26 实例15  抽奖活动 27 3.2  for语句 28 实例16  小九九乘法表 28 实例17  如何列出素数 29 实例18  Java的递归 31 实例19  男生女生各多少人 32 实例20  求水仙花数 34 实例21  求任意一个正数的阶乘 35 实例22  求n的n次方 35 实例23  利用for循环输出几何图形 36 实例24  杨辉三角 38 3.3  while语句 39 实例25  求1到100之间的和 39 实例26  存上100元需要多少天 40 实例27  输出100之间的所有偶数 41 实例28  如何判断回文数字 42 3.4  do…while语句 43 实例29  输出100之间的所有奇数 44 实例30  求最大的随机数 44 3.5  switch语句 45 实例31  判断字母分类 46 实例32  优良及差 47 实例33  打印任意一年日历 48 实例34  一年四季的划分 51 第2篇  Java数据处理 第4章  异常处理(教学视频:62分钟) 54 4.1  编译异常 54 实例35  除0发生的算术异常(ArithmeticException) 54 实例36  数组下标越界异常(ArrayIndexOutOfBoundsException) 55 实例37  数组元素类型不匹配异常(ArrayStoreException) 56 实例38  强制类型转换异常(ClassCastException) 56 实例39  索引越界异常(IndexOutOfBoundsException) 57 实例40  空指针异常(NullPointerException) 58 实例41  数字格式转换异常(NumberFornatException) 59 实例42  字符串索引越界异常(StringIndexOutBounds) 60 实例43  操作错误(UnsupportedOperationException) 60 4.2  运行异常 61 实例44  找不到指定类发生的异常(ClassNotFoundException) 62 实例45  请求的方法不存在(NoSuchMethodException) 63 4.3  try…catch捕获异常 65 实例46  try…catch捕获异常的实例 66 实例47  try…catch…finally捕获异常的实例 67 实例48  try…catch嵌套捕获异常的实例 68 4.4  throws声明异常 69 实例49  throws声明异常实例一 69 实例50  throws声明异常实例二 70 4.5  throw抛出异常 72 实例51  throw抛出异常实例一 72 实例52  throw抛出异常实例二 73 4.6  自定义异常 74 实例53  自定义异常实例一 74 实例54  自定义异常实例二 75 第5章  数组(教学视频:98分钟) 78 5.1  一维数组 78 实例55  一维数组的创建与使用 78 实例56  按相反的顺序输出 79 实例57  奇偶分组 80 实例58  找宝 81 实例59  寻找最小数 82 实例60  我的位置在哪里 83 实例61  复制数组 85 实例62  插入新元素 86 实例63  数组的合并 87 实例64  去除重复元素 88 实例65  数组求和计算 90 实例66  求最大值、最小值和平均值 91 5.2  二维数组 92 实例67  二维数组的创建与使用 92 实例68  矩阵转置 93 实例69  奇数阶幻

81,091

社区成员

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

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