(可以忽视这段话)这篇文章开始前,首先对之前看过此博客的朋友说声抱歉,想必大家都是抱着完全学习IM后台流程,看一个系列博客的心态来的。结果这一篇在2018年年初发表后,再也没了后续。唉,确实发生了太多事了,从这篇文章后,感情和工作都是在谷底.到现在还是那么糟糕。不过好在,因为一些重要的原因,这个项目必须在一两个月内做出来,所以这段时间我会把其他的事都放下,优先搞这个项目。后续会一直持续更新博客。

一、新建项目以及Intellij的一些操作。

1.需要配置gradle
导入的时候作为Gradle项目导入即可


新建类配置自定义注释语句:
Settings–>搜索template–>File and Code Template

2.配置Tomcat,如果EditConfiguation里面没有,需要进入初始页面添加;


配置tomcat

这里Type也要注意一下,忘了标了:

把本项目的webapp路径添加进去,这个是重点


然后一步一步走就好了。
这样就不会报404了。。。但是如果添加路径还会报错!!!搞了一天,终于搞出来了,一切以底下为主!!!:




这里显示这个war文件是最重要的!

二、连接数据库

1.右侧database按钮–>datasource–>mysql,输入用户名,密码,对了,还有初次进入的时候左下角提示下载文件才可以测,这个别忘了。

三、配置Gradle

  // Gson jsoncompile 'com.google.code.gson:gson:2.8.0'// Guava java 类封装compile 'com.google.guava:guava:21.0'// Jersey 轻量级Restful接口框架compile 'org.glassfish.jersey.core:jersey-client:2.26-b03'compile 'org.glassfish.jersey.core:jersey-server:2.26-b03'compile 'org.glassfish.jersey.containers:jersey-container-servlet:2.26-b03'// 也是一个 Json 解析库compile 'org.glassfish.jersey.media:jersey-media-json-jackson:2.26-b03'// 数据库操作框架// https://mvnrepository.com/artifact/org.hibernate/hibernate-corecompile 'org.hibernate:hibernate-core:5.2.9.Final'// https://mvnrepository.com/artifact/org.hibernate/hibernate-entitymanagercompile 'org.hibernate:hibernate-entitymanager:5.2.9.Final'// https://mvnrepository.com/artifact/org.hibernate/hibernate-c3p0compile 'org.hibernate:hibernate-c3p0:5.2.9.Final'// MySQL 驱动库// https://mvnrepository.com/artifact/mysql/mysql-connector-javacompile group: 'mysql', name: 'mysql-connector-java', version: '6.0.6'testCompile group: 'junit', name: 'junit', version: '4.12'

添加完发现关键字都是灰色的说明没同步,点击右侧Gradle,展开的窗口中点击同步按钮即可。

四、连接数据库

1.在resource文件夹下新建一个文件:hibernate.cfg.xml

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory><!-- 数据库链接驱动 --><property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property><!--链接地址用户名密码 --><property name="connection.url">jdbc:mysql://127.0.0.1:3306/DB_I_T_PUSH?serverTimezone=UTC&amp;useUnicode=true&amp;characterEncoding=utf8&amp;useSSL=false</property><property name="connection.username">root</property><property name="connection.password">123456</property><!--<property name="connection.url">jdbc:mysql://qiujuer.net:6968/DB_I_T_PUSH?serverTimezone=UTC&amp;useUnicode=true&amp;characterEncoding=utf8&amp;useSSL=false</property>--><!-- JDBC 链接池大小 --><property name="connection.pool_size">5</property><!-- SQL 方言 --><property name="dialect">org.hibernate.dialect.MySQL57Dialect</property><!-- Hibernate session 上下文为线程级别 --><property name="current_session_context_class">thread</property><!-- 配置C3P0缓存链接池  --><property name="cache.provider_class">org.hibernate.c3p0.internal.C3P0ConnectionProvider</property><!--在连接池中可用数据库连接的最小数目--><property name="c3p0.min_size">6</property><!--在连接池中所有数据库连接的最大数目--><property name="c3p0.max_size">50</property><!--设定数据库连接的超时时间--><!--<property name="c3p0.time_out">1800</property>--><property name="c3p0.timeout">100</property><!--可以被缓存的PreparedStatement的最大数目--><property name="c3p0.max_statement">50</property><!-- 当连接池里面的连接用完的时候,C3P0一下获取的新的连接数 --><property name="c3p0.acquire_increment">1</property><!-- 连接对象因该多长时间被自动校验的时间段,以秒为单位--><property name="c3p0.idle_test_period">100</property> <!-- seconds --><!--最多可以创建Statements对象的个数. . 就是可以执行SQL语句的对象的个数--><property name="c3p0.max_statements">0</property><!-- SQL语句输出 --><property name="show_sql">true</property><property name="format_sql">true</property><!-- 自动更新数据库的级别 --><property name="hbm2ddl.auto">update</property><!--create:表示启动的时候先drop,再createcreate-drop: 也表示创建,只不过再系统关闭前执行一下dropupdate: 这个操作启动的时候会去检查schema是否一致,如果不一致会做scheme更新validate: 启动时验证现有schema与你配置的hibernate是否一致,如果不一致就抛出异常,并不做更新--><!--<mapping package="net.qiujuer.web.italker.push.bean.db"--><!--class="net.qiujuer.web.italker.push.bean.db.Group"/>--><!--<mapping package="net.qiujuer.web.italker.push.bean.db"--><!--class="net.qiujuer.web.italker.push.bean.db.GroupMember"/>--><!--<mapping package="net.qiujuer.web.italker.push.bean.db"--><!--class="net.qiujuer.web.italker.push.bean.db.User"/>--><!--<mapping package="net.qiujuer.web.italker.push.bean.db"--><!--class="net.qiujuer.web.italker.push.bean.db.UserFollow"/>--><!--<mapping package="net.qiujuer.web.italker.push.bean.db"--><!--class="net.qiujuer.web.italker.push.bean.db.Message"/>--><!--<mapping package="net.qiujuer.web.italker.push.bean.db"--><!--class="net.qiujuer.web.italker.push.bean.db.PushHistory"/>--><!--<mapping package="net.qiujuer.web.italker.push.bean.db"--><!--class="net.qiujuer.web.italker.push.bean.db.Apply"/>--></session-factory>
</hibernate-configuration>

上面是基本配置,每个项目基本都差不多,现在不必深究,但这个还是得学的。

五、配置servlet

在webapp下新建文件夹WEB-INF ,文件夹里放一个web.xml文件,xml里就是放置servlet配置语句:

<?xml version="1.0" encoding="UTF-8"?>
<web-app><display-name>iTalker</display-name><servlet><servlet-name>ITalkerApiServlet</servlet-name><!--容器--><servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class><init-param><param-name>jersey.config.server.provider.packages</param-name><!--映射的包名,用于搜索处理类--><param-value>net.qiujuer.web.italker.push.service</param-value></init-param><init-param><param-name>javax.ws.rs.Application</param-name><param-value>net.qiujuer.web.italker.push.Application</param-value></init-param><load-on-startup>1</load-on-startup></servlet><!--映射--><servlet-mapping><servlet-name>ITalkerApiServlet</servlet-name><!--访问路径--><url-pattern>/api/*</url-pattern></servlet-mapping>
</web-app>

在java文件夹下新建一个service包,新建一个Application类,所有映射的处理都在service包里。
这里,看着这个给出的配置,好像我们都没法修改,也不知道到底为什么这样写?不这样写难道就不行吗?反正我是有这种疑问.
所以查了查资料,发现这个web.xml里的东西,我们能修改的东西真的不多,大多都是固定的配置。而其中的奥妙,就在于Jersey的配置
Jersey实现Restful接口入门
又三点了…一点都不困。最近一个月好像都是三四点都不困,还要靠数数才能睡着.
明天继续。

六,完成第一个restful接口请求

@Path("/account")//注册路径访问,所有映射想走到本类,访问路径就为:
// 和web.xml最底下的映射路径结合即为:http://localhost:8080/api/account/...
public class AccountService {//实际路径 http://localhost:8080/api/account/login@GET@Path("/login")public String get(){return  "You get the login";}@POST@Path("/login")@Consumes(MediaType.APPLICATION_JSON)//传入json@Produces(MediaType.APPLICATION_JSON)//输出jsonpublic User post(){User user=new User();user.setName("RyeCatcher");user.setSex("男");return user;}
}

//实际路径为:http://localhost:8080/api/account/login,这里的api是servlet中xml配置的。
然后启动运行,这一步就可以验证配置成功与否:

如果想调试post请求,用谷歌的DHC插件即可。

数据库操作

接下来,就是建数据表了。稍候贴数据库表结构源码,理一下相关逻辑。


1.现在先搞一下用户注册登录和信息完善,在push包下,新建两个包,provider和util包:


先解释一下这四个类,GsonProvider用来替换Application中的Jackson解析器,因为Jackson解析器在处理布尔变量时有些问题。
LocalDateTime是Java8里新增的,该工具类主要是为了解决LocalDateTime与Json字符串相互转换的问题。
Hib是Hibernate的缩写,一个常见的封装类,TextUtil,对string进行md5,base64转换等。
2,hibernate.cfg.xml,查看一下数据库名字,在mysql中创建相同名字的数据库。

接下来打开workbench新建数据库:

表名是跟hibernate.cfg.xml中的表名保持一致,编码格式也选上图的两个。如果没有这种工具,可以在右侧的dataSource中配置数据库。

需要知道的是,我们数据库的入口在hibernate.cfg.xml文件中,我们需要在这个文件中添加映射,将我们之间建的表跟数据库一一对应。

        <mapping package="net.ryecatcher.web.italker.push.bean.db"class="net.ryecatcher.web.italker.push.bean.db.User"/><mapping package="net.ryecatcher.web.italker.push.bean.db"class="net.ryecatcher.web.italker.push.bean.db.UserFollow"/><mapping package="net.ryecatcher.web.italker.push.bean.db"class="net.ryecatcher.web.italker.push.bean.db.Group"/><mapping package="net.ryecatcher.web.italker.push.bean.db"class="net.ryecatcher.web.italker.push.bean.db.GroupMember"/><mapping package="net.ryecatcher.web.italker.push.bean.db"class="net.ryecatcher.web.italker.push.bean.db.Message"/><mapping package="net.ryecatcher.web.italker.push.bean.db"class="net.ryecatcher.web.italker.push.bean.db.PushHistory"/><mapping package="net.ryecatcher.web.italker.push.bean.db"class="net.ryecatcher.web.italker.push.bean.db.Apply"/>

这里package不是必须的,只要类名路径不错就好。
所有service包下的文件都是我们Http的入口!

下一篇文章我们讲解一下IM系统后台数据库的设计。

IM-后台搭建(一)相关推荐

  1. javaweb增删改查实例_JavaWeb图像可视化管理系统之后台搭建(二)用户管理与增删改查(内含代码)...

    上一篇文章中,我们介绍了环境配置与后台设计,对于不了解的同学,可以看这个链接 CharlesDDDD:JavaWeb图像可视化管理系统之后台搭建(一)环境配置与后台设计​zhuanlan.zhihu. ...

  2. 游戏后台搭建(基于cocoscreator+nodejs+linux-阿里云)

    后台搭建 环境 阿里云linux云服务器(需要为新端口 添加安全组 许可访问) node.js cocoscreator 需求 全服排行榜存储 用户账号 运营数据(评估游戏品质) 七日留存统计 日活统 ...

  3. 知识竞赛答题小程序的管理后台搭建教程

    知识竞赛答题小程序的管理后台搭建 知识竞赛答题小程序的管理后台搭建,基于云开发搭建的可视化的内容管理平台,可在云开发控制台扩展管理界面一键部署和升级,也可通过项目提供的脚本自动部署. 题库管理 成绩排 ...

  4. 小程序js+django+服务器后台搭建流程总结(第五周学习记录)

    学习记录 这周的工作依然是做一些服务器的调试工作,但是为了方便这周末的展示,我打算把这段时间的所有后台搭建工作和对所有服务器的操作流程做一个系统的总结和归纳,方便学习记录与交流 一.微信小程序js部分 ...

  5. 最新E4A抖音互关源码+含数据库后台/搭建可用

    正文: 最新E4A抖音互关源码+含数据库后台/搭建可用,其它的就没什么介绍了,对了,源码是属于E4A开发的,其它的自行体验吧. 程序: wwwu.lanzouw.com/iJLjw05buauh 图片 ...

  6. 基于likeadmin通用管理后台搭建—高校科研管理系统

    前言 likeadmin是一款免费开源的通用后台框架系统,可以快速开发前后业务.代码生成器.API模块.uniapp端都已具备,下面是基于likeadmin通用管理后台搭建的-高校科研管理系统 产品背 ...

  7. xy确认收货后台搭建

    xy确认收货后台搭建

  8. Parse系列之后台搭建与使用

    什么是Parse? 官网:https://docs.parseplatform.org/ Github:https://github.com/parse-community Parse是一个移动后端, ...

  9. 《全栈营销之如何制作个人博客》之二:php环境安装及个人博客后台搭建 让你的博客跑起来...

    上一节我们讲了个人博客用什么开发语言,用什么CMS系统,从这一节我们就开始真正的干货,这一节我们讨论一下PHP环境的安装,及个人博客后台的搭建,让你的博客在正常的PHP环境中运行起来,你就可以进行后台 ...

  10. 双端影视APP后台搭建及前端安装编译大概流程

    1,服务器或虚拟主机+域名,这个相当于我们的仓库,用来存放源码文件和数据库: 2,聚合网注册,注册这个聚合网后会有一个属于自己的ID号和APPkey,我们需要把源码中ID和key替换为自己的,否则打包 ...

最新文章

  1. joomla个性定制(二)
  2. jmeter web监听结果_Jmeter性能测试
  3. list在c语言中的作用,在C语言中大略实现VC++中的LISTARRAY功能方法(一)
  4. c#异常类的闰年判断
  5. fatal: unable to access ‘https://github.com/xxx/‘: Failed to connect to 127.0.0.1 port 7890: Connect
  6. HPU--1392 分隔A+B
  7. php 新浪ip接口,php利用新浪接口查询ip获取地理位置示例
  8. atitit.窗体静听esc退出本窗体java swing c# .net php
  9. 小米路由器3 变砖 ttl 救砖,刷入padavan
  10. C语言 二进制文件读写实例讲解
  11. Android多语言切换
  12. u盘启动蓝屏 索尼vaio_索尼笔记本如何设置u盘启动_索尼笔记本bios设置u盘启动教程介绍...
  13. excel如何设置单元格的下拉选项框并着色
  14. TD式创新:中国标准横空出世 回归主流的TDD LTE
  15. 11万多职场文章技巧ACCESS数据库
  16. linux文件编程 --- fflush函数
  17. 计算机型号win7,教你win7系统电脑内存条型号怎么看
  18. mysql别名引号与引用问题
  19. winrar v3.8 的注册码
  20. jQuery插件开发全解析,jQuery.extend , (function($){ , $.fn.pluginName

热门文章

  1. Python图像处理PIL各模块详细介绍
  2. 神器 ffmpeg —— 操作视频,极度舒适
  3. DC 竞赛-大数据竞赛平台
  4. Google地图定位偏移矫正
  5. CAD-Cass小结(7)——由高程点生成剖面图(含批量修改高程值)
  6. C语言--二元一次方程求解(完)
  7. 【第19周复盘】这个周六的等级测试要加油!
  8. docker安装calibre
  9. 校园导航系统----基于Qt
  10. 真的要做一辈子的程序员吗?