mvc设计模式常常用于javaweb项目中,它的主要目的是将业务的逻辑、数据访问、界面分离。
在这个demo中,我们使用jdbc来连接数据库。并且在安卓客户端访问了之后,网页将返回一个json。
你需要用到的一些工具
在写代码之前,你肯定需要一些工具,他们有软件,也有你在开发需要用到的一些jar包:
- eclipse(可以创建动态web项目)、mysql数据库、tomcat、navicat数据库操作软件
- 所需要的jar包 gson(将对象转化为json)、mysql-connector-java(jdbc中用于连接数据库)
- 项目的目录如下:
一、使用navicat创建数据表
之后在表中填入数据,以便后面的验证。
二、web工程连接数据库
创建来了一个工具类,用来连接数据库
里面加载了一个配置文件jdbc.properties,里面放了使用jdbc连接数据库的一些参数
第一行为jdbc加载的驱动(不用管) 第二行为连接的数据库的地址(图上显示的就是我连接的数据库为我本机的student) 第三行、第四行则是你数据库的用户名和密码
工具类具体代码如下:
package com.demo.util;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
public class JDBCUtil {
static String driverClass = null;
static String url = null;
static String name = null;
static String password = null;
static {
try {
// 1. 创建一个属性配置对象
Properties properties = new Properties();
// InputStream is = new FileInputStream("jdbc.properties");
// 使用类加载器,去读取src底下的资源文件。
InputStream is = JDBCUtil.class.getClassLoader().getResourceAsStream("jdbc.properties");
// 导入输入流。
properties.load(is);
// 读取属性
driverClass = properties.getProperty("driverClass");
url = properties.getProperty("url");
name = properties.getProperty("name");
password = properties.getProperty("password");
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 获取连接对象
*
* @return
*/
public static Connection getConn() {
Connection conn = null;
try {
Class.forName(driverClass);
// 静态代码块 ---> 类加载了,就执行。 java.sql.DriverManager.registerDriver(new Driver());
// DriverManager.registerDriver(new com.mysql.jdbc.Driver());
// DriverManager.getConnection("jdbc:mysql://localhost/test?user=monty&password=greatsqldb");
// 2. 建立连接 参数一: 协议 + 访问的数据库 , 参数二: 用户名 , 参数三: 密码。
conn = DriverManager.getConnection(url, name, password);
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
/**
* 释放资源
*
* @param conn
* @param st
* @param rs
*/
public static void release(Connection conn, Statement st, ResultSet rs) {
closeRs(rs);
closeSt(st);
closeConn(conn);
}
public static void release(Connection conn, Statement st) {
closeSt(st);
closeConn(conn);
}
private static void closeRs(ResultSet rs) {
try {
if (rs != null) {
rs.close();
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
rs = null;
}
}
private static void closeSt(Statement st) {
try {
if (st != null) {
st.close();
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
st = null;
}
}
private static void closeConn(Connection conn) {
try {
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
conn = null;
}
}
}
三、dao层数据操作
先定义一个接口UserDao,再写一个实现类UserDaoImpl来实现接口中的方法。
package com.demo.dao;
/*
* dao定义了对用户表的访问规则
*/
public interface UserDao {
// 客户端的登录返回一个boolean类型验证是否登录成功
boolean login(String userName, String passWord);
}
这个login方法中使用的一些对象Connection、PreparedStatement、ResultSet 都是jdbc中常用的一些对象,就不展开叙述了,书中讲的很详细。
package com.demo.dao.impl;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import com.demo.dao.UserDao;
import com.demo.util.JDBCUtil;
public class UserDaoImpl implements UserDao {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
@Override
// 返回类型为判断的结果
public boolean login(String userName, String passWord) {
// TODO Auto-generated method stub
try {
//连接数据库
conn = JDBCUtil.getConn();
//sql语句 检索stus表中username 和 password
String sql = "select * from stus where username=? and password=?";
// 创建ps对象,ps中存储了数据库中的数据
ps = conn.prepareStatement(sql);
ps.setString(1, userName);
ps.setString(2, passWord);
// 进行判断 rs为判断的结果
rs = ps.executeQuery();
return rs.next();
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCUtil.release(conn, ps, rs);
}
return false;
}
}
四、servlet容器与业务逻辑
json对象:里面封装了我们需要返回json的一些参数
规定:code=0,登录成功 code=1,登录失败
package com.demo.bean;
public class jsonbean {
public int code;
public String msg;
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
使用get请求
package com.demo.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.demo.bean.jsonbean;
import com.demo.dao.UserDao;
import com.demo.dao.impl.UserDaoImpl;
import com.google.gson.Gson;
/**
* Servlet implementation class LoginServlet
*/
public class LoginServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 提交的数据有可能有中文
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");
// 1.获取客户端提交的信息
String userName = request.getParameter("username");
String passWord = request.getParameter("password");
System.out.println("userName=" + userName + " passWord=" + passWord);
//2.实例化一个userDaoImpl来处理数据
UserDao dao = new UserDaoImpl();
boolean isSuccess = dao.login(userName, passWord);
// 3.针对dao的返回结果,做出相对应的响应,并且将数据分装进jsonbean对象中
jsonbean jb = new jsonbean();
if (isSuccess) {
// response.getWriter().write("登录成功");
jb.setCode(0);
jb.setMsg("登录成功");
} else {
// response.getWriter().write("用户名或者密码错误");
jb.setCode(1);
jb.setMsg("登录失败");
}
//4.将jsonbean对象转化为json数据 并且将响应打印出来
Gson gson = new Gson();
String json = gson.toJson(jb);
response.getWriter().println(json);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
五、将项目部署到tomcat上,并且验证是否成功
提前在数据库中插入数据
在下图中,用get请求体请求,username为qimin,password为123,与数据库匹配成功,返回一段json数据给客户端。
到目前为止,这个简单的登录功能的demo就开发完了。
接下来的工作就是开发安卓客户端,安卓客户端的工作是通过一个请求,发送对应的username和password,然后服务器就会检索这个数据,来判断用户名和密码是否正确,再返回对应的一个json。安卓客户端再根据返回的json,来进行下一步的业务逻辑。
第一次写博客,我也是个java的初学着,里面有些术语还是会很含糊不清,写的不好的地方,多多理解。