IntelliJ IDEA + Tomcat + RestFul + Mysql打造屬於自己的伺服器

若蘭__明月發表於2018-01-03

###軟體相關版本配置

  • 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

相關文章