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下面