IM后台搭建(一)

一、新建项目以及Intellij的一些操作。
1.需要配置gradle
导入的时候作为Gradle项目导入即可


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

2.配置Tomcat,如果EditConfiguation里面没有,需要进入初始页面添加;
这里写图片描述
这里写图片描述
配置tomcat
这里写图片描述
这里Type也要注意一下,忘了标了:
这里写图片描述
把本项目的webapp路径添加进去,这个是重点
这里写图片描述
这里写图片描述
然后一步一步走就好了。
这样就不会报404了。。。但是如果添加路径还会报错!!!搞了一天,终于搞出来了,一切以底下为主!!!:
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里显示这个war文件是最重要的!
这里写图片描述
这里写图片描述
二、连接数据库
1.右侧database按钮–>datasource–>mysql,输入用户名,密码,对了,还有初次进入的时候左下角提示下载文件才可以测,这个别忘了。
这里写图片描述
三、配置Gradle

  // Gson json
    compile '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-core
    compile 'org.hibernate:hibernate-core:5.2.9.Final'
    // https://mvnrepository.com/artifact/org.hibernate/hibernate-entitymanager
    compile 'org.hibernate:hibernate-entitymanager:5.2.9.Final'
    // https://mvnrepository.com/artifact/org.hibernate/hibernate-c3p0
    compile 'org.hibernate:hibernate-c3p0:5.2.9.Final'

    // MySQL 驱动库
    // https://mvnrepository.com/artifact/mysql/mysql-connector-java
    compile 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,再create
        create-drop: 也表示创建,只不过再系统关闭前执行一下drop
        update: 这个操作启动的时候会去检查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包里
六,完成第一个restful接口请求

@Path("/account")//注册路径访问,所有映射想走到本类,访问路径就为:
// 和web.xml最底下的映射路径结合即为:127.0.0.1/api/account...
public class AccountService {
    //实际路径 127.0.0.1/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)//输出json
    public 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的入口!

猜你喜欢

转载自blog.csdn.net/qq_24820437/article/details/82023950
IM
今日推荐