模仿javaweb开发书上的例子。
login.jsp代码如下:
<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.util.*"%>
<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head><script language="javascript">
function validate(f){
if(!(/^\w{5,15}$/.test(f.userid.value))){
alert("用户ID必须是5~15位!") ;
f.userid.focus() ;
return false ;
}
if(!(/^\w{5,15}$/.test(f.userpass.value))){
alert("密码必须是5~15位!") ;
f.userpass.focus() ;
return false ;
}
}
</script>
<body>
<h2>用户登录程序</h2>
<%
request.setCharacterEncoding("GBK") ;
%>
<%
List<String> info = (List<String>) request.getAttribute("info") ;
if(info != null){ // 有信息返回
Iterator<String> iter = info.iterator() ;
while(iter.hasNext()){
%>
<h4><%=iter.next()%></h4>
<%
}
}
%>
<form action="LoginServlet" method="post" onSubmit="return validate(this)">
用户ID:<input type="text" name="userid"><br>
密&nbsp;&nbsp;码:<input type="password" name="userpass"><br>
<input type="submit" value="登陆">
<input type="reset" value="重置">
</form>
</body>
</html>
loginServlet的代码如下:
package org.lxh.mvcdemo.servlet ;
import java.io.* ;
import java.util.* ;
import javax.servlet.* ;
import javax.servlet.http.* ;
import org.lxh.mvcdemo.factory.* ;
import org.lxh.mvcdemo.vo.* ;
public class LoginServlet extends HttpServlet {
/**
 * 
 */ public void doGet(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException{
String path = "login.jsp" ;
String userid = req.getParameter("userid") ;
String userpass = req.getParameter("userpass") ;
List<String> info = new ArrayList<String>() ; // 收集错误
if(userid==null || "".equals(userid)){
info.add("用户id不能为空!") ;
}
if(userpass==null || "".equals(userpass)){
info.add("密码不能为空!") ;
}
if(info.size()==0){ // 里面没有记录任何的错误
User user = new User() ;
user.setUserid(userid) ;
user.setPassword(userpass) ;
try{
if(DAOFactory.getIUserDAOInstance().findLogin(user)){
info.add("用户登陆成功,欢迎" + user.getName() + "光临!") ;
} else {
info.add("用户登陆失败,错误的用户名和密码!") ;
}
}catch(Exception e){
e.printStackTrace() ;
}
}
req.setAttribute("info",info) ;
req.getRequestDispatcher(path).forward(req,resp) ;
}
public void doPost(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException{
// PrintWriter out=resp.getWriter();
// out.println("hello shanghai .");
this.doGet(req,resp) ;
}
}打开login.jsp 输入admin admin ,提交
除了地址栏一闪而过,页面无任何反应。、是数据库不对,还是什么。不知道怎么调试?
请指教。

解决方案 »

  1.   

    1、看看你的提交是get还是post吧!
    2、断点打在  req.setAttribute("info",info) ;结束后看info里有东西没。
      

  2.   

    目前看着这些例子应该没有什么问题,是不是你别的地方还有问题,确保你的
    import org.lxh.mvcdemo.factory.* ;
    import org.lxh.mvcdemo.vo.* ;
    都没有问题吗
    其次是看看你的web.xml是不是配置对了
    这种情况应该是跳转到servlet里面了没有跳转出去,你打个断点调试一下,或者是沿着程序的执行路线看看,是不是哪里写错东西了
      

  3.   


            if(!(/^\w{5,15}$/.test(f.userid.value))){
                alert("用户ID必须是5~15位!") ;
                f.userid.focus() ;
                return false ;
            }
            if(!(/^\w{5,15}$/.test(f.userpass.value))){
                alert("密码必须是5~15位!") ;
                f.userpass.focus() ;
                return false ;
            }
        }if(!(/^\w{5,15}$/.test(f.userid.value)))有点问题前面正则表达式要括号if(!(/^\w{5,15}$/).test(f.userid.value())){}
      

  4.   

     if(DAOFactory.getIUserDAOInstance().findLogin(user)){
                        info.add("用户登陆成功,欢迎" + user.getName() + "光临!") ;
                        这里验证成功的话 你就跳转到一个测试成功页面 success.jsp                } else {
                        info.add("用户登陆失败,错误的用户名和密码!") ;
                        这里验证失败的话 你就跳转到一个测试失败页面error.jsp                }
      

  5.   

    不是正则表达式出问题。我直接输入servlet地址,会提示

    用户id不能为空!密码不能为空!”
    我想知道怎么用eclipse调试呢?如何插入断点。
    有相关资料吗?
    谢谢各位了。
      

  6.   

    调试到问题所在地方了。
    try{
    if(DAOFactory.getIUserDAOInstance().findLogin(user)){
    info.add("用户登陆成功,欢迎" + user.getName() + "光临!") ;
    } else {
    info.add("用户登陆失败,错误的用户名和密码!") ;
    }
    }catch(Exception e){
    e.printStackTrace() ;
    }
    这句话,if 和else都没执行。
    好像在if判断条件处出错了。会有什么错误?
      

  7.   

    f6 調試 調出 variables 看各參數的值,或者用打印的方法 
      

  8.   

    f6 調試 調出 variables 看各參數的值,或者用打印的方法 
      

  9.   

    <form action="LoginServlet" method="post" onSubmit="return validate(this)">
        用户ID:<input type="text" name="userid"><br>
        密&nbsp;&nbsp;码:<input type="password" name="userpass"><br>
        <input type="submit" value="登陆">
        <input type="reset" value="重置">
    </form>楼主的验证怎么放在form<form action="LoginServlet" method="post" onSubmit="return validate(this)">
    应该放在
    <input type="submit" value="登陆">
    里面type="submit" 换成  type="button"
    不然的话js验证不管是否正确都会执行表单提交,因为你的按钮是submit类型也就是提交类型。
      

  10.   

    调试到问题所在地方了。
    try{
    if(DAOFactory.getIUserDAOInstance().findLogin(user)){
    info.add("用户登陆成功,欢迎" + user.getName() + "光临!") ;
    } else {
    info.add("用户登陆失败,错误的用户名和密码!") ;
    }
    }catch(Exception e){
    e.printStackTrace() ;
    }
    这句话,if 和else都没执行。
    好像在if判断条件处出错了。会有什么错误?跟踪不了了。
      

  11.   

    原因分析:
    1servlet在web.xml中有没有配置
    2JS严重如果验证通过给一个返回值true
    3给每个表单写生id