java - MyEclipse+tomcat实现注册功能遇到的问题
高洛峰
高洛峰 2017-04-17 11:11:06
[Java讨论组]

web.xml中的register部分如下:

  RegisterServlet
    servlet.RegisterServlet
   
  
     RegisterServlet
     /registerServlet
  

Register.java代码段如下

public class RegisterServlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    request.setCharacterEncoding("gb2312");
    response.setContentType("gb2312");

    String username = request.getParameter("username");
    String pwd = request.getParameter("pwd");

    if(new DB().insertUser(username, pwd)){
        response.sendRedirect("login.jsp");
    }
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    doGet(request, response);
}

运行之后,浏览器没啥反应,我估计是Register.java中的if判断语句出现了问题,于是我添加了如下代码:

        if(new DB().insertUser(username, pwd)){
        response.sendRedirect("login.jsp");
    }else{
        response.sendRedirect("success.jsp");
    }

果然返回了success.jsp界面。 其中register.jsp代码段如下:

    
register
name:
Password:

其中DB.java的数据库连接代码段如下:

    Connection con;
PreparedStatement pstmt;
public DB(){
    String driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
    String url = "jdbc:sqlserver://localhost:1433; DatabaseName=JSP"; 
    String username = "load";
    String password = "hww";
    //加载驱动程序以连接数据库
    try {
        Class.forName(driverName); 
        con = DriverManager.getConnection(url, username, password);
    }
    //捕获加载驱动程序异常
    catch (ClassNotFoundException e){
        System.err.println("加载JDBC/ODBC驱动程序失败。");
        e.printStackTrace();
        System.exit(1);
    }
    //捕获连接数据库异常
    catch (SQLException e){
        System.err.println("无法连接数据库");
        e.printStackTrace();
        System.exit(1);
    }
}

判断是否添加注册用户的代码段如下:

    public boolean insertUser(String username,String pwd){
    try{
        pstmt = con.prepareStatement("insert into[userTable]values(?,?)");
        pstmt.setString(1, username);
        pstmt.setString(2, pwd);
        pstmt.executeUpdate();
        return true;
    }catch(Exception e){
        e.printStackTrace();
        return false;
    }
}

请问在哪里出错了,搞不明白。谢谢。

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(2)
迷茫

通过你的描述,可以发现时insertUser方法的问题,看你贴的方法返回false是抛出了异常,确切的说是SQLException,出现异常调用的可能点:

  1. con.prepareStatement("insert into[userTable]values(?,?)")
  2. pstmt.setString(index, value)
  3. pstmt.executeUpdate()

下面是这3点的异常在Javadoc中的描述:

@exception SQLException if a database access error occurs or this method is called on a closed connection

@exception SQLException if parameterIndex does not correspond to a parameter marker in the SQL statement; if a database access error occurs or this method is called on a closed PreparedStatement

@exception SQLException if a database access error occurs; this method is called on a closed PreparedStatement or the SQL

从你的代码来看,异常的原因应该是:

a database access error occurs

你在代码中捕获了异常,加了一个e.printStackTrace(),好吧,去控制台看日志就知道原因了。

PS: 不知你是否是刚接触这种常见的前端Web+后台DB的Java编程,碰到问题好好分析一下代码,然后根据打印出的日志,一般能很快找出原因,而且在这个过程能锻炼到自己。这种自己独立分析问题,解决问题的方法很重要,再不行,还有google,求助论坛,问答网站这种及时性相对较差的方式应该是最后的选择。而且,自己独立解决问题,哪怕再小而简单的问题,难道不是一件很爽的事情吗?

阿神

In this particular case of ClassNotFoundException looks like mysql driver jar file is missing from Classpath. If you pay attention you will find that we use method Class.forName (“driver”) to load the driver class which resides in a particular jar in case of this its mysql-connector.jar and if that jar is not in classpath or not accessible to JVM it will throw java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

Read more: http://javarevisited.blogspot.com/2011/08/classnotfoundexception-in-java-example.html#ixzz2hOHKaEa3

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号