Java後端開發,從0開始,IntelliJ IDEA+Tomcat+MySQL+雲服務器部署

最近開始接觸後端開發,原本在Python跟Java之間徘徊,之所以不選擇其他語言,主要是這兩個語言都有點基礎,尤其是Java用了幾年,用起來個跟順手些,雖然Java也一年多沒用了,不過接觸幾天之後,感覺就又都回來了。

這篇文章做科普是一個目的,當然最重要的,是爲自己做個存檔,因爲現在所有的環境搭建,日後自己都會再搭建一次(電腦會換,雲服務器也只買了一年),其中踩了不少坑,所以做個記錄,方便他人更方便自己!

IntelliJ IDEA環境搭建

爲什麼會選擇IntelliJ  IDEA,因爲好用!

前幾年Java開發基本用的都是Eclipse(大學學的時候用的就是Eclipse),後面做android開發又用了as,體驗就是AS比eclipse好用太多(當然也不排除我喜新厭舊的風格~),這次用的idea也是同樣好用,就跟他的名字一樣,智能!

首先配置Java環境,可以終端輸入java --version查看java版本

如果java下載配置,可以參考這篇文章

https://www.jianshu.com/p/fe6b68295479

再下載idea

https://www.jetbrains.com/idea/download/#section=mac

下載之後安裝,完成

Tomcat跟MySQL配置

下面分兩部分分別來說下怎麼配置tomcat跟mysql,本地跟雲服務器

本地配置

tomcat安裝可以參考這篇文章,很簡單,沒什麼能遇到的坑

https://www.jianshu.com/p/db08d23049ce

mysql安裝可以參考下面文章,在配合可視化工具使用時候使用有一個坑,後面會說

https://www.jianshu.com/p/07a9826898c0

安裝完成之後,配上可視化工具使用將會方便很多,尤其在早期調試,增刪改查數據時候,也會一目瞭然

在這邊推薦一個工具Navicat Premium,下面是我當初的下載地方

百度雲:https://pan.baidu.com/s/1bcJVyIvFneiEoMZPU-oIbA#list/path=/密碼: qps3

安裝打開之後,點擊左上角的Connection,輸入本地配置,如下

鏈接之後,可能會遇到這個問題

2059 - Authentication plugin ‘caching_sha2_password’ cannot be loaded: dlopen(../Frameworks/caching_sha2_password.so, 2): image not found

後來查了下,是最新版本的mysql不支持root直接登錄,需要額外設置下,如下

解決辦法:

1:命令行鍵入數據庫:

mysql -uroot -p

2:鍵入密碼後,執行:

ALTER USER root@localhost IDENTIFIED WITH mysql_native_password BY '密碼';

密碼更改爲自己數據庫的密碼;

然後就可以自己登錄配置了,順便說下,Navicat Premium還可以登錄遠程的mysql,後面的雲服務器配置好了之後也可以用它來登錄,如下

 

雲服務器配置

接下來說怎麼配置雲服務器的tomcat跟mysql

首先,需要介紹一個工具:Yummy FTP

這軟件可以幫你把本地的文件上傳到雲服務器,雖然雲服務器裏面也可以下,不過本地下網速更快,畢竟雲服務器寬帶高的費用也高。

首先,也是要配置java環境,其中jdk我選的是rpm安裝包,gzip安裝包一直下不下來,停留在99.9%。

https://www.cnblogs.com/yjhkhnuje/p/9975307.html

tomcat安裝可以參考

https://www.jianshu.com/p/6a9fa018b506

mysql安裝可以參考

https://www.cnblogs.com/dadadechengzi/p/6723686.html?tdsourcetag=s_pcqq_aiomsg

mysql的安裝我饒了很多彎,網上的幾個火的教程都有點問題。這篇我照着做下來沒啥問題,所以推薦!

記得要在雲服務器防火牆打開8080(tomcat)跟3306(mysql)端口,然後用瀏覽器測試下tomcat鏈接情況跟用Navicat Premium測試下mysql遠程登錄看下就差不多了。

IDEA跟Tomcat,Mysql配合運行簡單的服務端接口

下面來說本地環境怎麼配合運行簡單的接口

下面會寫一個簡單的例子,測試一下數據庫增刪改查,模擬用戶註冊,登錄,修改用戶信息等功能。

1,首先新建一個web工程,如下

2,在web的WEB-INF的目錄下創建classes和lib目錄

3,將classes目錄作爲輸出目錄,將lib作爲Dependencies的目錄,如下圖

4,導入數據鏈接庫,這裏用的是c3p0和dbutils進行數據庫鏈接

下載地址:https://pan.baidu.com/s/184HFVJCcNisitRFEya4ngw 提取碼: 6tpe 

5,在src根目錄下創建c3p0-config.xml文件,進行數據庫配置

<c3p0-config>
        <!-- 默認配置,c3p0框架默認加載這段默認配置 -->
        <default-config>
            <!-- 配置JDBC 四個基本屬性 -->
            <property name="driverClass">com.mysql.jdbc.Driver</property>
            <property name="jdbcUrl">jdbc:mysql://localhost:3306/fistTestDatabase</property>
            <property name="user">root</property>
            <property name="password">test123</property>
        </default-config> <!-- This app is massive! -->
</c3p0-config>

目錄結構如下:

6,在src目錄下創建servlet目錄並創建UserLogin繼承HttpServlet,測試代碼如下

import model.UserBean;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import utils.JDBCUtils;
import utils.UserDBUtils;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;

public class UserLogin extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        super.doGet(req, resp);
        String account = req.getParameter("account");
        String password = req.getParameter("password");
        System.out.println("account:" + account + "\npassword:" + password); // 打印出來看一看
        String result = "數據庫讀取異常!";
        if (account.isEmpty()){
            result = "用戶名不能爲空!";
        }else if (password.isEmpty()){
            result = "密碼不能爲空!";
        }else{
            QueryRunner runner = new QueryRunner(JDBCUtils.getDataSource());
            try {
                UserBean userBean = UserDBUtils.userLogin(runner,account,new BeanHandler<UserBean>(UserBean.class));
                System.out.println(userBean);
                if (userBean == null) {
                    result = "用戶不存在";
                }else{
                    if (account.equals(userBean.getUserName()) && password.equals(userBean.getUserPwd())){
                        result = account+"登錄成功!";
                    }else {
                        result = "密碼錯誤!";
                    }
                }

            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        resp.setContentType("text/html;charset=utf-8"); // 設置響應報文的編碼格式
        PrintWriter pw = resp.getWriter(); // 獲取 response 的輸出流
        pw.println(result); // 通過輸出流把業務邏輯的結果輸出
        pw.flush();
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        super.doPost(req, resp);
        doGet(req,resp);
    }
}

 

7,編輯web/WEB-INF/web.xml文件,將UserLogin進行註冊 

<servlet>
    <servlet-name>userLogin</servlet-name>
    <servlet-class>servlet.UserLogin</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>userLogin</servlet-name>
    <url-pattern>/userLogin</url-pattern>
</servlet-mapping>

8,打開Navicat Premium,建立一個表,寫入一條用戶登錄數據

9,一條可以登錄的請求就這樣誕生了,用postman或者瀏覽器,直接請求,如下

http://localhost:8080/testServlet_2/userLogin?account=pppp&password=1233&phoneNum=1580523134

請求結果如下

截圖上方是請求,下方是日誌

測試完整代碼已經上傳到github:https://github.com/wocalage/ServletDemo

部署項目到雲服務器上

首先我們把項目打包成war格式

1,如下配置好artifacts,要確保庫都被引用到裏面了,如下

點擊OK

2,編譯成artifacts,如下圖

選擇build artifacts

3,編譯完成後,有個war文件,在out文件夾中,如下圖

這個war文件就是打包後的可部署的文件

通過Yummy FTP將war包上傳到雲服務器上,放到Tomcat目錄webapps中,重啓tomcat就行了!

 

可能遇到的問題:

1,怎麼看日誌信息

啓動tomcat之後,直接ip:8080無法訪問,請求也請求不了,這時候大概率是無頭緒的,如果在本地,有日誌輸出可以調試查看原因,如果在雲服務器怎麼辦呢?

也是有辦法的,進入到tomcat的log目錄,如下

輸入命令

 tail -f catalina.out

就能查看實時日誌信息了!

2,重啓或者關閉tomcat遇到錯誤怎麼辦?

錯誤信息我忘記截圖,內容大概是

在這裏插入圖片描述

這個問題主要的原因是內存不足,具體解決辦法是進入到tomcat的bin目錄,打開catalina.sh文件

在最上面加上下面這行

JAVA_OPTS="-Xms512m -Xmx1024m -Xss2048K -XX:PermSize=256m -XX:MaxPermSize=512m"

如下:

 

3,jdk跟tomcat版本問題

在我接入過程中,因爲jdk的版本問題,也遇到了一點麻煩,具體表現爲

本機jdk版本是11,雲服務器上一開始安裝的是jdk8,遇到了雲服務器無法運行本地編譯出來war包的問題。

後來將雲服務器上改爲了12,又遇到一個沒生效的問題,糾結了很久,最後發現還是之前安裝8殘留的jre路徑不對,導致tomcat還是使用之前的jre來運行,但是由於之前的jre沒有了,所以用了缺省的

順便說下,jdk11以上就沒有jre的文件夾了,在tomcat裏面設置jdk文件夾就行。

4,‘java.net.UnknownHostException:主機名: 主機名: 未知的名稱或服務’問題

在看tomcat日誌的時候,發現一個問題,具體如下

首先,看下hostname,再ping下hostname,如下

可知,是由於無法解析hostname導致的。

編輯下/etc/hosts文件

加入ip hostname就行

如:

10.2.100.5 vm10-0-0-9

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章