接着上一篇基础Android客户端服务端交互,这次按计划实现登录注册功能,下一篇就要实现加好友的功能了
本篇源码链接:
http://download.csdn.net/detail/gywuhengy/9873558
上图片(实现功能代码里面写了,注释也很详细)
服务端接受打印log:
Android 返回打印的 log:
由图不难发现 真正的交互已经搭起来了,只需稍加判断即可
下面说说 实现过程
Android端与上一篇 相同 就省略了主要说说 服务端
1、首先建立数据库(小编这里用的是oracle数据库),建表里面有 id,username,pwd,friend,四列,将servlet连接数据库操作如下
public class GetetConnection {
// 建立数据库连接
public static Connection getConnection() {
Connection conn = null;
// 读取配置文件
String driver = ConfigManager.getInstance().getString(
"driver");
String url = ConfigManager.getInstance().getString(
"url");
String username = ConfigManager.getInstance().getString(
"username");
String password = ConfigManager.getInstance().getString(
"password");
// 注册驱动
try {
Class.forName(driver);
// 与数据库建立连接
try {
conn = DriverManager.getConnection(url, username, password);
} catch (SQLException e) {
System.out.println("SQLException异常");
e.printStackTrace();
return conn;
}
} catch (ClassNotFoundException e) {
System.out.println("ClassNotFoundException异常");
e.printStackTrace();
return conn;
}
return conn;
}
}
2、读取数据库账户信息
//读取配置文件(属性文件)的工具类
public class ConfigManager {
private static ConfigManager configManager;
// 读取属性文件
private static Properties properties;
private ConfigManager() {
String configManager = "database.prperties";
properties = new Properties();
InputStream in = ConfigManager.class.getClassLoader()
.getResourceAsStream(configManager);
try {
properties.load(in);
in.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static ConfigManager getInstance() {
if (configManager == null) {
configManager = new ConfigManager();
}
return configManager;
}
public String getString(String key) {
return properties.getProperty(key);
}
}
3、注册servlet
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
public LoginServlet() {
super();
}
public void destroy() {
super.destroy();
}
/**
* 处理get请求 request用于获得客户端信息 response用于向客户端返回信息
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 可以将逻辑放在doPost里面
this.doPost(request, response);
}
/**
* 逻辑处理
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 解决中文乱码
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
//逻辑处理接收数据
accentData(request,response);
}
// 数据接收操作
private void accentData(HttpServletRequest request ,HttpServletResponse response) {
// 获取客户端数据
try {
BufferedReader in = new BufferedReader(new InputStreamReader(
request.getInputStream()));
StringBuilder sb = new StringBuilder();
String line = null;
String result = "";
while ((line = in.readLine()) != null) {
sb.append(line);
}
result = sb.toString();
System.out.println("接受数据是" + result);
JSONObject jsonObject = JSONObject.fromObject(result);
String user = jsonObject.get("user").toString();
String pwd = jsonObject.get("pwd").toString();
System.out.println("解析后的账号" + user + "密码" + pwd);
// 查询数据库进行
if(user == null && pwd == null){
System.out.println("接受值是空");
return;
}
DBHandler(user,pwd,response);
} catch (IOException e) {
System.out.println("异常是+IOException");
e.printStackTrace();
}
}
// 数据库操作
private void DBHandler(String user,String pwd,HttpServletResponse response ) {
// 链接数据库 获取数据
Connection conn = GetetConnection.getConnection();
System.out.println("开始连接数据库");
// 判断是否连接数据库成功
if (conn != null) {
System.out.println("连接数据库成功");
// 获得Statement对象,执行SQL语句
Statement stmt = null;
ResultSet rs = null;
try {
// 查询语句
String sql = "select PWD from CHATUSER where USERNAME='"
+ user + "'";
System.out.println("查询语句是" + sql);
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
if (rs.next()) {
// 用户存在
String password = rs.getString(1);
if (password.equals(pwd)) {
//返回登录成功
sendData(response,"success");
} else {
// 密码错误 提示
sendData(response,"errorpwd");
}
} else {
// 用户不存在 提示
sendData(response,"errornull");
}
} catch (SQLException e) {
System.out.println("SQLException异常");
e.printStackTrace();
} finally {
// 释放资源
try {
if (rs != null) {
rs.close();// 倒序释放
}
if (stmt != null) {
stmt.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
System.out.println("SQLException异常");
e.printStackTrace();
}
}
} else {
System.out.println("连接数据库失败");
}
}
// 数据返回操作
private void sendData(HttpServletResponse response,String back) {
try {
PrintWriter out = response.getWriter();
Map params = new HashMap();
params.put("status", back);
JSONObject jsonObject = JSONObject.fromObject(params);
out.write(jsonObject.toString());
out.flush();
out.close();
} catch (Exception e) {
System.out.println("异常是+Exception");
}
}
public void init() throws ServletException {
// Put your code here
}
}
4、登录servlet
public class RegisterServlet extends HttpServlet {
public RegisterServlet() {
super();
}
public void destroy() {
super.destroy();
}
/**
* 处理get请求 request用于获得客户端信息 response用于向客户端返回信息
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 可以将逻辑放在doPost里面
this.doPost(request, response);
}
/**
* 逻辑处理
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 解决中文乱码
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
//逻辑处理接收数据
accentData(request,response);
}
// 数据接收操作
private void accentData(HttpServletRequest request ,HttpServletResponse response) {
// 获取客户端数据
try {
BufferedReader in = new BufferedReader(new InputStreamReader(
request.getInputStream()));
StringBuilder sb = new StringBuilder();
String line = null;
String result = "";
while ((line = in.readLine()) != null) {
sb.append(line);
}
result = sb.toString();
System.out.println("接受数据是" + result);
JSONObject jsonObject = JSONObject.fromObject(result);
String user = jsonObject.get("user").toString();
String pwd = jsonObject.get("pwd").toString();
System.out.println("解析后的账号" + user + "密码" + pwd);
// 查询数据库进行
if(user == null && pwd == null){
System.out.println("接受值是空");
return;
}
DBHandler(user,pwd,response);
} catch (IOException e) {
System.out.println("异常是+IOException");
e.printStackTrace();
}
}
// 数据库操作
private void DBHandler(String user,String pwd,HttpServletResponse response ) {
// 链接数据库 获取数据
Connection conn = GetetConnection.getConnection();
System.out.println("开始连接数据库");
// 判断是否连接数据库成功
if (conn != null) {
System.out.println("连接数据库成功");
// 获得Statement对象,执行SQL语句
Statement stmt = null;
ResultSet rs = null;
try {
// 查询语句
String sql = "select PWD from CHATUSER where USERNAME='"
+ user + "'";
System.out.println("查询语句是" + sql);
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
if (rs.next()) {
// 用户存在,不能重复注册
sendData(response,"repeat");
} else {
//用户不存在,进行注册操作
//注册
String sql1 = "INSERT INTO CHATUSER (USERNAME,PWD) " +
"VALUES ('"+user+"','"+pwd+"')";
System.out.println("插入语句是" + sql1);
stmt = conn.createStatement();
rs = stmt.executeQuery(sql1);
sendData(response,"success");
}
} catch (SQLException e) {
System.out.println("SQLException异常");
e.printStackTrace();
} finally {
// 释放资源
try {
if (rs != null) {
rs.close();// 倒序释放
}
if (stmt != null) {
stmt.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
System.out.println("SQLException异常");
e.printStackTrace();
}
}
} else {
System.out.println("连接数据库失败");
}
}
// 数据返回操作
private void sendData(HttpServletResponse response,String back) {
try {
PrintWriter out = response.getWriter();
Map params = new HashMap();
params.put("status", back);
JSONObject jsonObject = JSONObject.fromObject(params);
out.write(jsonObject.toString());
out.flush();
out.close();
} catch (Exception e) {
System.out.println("异常是+Exception");
}
}
public void init() throws ServletException {
// Put your code here
}
}
以上就是实现功能的主要代码,有过对小编所写感兴趣,可以继续关注小编,下一篇 将给大家带来加好友的功能,敬请期待,,,