最近在做一个用户登录页面,本来我的登录页面和验证登录页面是分开的,即输入完用户名和密码并点击确定后跳转到另一个页面进行验证,验证成功后再回到相应页面,后来觉得不好,于是想把两个页面合并起来,即将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没几天,有些东西不懂导致用错了滴,还请指出,谢谢了。

解决方案 »

  1.   

      String usnm = request.getParameter("Username1");
      String pswd = request.getParameter("Password1");
      

  2.   

    呵呵。。!咱是用name获得的哦!
      

  3.   

    错误出在,你的HTML文本域的名字和你获取的名字不一样你这里的代码应该写的更严谨一点。
    偷懒一点的方法是
    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就变成""然后再去判断不为"" 就不会出现空指针异常了
    }
      

  4.   

    LZ,你太粗心大意了,你的表单里面填写的是 Username1和Password1     到了下面取值的时候你把那个1都漏掉了,当然会出现空指针异常啦,因为找不到这个名字。下次细心一点吧。不过我建议最好是吧页面和逻辑判断分开来做,这样清楚一点  找起错误也方便一点,页面就只有HTML的一些代码加上EL表达式和JSTL,逻辑判断可以写在Setlvet中
      

  5.   

    哈哈,知道了,这样就行了:
                <%
                            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的提醒,谢谢大家。
      

  6.   

    LZ ,
    String usnm = request.getParameter("Username1");
    String pswd = request.getParameter("Password1");
      

  7.   

    你现在的问题是解决了,可是你这样做会有很多的问题,你只是用简单的验证,没有通过数据库查询获得。
    建议LZ把逻辑代码放到servlet里,页面form提交给servlet处理。
    jsp部分只做显示用。
      

  8.   

    一般这两句话都不是像你这样写的,如果你没有传入的话肯定回报空指针异常,应该这样写
    if(!"angle".equals(usnm)||!"123456".equals(pswd))这么写的话就不会再报空指针异常
      

  9.   


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

  10.   

    在用equals比较时,比较稳妥的写法是将确保不为空的String放在前:
    请试着将:if(!usnm.equals("angel")||!pswd.equals("123456"))
    改为:if(!"angel".equals()||!"123456".equals(pswd))
      

  11.   

    晕,呵呵,这种问题我刚开始学习时也老出现,明明记得自己写的没问题,可就是出错,仔细一查就是因为一些单词啥的少写等,还有LZ以后可以用"angel"equeals(username);这样就可以避免出现不必要的空指针了!
      

  12.   


    String usnm = request.getParameter("Username1");
    String pswd = request.getParameter("Password1");
     上面的前辈说的是真的也是正确的 细心点吗 还有接受的时候还要注意字符串和int的接受
      

  13.   

    "laowai250",你真是我滴救命恩人,我今天晚上在调程序的时候差点死在这里了:原来null与“”不相等!
    真是太感谢了。
      

  14.   

    String usnm = request.getParameter("Username1");
      String pswd = request.getParameter("Password1");
    这里面取值的时候 不能用id   用的是name属性
      

  15.   

      String usnm = request.getParameter("Username");
      String pswd = request.getParameter("Password");
    呵呵 楼上这么多人说了 我就顶一下吧
      

  16.   

     if(!usnm.equals("angel")||!pswd.equals("123456")){//用户名或密码错误
    应该改为 if(!"angel".equals(usnm)||!"123456".equals(pswd)){//用户名或密码错误否则就会产生null异常的