最近自己在学习web开发,想做个jsp+servlet的用户密码登录界面,遇到了以下几个问题不太理解,寻求大家帮助。1.jsp代码如下,但是在浏览器上面显示的text框和password框的长度却不一样,password框小了一点,什么原因?
  <td>
  用户名:
  </td>
  <td>
  <input type="text" name="username" size="20">
  </td>
  </tr>
  <tr>
  <td>
  密&nbsp&nbsp&nbsp&nbsp码:
  </td>
  <td>
  <input type="password" name="password" size="20">
  </td>2.代码如下:
(1)为什么JavaScript中判断空的时候要加return false;不加的话就跑到下一个画面去了?
(2)为什么jsp中要用return usrCheck(),只用usrCheck()也不行?
《JavaScript》
function usrCheck() {
  var username = document.loginForm.username.value;
  var password = document.loginForm.password.value;
  if (username == "") {
    alert("用户名不能为空!");
    return false;
  }
         }
《jsp》
          <input type="submit" value="登录" onclick="return usrCheck()">3.在servlet中判断用户名密码是否正确,如果不正确的话,怎么才能让页面在回到登录页面,并且显示“用户名密码不正确”。4.能顺便说说Button与submit的区别吗?

解决方案 »

  1.   

    1.长度不一样是因为text默认为浏览器定义的字体或中文字体,而password默认是英文字体.长度要想一样可以设置style的width属性或者定义text和password字体一样.
    2.判断空不需要加return false,加上的原因见你代码.
    onclick="return usrCheck()" 定义了onclick事件,这个事件完成后会提交表单,因为你的input是submit类型.而return false;可以阻止方法继续传播.
    3.servlet中判断,如果正确转到正确的页面,这步怎么做的,返回错误页面也怎么做.不过用户体验的原因,用户希望返回他以前输入的数据和错误原因,你可以再返回的时候顺便携带这些信息.也可用异步请求ajax来做,看个人喜好和需求了.异步的话需要判断正确后跳转正确的页面,错误时候用js将错误信息呈现.
    4.button 和 submit 只是在页面呈现的时候可能长的差不多.本来用途是不一样的.button 是普通按钮,功能略少与<button>标签,可以定义button的onclick单击事件来完成各种操作,当然也可以提交表单.submit本身就是用来提交表单的,就算没有定义onclick事件,他也会提交他所在的form表单.当前也可以定义onclick事件在提交前做别的事情,但是只要他的onclick事件没有停止传播,onclick事件完成后,表单就会提交.
      

  2.   

    (1)为什么JavaScript中判断空的时候要加return false;不加的话就跑到下一个画面去了?
    答:他告诉程序,程序运行return之后就后跳出此方法、以下代码不执行、否则执行下面代码
    跑到下一个画面去了?
    (2)为什么jsp中要用return usrCheck(),只用usrCheck()也不行?
    答:表单form会接收一个boolean数据 如果是false的话就不执行提交功能 怎么能把false让form接收到呢 这就用到了return;(3)在servlet中判断用户名密码是否正确,如果不正确的话,怎么才能让页面在回到登录页面,并且显示“用户名密码不正确”。
    答:你可以写一个model类,类里面的内容是把页面上的数据作为条件,在数据库里进行查看一下,如果存在则返回个true(也就是存在此账号密码 并接登录成功),否则返回false,然后在servlet里把页面的参数获取到,可以用String userName=request.getParameter("userName");密码同上 然后把参数传入到类中进行操作,如Boolean bUser=baseDao.findUser(userName,password);然后判断bUser是否为true就可以达到目的。
    返回页面也很简单,可以这么写request.getRequestDispatcher("index.jsp").forward(request,response);
    提示用户密码不正确可以这么写, 在servlet中
    if(bUser==false)
    {
       request.setAttribute("error","用户名或密码不正确")
    }
    在index.jsp中
    <%
    try{
    String error=(String)request.getAttribute("error");
    }
    catch(Exception e){}
    %>
    <%=error %>(4)能顺便说说Button与submit的区别吗?
    答:区别就是submit按钮不可以直接调用form的submit()方法 从而进行提交数据 而button需要自己定义
      

  3.   


    首先,谢谢你这么耐心的解答,不过我还有两个问题(1)。上面这段代码放到程序中会报错,<%=error %>中的error不识别,应该是在try外面的原因吧。另外,这样写,刚跑出画面的时候画面上会有一个null,不想显示它,怎么解决?(2)。我今天又遇见了一个新问题,请求帮助:那段判断代码我是这样写的,不知道好不好。
      <%
        String error = (String)request.getAttribute("error");
        if (error != null) {
      %>
      <script type="text/javascript">
        alert("用户名或密码错误!");
      </script>
      <%
        }
      %>问题:我的用户界面网址是http://localhost:8081/SalSys/Login.jsp
    当我第一次输入错误的用户名密码时,弹出上面的对话框,但是上面的网址显示的是
    http://localhost:8081/SalSys/login,而我在程序中写的是:
    request.getRequestDispatcher("Login.jsp").forward(request, response);为什么不跳到
    http://localhost:8081/SalSys/Login.jsp呢?
    我第二次输入正确的用户名,正常跳转到下一个页面,但是上面的网址显示的还是
    http://localhost:8081/SalSys/login,而我在程序中写的是:
    request.getRequestDispatcher("Home.jsp").forward(request, response);为什么不跳到
    http://localhost:8081/SalSys/Home.jsp呢?
    而在这个操作以后我点击浏览器的后退键,同样弹出了那个错误的对话框,而我想点击浏览器的后退键的时候,返回登录画面,怎么做?
      

  4.   

    转页的话你可以使用response.sendRedirect(“路径”)方法
      

  5.   

    button是普通按钮,SUBMIT是按钮提交的属性,按钮分别有3中属性,普通,重置和提交属性
      

  6.   

    IE 下密码框和文本框的长度是不一样的,使用 CSS 的 width 控制一下就可以了。
      

  7.   

    问题:我的用户界面网址是http://localhost:8081/SalSys/Login.jsp
    当我第一次输入错误的用户名密码时,弹出上面的对话框,但是上面的网址显示的是
    http://localhost:8081/SalSys/login,而我在程序中写的是:
    request.getRequestDispatcher("Login.jsp").forward(request, response);为什么不跳到
    http://localhost:8081/SalSys/Login.jsp呢?
    我第二次输入正确的用户名,正常跳转到下一个页面,但是上面的网址显示的还是
    http://localhost:8081/SalSys/login,而我在程序中写的是:
    request.getRequestDispatcher("Home.jsp").forward(request, response);为什么不跳到
    http://localhost:8081/SalSys/Home.jsp呢?
    而在这个操作以后我点击浏览器的后退键,同样弹出了那个错误的对话框,而我想点击浏览器的后退键的时候,返回登录画面,怎么做?
    还是没得到想要的答案,能说的明白点吗?