IntelliJ IDEA + Tomcat + RestFul + Mysql打造属于自己的服务器

软件相关版本配置

  • IntelliJ IDEA 2017.1.1
  • Tomcat 8.0.41
  • Mysql-5.7.18-macos10.12-x86_64
  • Jdk 1.8.0_121
  • Hibernate

那就愉快的开始吧

第一步(new project)

1.png
2.png

第二步(配置Tomcat)

3.png
4.png
5.png
6.png
7.png

当选择第一个进行点击之后,选择finish,这个时候tomcat就算配置完成了,让我们来检验一下是否配置成功了吧,点击项目的运行按钮运行,项目部署成功之后会默认打开下面的这个网页。


8.png

我们看下为什么会打开如上的网页,因为这个地方的代码这样写的(index.jsp里面的代码)

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  $END$
  </body>
</html>

好了,到这个地方就已经完成了web项目的搭建和Tomcat的配置了,接下来就看看Mysql的连接和Hibernate的相关默认配置,毕竟我们需要写相关的代码进行后台服务器的相关逻辑呀。

第三步(配置Mysql和RestFul框架)(gradle依赖形式)

9.png
10.png
  //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'
    compile 'org.glassfish.jersey.media:jersey-media-json-jackson:2.26-b03'
    //数据库操作框架
    compile 'org.hibernate:hibernate-core:5.2.9.Final'
    compile 'org.hibernate:hibernate-entitymanager:5.2.9.Final'
    //数据库的连接池
    compile 'org.hibernate:hibernate-c3p0:5.2.9.Final'
    //mysql 驱动库
    compile group: 'mysql', name: 'mysql-connector-java', version: '6.0.6'

然后在src/main/resources目录下面创建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>
        <!-- Database connection settings 数据库连接驱动-->
        <property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://127.0.0.1:3306/CN_TEST?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=false</property>
        <property name="connection.username">root</property>
        <property name="connection.password">root</property>
        <!--本地地址-->


        <!-- JDBC connection pool (use the built-in) 连接池大小-->
        <property name="connection.pool_size">5</property>

        <!-- SQL dialect -->
        <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>

        <!-- Enable Hibernate's automatic session context management Hibernate上下文线程池级别-->
        <property name="current_session_context_class">thread</property>

        <!-- Disable the second-level cache  -->
        <property name="cache.provider_class">org.hibernate.c3p0.internal.C3P0ConnectionProvider</property>
        <property name="c3p0.min_size">10</property> <!--在连接池中可用数据库连接的最小数目-->
        <property name="c3p0.max_size">30</property> <!--在连接池中所有数据库连接的最大数目-->
        <property name="c3p0.time_out">2000</property> <!--设定数据库连接的超时时间-->
        <property name="c3p0.max_statement">50</property> <!--可以被缓存的PreparedStatement的最大数目-->
        <!-- configuration pool -->
        <property name="c3p0.acquire_increment">1</property>
        <property name="c3p0.idle_test_period">100</property>
        <property name="c3p0.max_statements">0</property>
        <property name="c3p0.timeout">100</property>

        <property name="show_sql">true</property>
        <property name="format_sql">true</property>


        <!--其实这个hibernate.hbm2ddl.auto参数的作用主要用于:自动创建|更新|验证数据库表结构。如果不是此方面的需求建议set value="none"。-->
        <!--create:-->
        <!--每次加载hibernate时都会删除上一次的生成的表,然后根据你的model类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失的一个重要原因。-->
        <!--create-drop :-->
        <!--每次加载hibernate时根据model类生成表,但是sessionFactory一关闭,表就自动删除。-->
        <!--update:-->
        <!--最常用的属性,第一次加载hibernate时根据model类会自动建立起表的结构(前提是先建立好数据库),以后加载hibernate时根据 model类自动更新表结构,即使表结构改变了但表中的行仍然存在不会删除以前的行。要注意的是当部署到服务器后,表结构是不会被马上建立起来的,是要等 应用第一次运行起来后才会。-->
        <!--validate :-->
        <!--每次加载hibernate时,验证创建数据库表结构,只会和数据库中的表进行比较,不会创建新表,但是会插入新值。-->
        
        <property name="hbm2ddl.auto">update</property>

     

    </session-factory>
</hibernate-configuration>

然后在src/main/webapp目录下面创建WEB-INF/web.xml填入下面的相关配置

<?xml version="1.0" encoding="UTF-8"?>

<web-app>

    <!--定义项目的名称.-->
    <display-name>CNStudy</display-name>

    <servlet>
        <!--定义Servlet的名称-->
        <servlet-name>CNApiServlet</servlet-name>
        <!--容器   -Servlet的类-->-->
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
        <init-param>
            <!--映射的包名 用于搜索处理-->
            <param-name>jersey.config.server.provider.packages</param-name>
            <param-value>com.cn.ruolan.service</param-value>   <!--这个要创建对应的包 里面是相关的接口逻辑处理-->
        </init-param>
        <init-param>
            <param-name>javax.ws.rs.Application</param-name>
            <param-value>com.cn.ruolan.Application</param-value>  <!--类似安卓工程里面的全局application-->
        </init-param>

        <!--启动的时候是否加载  true-->
        <load-on-startup>1</load-on-startup>
    </servlet>

    <!--映射-->
    <servlet-mapping>
        <servlet-name>CNApiServlet</servlet-name>
        <!--访问路径  定义Servlet所对应的URL   也就是说其他接口要被访问的时候  要加上/api/  这个-->
        <url-pattern>/api/*</url-pattern>
    </servlet-mapping>

    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>


</web-app>

好了这个时候基本上就配置完毕了,让我们来检验一下我们部署的是否正确,接下来会分别写一个GET请求和POST请求代码如下


//加上下面的这个Path   那么访问地址就是//127.0.0.1/api/account    api就是web.xml里面的映射的那个api
@Path("/account")
public class AccountService {


    @Path("/login")  //请求地址127.0.0.1/api/account/login
    @GET   //get请求  这个地方也可以加入地址path
    public String get() {

        return "登录成功";
    }


    @Path("/login")   //也可以这样  只不过请求是post请求  模拟一下
    @POST
    public User post() {
        User user = new User();
        user.setPhone("12123452113");
        user.setUsername("若兰明月");
        return user;
    }
}

User.class类

public class User {

    private String username;
    private String phone;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }
}

11.png

这个时候我们运行一下项目看下请求吧(点击运行按钮,如果什么都没改的话界面出现的仍然是“$END$”),项目运行成功之后我们使用postman来请求一下地址“http://localhost:8080/api/account/login

8.png
GET请求模拟
get.png
POST请求模拟
post.png

好了,到这里就已经部署成功了,在接下来就是我们的实战了,实战应该会写一个朋友圈的功能,虽然朋友圈的功能我已经利用Bmob实现了,但是总感觉有些瑕疵,哈哈,有空就自己撸一个后台自己写吧。加油

推荐阅读

使用 Jersey 和 Apache Tomcat 构建 RESTful Web 服务(里面有关于相关软件的下载链接)

Maven和Gradle对比

hibernate.hbm2ddl.auto配置详解

Custom ResourceConfig 自定义资源配置

代码传送门

https://github.com/wuyinlei/ServerTest
https://github.com/wuyinlei/ServerTest
https://github.com/wuyinlei/ServerTest

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,265评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,078评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,852评论 0 347
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,408评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,445评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,772评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,921评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,688评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,130评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,467评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,617评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,276评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,882评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,740评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,967评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,315评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,486评论 2 348

推荐阅读更多精彩内容

  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,773评论 6 342
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,598评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,629评论 18 139
  • 一. Java基础部分.................................................
    wy_sure阅读 3,805评论 0 11
  • 托纳多雷导演的时光三部曲——《西西里的美丽传说》、《天堂电影院》、《海上钢琴师》,已看三分之二,想简单谈谈《西西里...
    倔强的独语者阅读 420评论 0 1