2021SC@SDUSC

一、项目结构

(1)在web 目录下创建META-INF目录,在目录下创建文件context.xml 地址构成

jdbc:mysql://minichat@localhost:3306/mini_chat?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8

context.xml:

<?xml version="1.0" encoding="utf-8"?>
<Context reloadable="true"><Resourcename="jdbc/minichat"type="javax.sql.DataSource"maxTotal="100"maxIdle="50"driverClassName="com.mysql.cj.jdbc.Driver"url="jdbc:mysql://minichat@localhost:3306/mini_chat?serverTimezone=GMT%2B8&amp;useUnicode=true&amp;characterEncoding=utf-8"userName="root"password="root"maxWaitMillis="5000"/>
</Context>

第(2)WEB-INF目录下创建目录lib

 2.数据库 Dao

所有的实体dao都应该继承于Dao接口

package DB.Base;import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;public interface Dao {static DataSource getDataSource(){DataSource dataSource=null;try{Context context=new InitialContext();dataSource=(DataSource)context.lookup("java:comp/env/jdbc/minichat");}catch (NamingException ne){ne.printStackTrace();}return dataSource;}default Connection getConnection() throws DaoException{DataSource dataSource=getDataSource();Connection connection=null;try{connection=dataSource.getConnection();}catch (SQLException se){se.printStackTrace();}return connection;}
}

DaoException:

package DB.Base;import java.io.Serializable;public class DaoException extends Exception implements Serializable {private static final long serialVersionUID=19192L;private String message;public DaoException(){}public DaoException(String message){this.message=message;}@Overridepublic String getMessage() {return message;}public void setMessage(String message) {this.message = message;}@Overridepublic String toString() {return "DaoException{" +"message='" + message + '\'' +'}';}
}

FriendDao和UserDao都继承dao接口

package DB.Dao;import DB.Base.Dao;
import Model.Response.FriendAddResponse;
import Model.Response.FriendResponse;import java.util.List;public interface FriendDao extends Dao {List<FriendResponse> getFriendsById(String uid);FriendAddResponse addFriend(String uid,String fid);
}
package DB.Dao;import DB.Base.Dao;
import DB.Base.DaoException;
import DB.model.User;
import Model.Response.LoginResponse;public interface UserDao extends Dao {boolean signup(String uid,String uname,String password) throws DaoException;LoginResponse login(String uid,String password);
}

FriendDaoImpl和UserDaoImpl分别实现各自的Dao接口

package DB.Impl;import DB.Base.DaoException;
import DB.Dao.FriendDao;
import Model.Response.FriendAddResponse;
import Model.Response.FriendResponse;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;public class FriendDaoImpl implements FriendDao {@Overridepublic List<FriendResponse> getFriendsById(String uid) {List<FriendResponse> friendResponses=new ArrayList<>();System.out.println(uid);try(Connection connection=getConnection()){PreparedStatement pst=connection.prepareStatement("select * from friend where uid=?");pst.setString(1,uid);ResultSet rst=pst.executeQuery();while (rst.next()){friendResponses.add(new FriendResponse(1,null,rst.getString("fid"),uid,rst.getString("f_name"),rst.getString("nick_name")));}} catch (SQLException sqlException) {sqlException.printStackTrace();} catch (DaoException e) {e.printStackTrace();}return friendResponses;}@Overridepublic FriendAddResponse addFriend(String uid, String fid) {FriendAddResponse response=new FriendAddResponse(-1,null);try(Connection connection=getConnection()){String f_name=null;String uname=null;PreparedStatement pst=connection.prepareStatement("select uname from user where uid=?");pst.setString(1,fid);ResultSet rst=pst.executeQuery();if(rst.next()){f_name=rst.getString("uname");}else {response.setMessage("id 不存在");}pst.setString(1,uid);rst=pst.executeQuery();if(rst.next()){uname=rst.getString("uname");}else {response.setMessage("id 不存在");}if(f_name!=null&&uname!=null){PreparedStatement pst2=connection.prepareStatement("insert into friend(fid,uid,f_name) VALUES (?,?,?)");pst2.setString(1,fid);pst2.setString(2,uid);pst2.setString(3,f_name);int result0=pst2.executeUpdate();if(result0>0){pst2.setString(1,uid);pst2.setString(2,fid);pst2.setString(3,uname);int result1=pst2.executeUpdate();if(result1>0){response.setCode(1);response.setMessage("add friend success");response.setId(fid);response.setName(f_name);}else {response.setMessage("已添加");}}else {response.setMessage("已添加");}}} catch (SQLException | DaoException sqlException) {sqlException.printStackTrace();}return response;}
}
package DB.Impl;import DB.Base.Dao;
import DB.Base.DaoException;
import DB.Dao.UserDao;
import Model.Response.LoginResponse;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;public class UserDaoImpl implements UserDao {@Overridepublic boolean signup(String uid, String uname, String password) throws DaoException{try(Connection connection=getConnection()){PreparedStatement pst=connection.prepareStatement("insert into user(uid,uname,password) values (?,?,?)");pst.setString(1,uid);pst.setString(2,uname);pst.setString(3,password);int result=pst.executeUpdate();return result>0;} catch (SQLException sqlException) {sqlException.printStackTrace();} catch (DaoException e) {e.printStackTrace();}return false;}@Overridepublic LoginResponse login(String uid, String password)  {System.out.println(uid+password);LoginResponse loginResponse=new LoginResponse();loginResponse.setCode(-1);try(Connection connection=getConnection()){PreparedStatement pst=connection.prepareStatement("select * from user where uid=?");pst.setString(1,uid);ResultSet rst=pst.executeQuery();while (rst.next()){if(rst.getString("password").equals(password)){loginResponse.setCode(1);loginResponse.setMessage("login ok");loginResponse.setUid(uid);loginResponse.setName(rst.getString("uname"));}else {loginResponse.setCode(-1);loginResponse.setMessage("login in password failed");}}}catch (DaoException daoException){daoException.printStackTrace();loginResponse.setMessage("login in dao failed");} catch (SQLException sqlException) {sqlException.printStackTrace();loginResponse.setMessage("login in sql failed");}return loginResponse;}
}

消息以及请求,相应的实现:

消息:message:

package Model.Base;import java.io.Serializable;public class Message implements Serializable {//@param: code 1成功 0未初始化 -1错误//@param: message 错误信息提示或其他信息private int code;private String message;public Message() {code=0;message=null;}public Message(int code, String message) {this.code = code;this.message = message;}public int getCode() {return code;}public void setCode(int code) {this.code = code;}public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}
}

各种请求:request:这里以FriendAddRequest为例:

package Model.Request;public class FriendAddRequest {String uid;String f_id;public FriendAddRequest(String uid, String f_id) {this.uid = uid;this.f_id = f_id;}public String getUid() {return uid;}public void setUid(String uid) {this.uid = uid;}public String getF_id() {return f_id;}public void setF_id(String f_id) {this.f_id = f_id;}
}

各种响应:Response这里以FriendAddResponse为例

package Model.Response;import Model.Base.Message;public class FriendAddResponse extends Message {String id;String name;public FriendAddResponse() {}public FriendAddResponse(int code, String message) {super(code, message);}public FriendAddResponse(int code, String message, String id, String name) {super(code, message);this.id = id;this.name = name;}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}

三、servelet

最后是各种servelet,以FriendAddServlet为例

package Servlet;import DB.Dao.FriendDao;
import DB.Impl.FriendDaoImpl;
import Model.Request.FriendAddRequest;
import Model.Response.FriendAddResponse;
import com.google.gson.Gson;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;@WebServlet(name = "FriendAddServlet",urlPatterns ={"/addFriend"})
public class FriendAddServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {FriendAddRequest friendAddRequest=new Gson().fromJson(request.getReader(),FriendAddRequest.class);FriendAddResponse friendAddResponse=new FriendDaoImpl().addFriend(friendAddRequest.getUid(),friendAddRequest.getF_id());String rp=new Gson().toJson(friendAddResponse);response.setContentType("txt/html;charset=utf-8");PrintWriter writer=response.getWriter();writer.print(rp);}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}
}

树莓派提升计划 Android应用用MiniChatAppApp之AppServer构建相关推荐

  1. 开发Android应用用Kotlin还是Java?

    还记得多年前有关Android与iOS孰优孰劣的辩论吗?如今,Kotlin与Java的争论,时常广泛地发生在开发人员之中.不过,由于大家往往关注的是Java所不具备的Kotlin功能,因此他们的结论可 ...

  2. 软件开发质量的双保险 — 3.应用设计验证与应用用例

    设计验证的第二层是检验应用设计的质量.应用设计的检验是对软件"好用"的保证,它解决了如何用信息化手段提升客户的工作效率. 应用设计验证重点包括:业务设计的结果在系统中的落地是否顺利 ...

  3. 【人才发展】如何建立一个成功的技能提升计划

    提升技能是一项长期投资,旨在增加知识.技能和能力,帮助员工提升职业生涯.当员工被提供并鼓励利用提升技能的机会来实现个人或职业发展时,员工指标(如员工敬业度和留任率)也会上升.问题是,即使是那些表示希望 ...

  4. Boost:将帧传输到GPU以及如何应用用OpenCL编写的naive optical flow

    Boost:将帧传输到GPU以及如何应用用OpenCL编写的naive optical flow 实现功能 C++实现代码 实现功能 Boost的compute模块,将帧传输到GPU以及如何应用用Op ...

  5. 计算机函数图象,信息技术应用用计算机绘制函数图象

    <信息技术应用用计算机绘制函数图象>由会员分享,可在线阅读,更多相关<信息技术应用用计算机绘制函数图象(15页珍藏版)>请在人人文库网上搜索. 1.柱体.锥体. 台体的体积,锥 ...

  6. http协议与服务器通信,iPhone应用用HTTP协议和服务器通信

    iPhone应用用HTTP协议和服务器通信是本文要介绍的内容,主要是来学习iphone应用中的通信协议,具体内容来看本文详解. iPhone用http协议和服务器通信有两种方式,一种是同步一种是异步的 ...

  7. iar怎么新建立项目_【IAR科研】2020年IAR国际学术科研项目——综合提升计划

    预计申请出国的你,除了标化的成绩,我想你也应该听说过,或者了解过还有一种实力叫做:学术科研. 学术科研有多重要?我们来看看欧美顶尖名校的招生建议. 不难发现,"学术求知".&quo ...

  8. android10 三星升级计划,Android 10.0(Q OS)系统升级计划Androi

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 Android 10.0(Q OS)系统升级计划 Android 10.0 系统升级计划: 系列 型号 升级计划 Galaxy S10 SM-G9730 ...

  9. 【官宣】亚马逊云科技Build On 2022年技能提升计划正式启航

    亚马逊云科技Build On 2022技能提升计划是结合教育与技术应用的云计算技术动手实验实操活动,也是全面适用于开发人员.IT技术人员.技术爱好人员和技术.业务领域决策者须掌握的基础云计算课程.Bu ...

最新文章

  1. mysql 切换数据库方案
  2. banner手动切换效果
  3. python编程小组信息程序下载_300种 Python 编程图书大集合(FTP服务器下载) (豆瓣 Python编程小组)...
  4. python基础-------python2.7教程学习【廖雪峰版】(二)
  5. 【iVX 初级工程师培训教程 10篇文拿证】03 事件及猜数字小游戏
  6. WCF发布到IIS的配置步骤
  7. SQL ALTER TABLE 语句在项目中的使用
  8. page compaction原理
  9. [JavaScript] 怎么使用JS禁止复制粘贴
  10. sPortfolio: Stratified Visual Analysis of Stock Portfolios
  11. Android连接蓝牙打印机
  12. 查看linux版本32还是64位,查看linux系统版本是32位的还是64位的
  13. 关闭windows server 2012 IE增强的安全配置
  14. oracle查看锁定任务
  15. 浙江省2022年职称评审申报流程
  16. el-checkbox多选框点击第一次不能勾选,第二次才会勾选
  17. Problem : 并列排名
  18. Windows九大常用密码
  19. php版本支持存储过程,PHP升级到4.3版本之后改变了调用存储过程的一个特性
  20. 基于单片机实现声光控灯电路 C

热门文章

  1. Azure Synapse Analytics (Azure SQL DW)性能优化指南(4)——使用结果集缓存优化性能
  2. Code Review的基本思路
  3. 计算机世界英语作文,计算机(Computers)
  4. 【Android笔记】Android 使用高德SDK获取定位
  5. 优秀的JavaScript模块是怎样炼成的
  6. Django模型中的关系:一对一、一对多与多对多
  7. [算法]递归(尾递归和非尾递归)
  8. 通俗理解极大似然估计
  9. 网课教育大火,平板逆袭,华为、联想等接连出手,小米还要苦等几时?
  10. 【Matlab学习】