您的位置:首页 > 数据库

调试servlet程序遇到的问题

2010-08-19 21:03 483 查看
package com.tsinghua;

import javax.servlet.http.*;

import java.io.*;

import java.sql.*;

public class LoginCL2 extends HttpServlet{
 public void doPost(HttpServletRequest req,HttpServletResponse res){
   Connection conn=null;
   Statement st=null;
   ResultSet rs=null;


   try{
      String uname=req.getParameter("username");
      String upassword=req.getParameter("pw");
     //使用纯Java jdbc连接数据库
    Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
    //得到链接
    conn=DriverManager.getConnection("jdbc:microsoft:sqlserver://127.0.0.1:1433;databaseName=spdb","sa","dongaiqin2005");
    //创建statement
    st=conn.createStatement();
    //因为用户名在数据库中是不能重复的,记录是唯一的,
   //所以可以使用select top 1,让服务器如果找到一条对应的记录后,
    //就不再就需查找数据库,因为符合要求的记录最多有一条,如果继续查找数据库
     //也是做无用功,只会使效率降低
    rs= st.executeQuery("select top 1 * from users where  username='" + uname+ "'and passwd='" + upassword + "'" );
    if(rs.next()){
     //如果rs.next()为true,说明查到一条记录
     //将验证成功的信息写入session
     //1.获取session
     HttpSession hs= req.getSession(true);
    //修改session的有效时间,单位是 秒
    hs.setMaxInactiveInterval(20);
    //2.写入信息
    hs.setAttribute("password","true");
    res.sendRedirect("Welcom?UserName=" + uname+"&PassWord="+upassword);
    }else{
         res.sendRedirect("Login2");
    //res.sendRedirect("Login2");中参数是该servlet的访问时用的url
    }
 }catch(Exception e){
      e.printStackTrace();
  }finally{
          try{
                if(rs!=null){
                     rs.close();
                }
                if(st!=null){
                     st.close();
                }
                if(conn!=null){
                    conn.close();
                }
         }catch(Exception e){
              e.printStackTrace();
         }
    }
 }
 
 public void doGet(HttpServletRequest req,HttpServletResponse res){
     this.doPost(req,res);
 }
}


 

注:使用下面的语句,会存在sql注入问题

rs= st.executeQuery("select top 1 * from users where  username='" + uname+ "'and passwd='" + upassword + "'" )

注:在调试上述servlet时,遇到了问题,令我很烦恼,

问题1:字母的大小写
抛出异常
java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SqlServerDriver
解决方法:
发现驱动名写错,
com.microsoft.jdbc.sqlserver.SQLServerDriver
错写为
com.microsoft.jdbc.sqlserver.SqlServerDriver
问题2:from语句附近有错误
解决方法:
发现select语句写错,
"select top 1 * from users where  username='" + uname
+ "'and passwd='" + upassword + "'"
错误1:select top 1 *    语句中的*没写
而写为select top 1
错误2:passwd写错,与数据库中的字段名不符
数据库中的字段名是 passwd
而在LoginCL.java中错写为password
注意:要想不抛出
java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDriver异常
还需要把sqlserver2000的jdbc驱动程序
Msbase.jar,
mssqlserver.jar
msutil.jar

放在webapps/自己的web应用文件夹/WEB-INF/lib下面
或者放在tomcat安装目录/common/lib下面
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息