前端:
定义一个工具类:
package sun;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
/**
- 数据库工具类
- 1、连接数据库
- 2、关闭资源
- @author Lisa Li
*/
public class DBUtil1 {
public static void main(String[] args) {
System.out.println(getConnection());
}
public static Connection getConnection(){
Connection conn=null;
try {
//加载配置文件
InputStream in=DBUtil1.class.getClassLoader().getResourceAsStream("bb.properties");
//创建配置对象
Properties ps=new Properties();
//把数据加载到配置文件中
ps.load(in);
//加载驱动
Class.forName(ps.getProperty("jdbcName"));
//建立数据连接
//conn=DriverManager.getConnection(ps.getProperty("dbUrl"), ps.getProperty("dbName"), ps.getProperty("dbPwd"));
String dbName = ps.getProperty("dbName");
String dbPwd = ps.getProperty("dbPwd");
String dbUrl = ps.getProperty("dbUrl");
conn = DriverManager.getConnection(dbUrl, dbName, dbPwd);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
//关闭资源
public static void close(ResultSet resultSet, PreparedStatement ps , Connection conn){
if(resultSet!=null){
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (ps != null) {
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
在定义一个user类:
package sun;
public class User1 {
private Integer id;
private String uname;
private String upwd;
public User1() {
// TODO Auto-generated constructor stub
}
public User1(Integer id, String uname, String upwd) {
super();
this.id = id;
this.uname = uname;
this.upwd = upwd;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public String getUpwd() {
return upwd;
}
public void setUpwd(String upwd) {
this.upwd = upwd;
};
}
注释:
/*
登录按钮绑定点击事件
1、得到用户名和密码
2、判断是否为空
如果为空,提示用户不允许为空,return
3、向后台发送ajax请求,得到后台的响应数据
$.ajax({
type:“post”,
url:“login”,
data:{
uname:用户名,
upwd:密码
},
success:function(data) {
// 处理响应的结果
// code = 1,表示登录成功;code=0,表示登录失败
}
});
*/
function checkForm(){
var uname=$("#uname").val();// 得到value的值
var upwd=$("#upwd").val();
//boolean isEmpty() 当且仅当 length() 为 0 时返回 true。
if(isEmpty(uname)||isEmpty(upwd)){
//alert("名称或者密码不能为空");
$("#msg").html("名称或者密码不能为空");
return;
}
//$("msg").html("");
//发送ajax请求 的得到后台数据响应
$.ajax({
type:"post",
url: "login1",
data:{
'uname':uname,
'upwd' :upwd
},
//回调函数
success:function(data){
console.log(data);
if(data.code==1){// 登录成功
// 跳转到另外一个页面
window.loaction.href="index.html";
}else{
//登录失败
alert("登录失败");
}
}
});
}
//自定义一个方法 判断字符串是否为空 为空返回true 否则false
//boolean isEmpty() 当且仅当 length() 为 0 时返回 true。
function isEmpty(str){
//trim() 此字符串移除了前导和尾部空白的副本;如果没有前导和尾部空白,则返回此字符串。
if(str==null|| str.trim()==""){
return true;
}
return false;
}
后台
新建Servlet类
1 右键src目录 ,新建Servlet,直接finsih
2、修改@WebServlet组件中的值为@WebServlet("/login")
3、删除类中的所有方法,重写service()方法 (方法的参数是http相关的)
@WebServlet("/login1")
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* 1、接收前台传递的参数 uname upwd
2、判断用户名和密码是否为空
如果为空,返回0,return
3、通过用户名查询用户记录是否存在 (查询操作),返回user对象
4、判断user对象是否为空(如果查到记录,user对象一定会有值;否则为空)
如果为空,返回0,return
5、如果user对象不为空,将数据库查询到的用户密码与前台传递过来的密码作比较
如果不正确,返回0,return
6、如果正确,登录成功,返回1
JDBC的查询操作:通过用户名询用户记录是否存在
1、得到数据库连接
2、准备sql语句
3、预编译sql语句
4、设置参数,下标从1开始
5、执行查询,返回resultSet结果集
6、判断并分析结果集
如果存在,则从resultSet中取到数据,设置到user对象中
7、关闭资源
8、返回user对象
*
*/
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 获取前台传递的指定名称参数 getParameter(String name) 1、如果前台是ajax提交数据,则name代表的是参数的key值 2、如果前台是表单提交,则name代表的是表单元素的name属性值
// 所有的请求数据都需要通过request对象获取;响应数据需要使用response对象,响应数据需要通过response得到响应刘,输出数据
// 1、获取参数
String userName = request.getParameter("uname");
String userPwd = request.getParameter("upwd");
// 设置响应类型及编码
response.setContentType("application/json;charset=UTF-8");
// System.out.println(userName+"----"+userPwd);
// 2、判断用户名和密码是否为空
if (StringUtil.isEmpty(userName) || StringUtil.isEmpty(userPwd) ) {
// 如果为空,返回0,return
response.getWriter().write("{\"code\":0,\"msg\":\"用户名或密码不能为空!\"}"); // 不能直接输出数字0
return;
}
// 3、通过用户名查询用户记录是否存在 (查询操作),返回user对象
User user = findUserByUname(userName);
// 4、判断user对象是否为空(如果查到记录,user对象一定会有值;否则为空)
if (user == null) {
// 如果为空,返回0,return
response.getWriter().write("{\"code\":0,\"msg\":\"用户不存在!\"}"); // 不能直接输出数字0
return;
}
// 5、如果user对象不为空,将数据库查询到的用户密码与前台传递过来的密码作比较
if (!userPwd.equals(user.getUpwd())) { // 不相等
// 如果不正确,返回0,return
response.getWriter().write("{\"code\":0,\"msg\":\"密码不正确!\"}"); // 不能直接输出数字0
return;
}
// 6、如果正确,登录成功,返回1
response.getWriter().write("{\"code\":1,\"msg\":\"登录成功!\"}");
/**
* JDBC的查询操作:通过用户名查询用户记录是否存在
1、得到数据库连接
2、准备sql语句
3、预编译sql语句
4、设置参数,下标从1开始
5、执行查询,返回resultSet结果集
6、判断并分析结果集
如果存在,则从resultSet中取到数据,设置到user对象中
7、关闭资源
8、返回user对象
*/
public User1 findUserByUname(String userName) {
User1 user=null;
Connection conn=null;
PreparedStatement ps = null;
ResultSet resultSet = null;
//建立连接
conn=DBUtil1.getConnection();
//准备sql语句
String sql="select * from tb_user where uname=?";
// 预编译sql语句
try {
ps=conn.prepareStatement(sql);
//设置值
ps.setString(1, userName);
// 5、执行查询,返回resultSet结果集
resultSet=ps.executeQuery();
// 6、判断并分析结果集
if(resultSet.next()){
user=new User1();
// 如果存在,则从resultSet中取到数据,设置到user对象中
user.setId(resultSet.getInt("id"));
user.setUname(userName);
user.setUpwd(resultSet.getString("upwd"));
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
DBUtil1.close(resultSet, ps, conn);
}
return null;
}