上一篇我们已经将需要的环境搭建好了,接下来我们首先实现一个最简单的功能,那就是登陆和注册。先看一下服务器端的实现。服务器端需要和数据库进行联系,用到的技术是JDBC。
所谓的JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序,同时,JDBC也是个商标名。
在讲解JDBC之前我们先在数据库创建一个表,就是User表,然后添加几条测试数据。然后通过JDBC对表进行操作。登陆和注册对应的就是查询和插入数据。
我们可以通过命令行窗口用sql语句进行操作,但是我们有Navicat 这个工具软件,就可以通过可视化的操作创表。
id主键自增,还有username、password没有什么好说的
插入两条测试数据
到这里我们还没有开始写代码,很多小伙伴可能很着急了。接下来我们在创建服务器端项目。
新建一个Dynamic Web Project 项目。然后创建一个Servlet(如果没有学习过Servlet建议先学习一下相关知识)
再创建一个JavaBean 创建一个LoginDao接口,一个LoginDao的接口实现类LoginDaoImpl
创建完之后可能会报错,不要着急,这是因为没有导入Tomcat的jar包,解决方法:
右键项目名->Build Path->Configure->Build Path ->Libraries->Add External JARs->servlet-api.jar(在你的Tomcat安装目录下的lib )->Apply->OK
我们还需要一个mysql的jar包。可在官网下载,为了大家方便,贴上百度云链接
链接:https://pan.baidu.com/s/101ACHtD1QmZz-kiVD-ypuA 密码:dlqg
项目创建好了,话不多说,先上代码,再解释。
(一)工具类ConnectionUtil
public class ConnectionUtil {
public static Connection open(){
String url="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=true";
String driver = "com.mysql.jdbc.Driver";
String username = "root";
String password = "123456";
Connection connection=null;
try{
Class.forName(driver);
connection =(Connection)DriverManager.getConnection(url,username,password);
}
catch(Exception e){
e.printStackTrace( );
}
return connection;
}
public static void close(Connection conn){
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
conn=null;
}
}
}
}
(二)User类
public class User {
private int id;
private String username;
private String password;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
(三)接口LoginDao
public interface LoginDao {
public User Login(String username,String password);
}
(三)接口实现类LoginDaoImpl
public class LoginDaoImpl implements LoginDao{
@Override
public User Login(String username, String password) {
Connection conn = ConnectionUtil.open();
String sql = "select id,username,password from user where username = ? and password = ?";
try {
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, username);
pstmt.setString(2, password);
ResultSet rs = pstmt.executeQuery();
if(rs.next()){
int id = rs.getInt(1);
User user = new User();
user.setId(id);
user.setUsername(username);
user.setPassword(password);
return user;
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
ConnectionUtil.close(conn);
}
return null;
}
}
(四)LoginServlet
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class LoginServlet
*/
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public LoginServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username");
String password = request.getParameter("password");
LoginDao dao = new LoginDaoImpl();
User user = dao.Login(username, password);
if(user!=null){
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("1");
}else {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("-1");
}
}
}
到这里,我们服务器端代码已经是实现。
运行LoginServlet,然后再地址栏写入
http://localhost:8080/test/LoginServlet?username=admin&password=123
接下来我们看一下代码。
第一个工具类ConnectionUtil的open方法实现了加载驱动、建立连接,创建了connection对象。大家写的时候根据自己的数据库名和安装Mysql时的用户名和密码进行更改就OK
close方法将连接关闭。
第二个类是User类,里边有id 、username、password 等变量,通过get和set方法进行取值赋值.
第三个是接口LoginDao
第四个是接口实现类LoginDaoImpl
本篇中最重要的地方JDBC就在这个地方。JDBC简单的说就是java程序和数据库之间的桥梁,让java程序去操作数据库。其实JDBC的内容大多都是固定的,就是sql语句有变化,其他的都是固定套路。首先载入JDBC驱动程序,再得到连接对象 Connection、接下来创建 Statement对象,然后运行sql语句、处理结果,最后关闭资源释放资源。
在这里我们出入两个参数作为查询的条件
pstmt.setString(1, username);
pstmt.setString(2, password);
这里就是sql语句sql = “select id,username,password from user where username = ? and password = ?”对应的两个问号。返回结果给ResultSet对象,然后返回结果。
第五个是LoginServlet,servlet是服务器端的入口,在doGet方法中调用了 doPost方法。接收了两个参数username和password,
(在
http://localhost:8080/test/LoginServlet?username=admin&password=123
中就对应了admin和password)这里的两个参数就是从客户端人为输入的用户名和密码。在这里接收然后处理,如果验证成功就…如果验证失败就…
然后创建dao对象,调用Login方法,将两个参数传入,返回一个use对象,如果查询到了,说明用户名密码正确,那么就返回一个1,如果user为空,说明用户名或者密码错误,就返回一个-1
到这里登陆服务器端代码已经实现,希望大家批评指正,下一篇我们看一下客户端的实现。
【超越梦想】Android+Servlet搭建自己的app(3-1)——Android端登陆实现