본문 바로가기

🎧️ 강의듣기

[리눅스] tomcat, jdbc, maradb, vsftpd, WAR, filezilla

mysqldump -h [윈도우 ip] -u root -p sample zipcode | project .​
# root에서 master디렉토리로 이동
cd ~master

# tomcat.xml에서 포트번호 수정
vi /usr/lib/firewalld/services/tomcat.xml

<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>TOMCAT (HTTP)</short>
  <description></description>
  <port protocol="tcp" port="8080"/>
</service>

:wq

# tomcat.xml을 수정한 후 reload 해줘야 함
firewall-cmd --reload

# 압축풀기
tar -cvf [파일명.tar] [폴더명]

 

tomcat.xml은 root 계정에서 수정

 

# 톰캣 설정
cd ./apache-tomcat-9.0.48/webapps/

[master@localhost webapps]$ mkdir website1
[master@localhost webapps]$ mkdir -p website1/WEB-INF
[master@localhost webapps]$ ls website1/
WEB-INF
[master@localhost webapps]$ cd website1/
[master@localhost website1]$ code

visual code를 실행하고
website1디렉토리를 열고
ex01.jsp 파일을 생성하고
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
    out.println( "Hello JSP 1" );
    System.out.println( "Hello JSP 2" );
%>

# jdbc 드라이버를 WEB-INF/lib에 옮긴 후
# visual code에서 jdbc01.jsp 파일을 만들고 코드를 작성

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.sql.DriverManager" %>
<%@ page import="java.sql.Connection" %>
<%@ page import="java.sql.PreparedStatement" %>
<%@ page import="java.sql.ResultSet" %>
<%@ page import="java.sql.SQLException" %>

<%
    String url = "jdbc:mysql://[윈도우 IP]:3306/sample";
    String user = "root";
    String password = "123456";

    Connection conn = null;
    PreparedStatement pstmt = null;
    
    try{
        Class.forName( "org.mariadb.jdbc.Driver" );
        conn = DriverManager.getConnection ( url, user, password );

        System.out.println( "Driver loading" );
    }catch( ClassNotFoundException e){
        System.out.println( "[에러] : " + e.getMessage() );
    }catch( SQLException e){
        System.out.println( "[에러] : " + e.getMessage() );
    }finally{
        if(conn != null)conn.close();
    }
%>

# 윈도우 브라우저에서도 리눅스 ip로 접근가능

 

윈도우 브라우저에서 [리눅스 ip주소]:8080/website1/jdbc01.jsp를 입력하면

윈도우에서도 접근할 수 있음

 

# sample DB에 있는 dept테이블 내용 출력하기
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.sql.DriverManager" %>
<%@ page import="java.sql.Connection" %>
<%@ page import="java.sql.PreparedStatement" %>
<%@ page import="java.sql.ResultSet" %>
<%@ page import="java.sql.SQLException" %>

<%
    String url = "jdbc:mysql://[윈도우 IP]:3306/sample";
    String user = "root";
    String password = "123456";

    Connection conn = null;
    PreparedStatement pstmt = null;
    ResultSet rs = null;

    StringBuilder sbHtml = new StringBuilder();
    
    try{
        Class.forName( "org.mariadb.jdbc.Driver" );
        conn = DriverManager.getConnection ( url, user, password );

        System.out.println( "Driver loading" );

        String sql = "select deptno, dname, loc from dept";
        pstmt = conn.prepareStatement( sql );

        rs = pstmt.executeQuery();

        sbHtml.append("<table width='800' border='1'>");
        while( rs.next() ){
            sbHtml.append("<tr>");
                sbHtml.append("<td>" + rs.getString( "deptno" ) + "</td>");
                sbHtml.append("<td>" + rs.getString( "dname" ) + "</td>");
                sbHtml.append("<td>" + rs.getString( "loc" ) + "</td>");
            sbHtml.append("</tr>");
        }
        sbHtml.append("</table>");
    }catch( ClassNotFoundException e){
        System.out.println( "[에러] : " + e.getMessage() );
    }catch( SQLException e){
        System.out.println( "[에러] : " + e.getMessage() );
    }finally{
        if(rs != null)rs.close();
        if(pstmt != null)pstmt.close();
        if(conn != null)conn.close();
    }
%>
<%= sbHtml%>​

 

html코드를 sbHtml에 담아줬는데 sbHtml을 출력안하면 화면에 안보임

<%= sbHtml%> 꼭 써줘야 화면에 보임

 

파일 저장소 - 외부에서도 다운로드 받을 수 있음

VSFTP

사용하는 포트는 20번 21번 포트를 사용함

 

# 제일먼저 방화벽 설정
[root@localhost ~]# vi /usr/lib/firewalld/services/ftp.xml

 

root 계정에서 방화벽 설정을 위해 ftp.xml파일을 수정함

 

# ftp.xml 파일에 20번 포트를 사용한다고 추가하기

#ftp.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>FTP</short>
  <description>FTP is a protocol used for remote file transfer. If you plan to make your FTP server publicly available, enable this option. You need the vsftpd package installed for this option to be useful.</description>
  <port protocol="tcp" port="20"/>
  <port protocol="tcp" port="21"/>
  <helper name="ftp"/>
</service>

# 저장하고 나와서
root@localhost ~] firewall-cmd --zone=public --add-service=ftp --permanent
success
[root@localhost ~] firewall-cmd --reload 
success
[root@localhost ~] firewall-cmd --list-services
cockpit dhcpv6-client ftp ssh tomcat

# 설치되어있는지 확인
rpm -qa | grep vsftpd

yum list installed vsftpd
오류: 목록과 일치하는 패키지가 없습니다

yum list vsftpd
마지막 메타 데이터 만료 확인 :1:21:03. 2021년 07월 06일 (화) 오전 09시 25분 39초 이전에 확인
사용 가능한 패키지
vsftpd.x86_64        

# yum을 이용하여 vsftpd 설치
yum install vsftpd

# 설치되어있는 목록들
rpm -ql vsftpd

/etc/vsftpd : 설정파일

/usr/sbin/vsftpd : 실행파일

doc아래에 있는건 도움말

 

yum으로 설치한것은 systemctl status vsftpd로 실행상태를 확인하고

실행중이지 않으면 systemctl start vsftpd로 실행시킴

 

 

호스트: 리눅스 ip주소

로그온 유형: 계정

사용자: 리눅스 사용자

비밀번호: 리눅스 사용자 비밀번호

계정: 123456

 

* 윈도우 filezilla에서도 접속가능하다.

 

filezilla에서 보면 모든 디렉토리가 접근가능하다

 

# 이 작업은 root 계정에서 작업함

# 접근 막아주기
vi /etc/vsftpd/vsftpd.conf

# 명령모드에서 넘버라인과 검색하기
:set nu
/chroot_local

# 100번째 라인에
chroot_local_user=YES
allow_writeable_chroot=YES
위에 두줄 추가 후 저장하고 나가서

# vsftpd 재시작
systemctl stop vsftpd
systemctl start vsftpd

 

filezilla도 완전히 종료한 후 재연결해야 적용됨

 

 

mariadb.xml설정 후 설치

 

[root@localhost ~] cd /usr/lib/firewalld/services
[root@localhost services] cp mysql.xml mariadb.xml
[root@localhost services] firewall-cmd --zone=public --add-service=mariadb --permanent
success
[root@localhost services] firewall-cmd --reload 
success
[root@localhost services] yum list mariadb
마지막 메타 데이터 만료 확인 :2:22:43. 2021년 07월 06일 (화) 오전 09시 25분 39초 이전에 확인
사용 가능한 패키지
mariadb.x86_64         3:10.3.28-1.module_el8.3.0+757+d382997d         appstream

# mariadb 설치
yum install mariadb

# mariadb-server 설치
yum install mariadb-server

# mariadb 실행
systemctl start mariadb

# mysql 명령어로 mariadb 접속
mysql

 

maridb root 비밀번호 설정

mysqladmin -u root password '123456'

# 한글이 insert되지 않음

show variables like 'c%';
+----------------------------------+------------------------------+
| Variable_name                    | Value                        |
+----------------------------------+------------------------------+
| character_set_client             | utf8                         |
| character_set_connection         | utf8                         |
| character_set_database           | latin1                       |
| character_set_filesystem         | binary                       |
| character_set_results            | utf8                         |
| character_set_server             | latin1                       |
| character_set_system             | utf8                         |
| character_sets_dir               | /usr/share/mariadb/charsets/ |
| check_constraint_checks          | ON                           |
| collation_connection             | utf8_general_ci              |
| collation_database               | latin1_swedish_ci            |
| collation_server                 | latin1_swedish_ci            |
| column_compression_threshold     | 100                          |
| column_compression_zlib_level    | 6                            |
| column_compression_zlib_strategy | DEFAULT_STRATEGY             |
| column_compression_zlib_wrap     | OFF                          |
| completion_type                  | NO_CHAIN                     |
| concurrent_insert                | AUTO                         |
| connect_timeout                  | 10                           |
| core_file                        | OFF                          |
+----------------------------------+------------------------------+
# 다국어처리가 부분부분 있지만 라틴으로 되어있음

# 현재 만든 DB를 지우고 mariadb를 나가서 중지시킨다.
vi /etc/my.cnf.d/mysql-clients.cnf

# 위에 파일에서 설정을 수정한다.

# These groups are read by MariaDB command-line tools
# Use it for options that affect only one utility

[mysql]
default-character-set=utf8
[mysql_upgrade]

[mysqladmin]

[mysqlbinlog]

[mysqlcheck]

[mysqldump]
default-character-set=utf8
[mysqlimport]

[mysqlshow]

[mysqlslap]

# 파일 수정
vi /etc/my.cnf.d/mariadb-server.cnf
# [mysqld]부분에
# collation-server=utf8_general_ci
# init-connect='SET NAMES utf8'
# character-set-server=utf8
# 부분만 추가함

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mariadb/mariadb.log
pid-file=/run/mariadb/mariadb.pid

collation-server=utf8_general_ci
init-connect='SET NAMES utf8'
character-set-server=utf8

# 수정 완료했으면 저장하고 나가서 mariadb 시작
systemctl start mariadb

 

리눅스에서 윈도우 mariadb 접속하기

mysql -h [윈도우 ip] -u root -p

 

권한 알아보고 외부 접근권한 부여하기

MariaDB [(none)]> select host, user from mysql.user;
+-----------------------+------+
| host                  | user |
+-----------------------+------+
| 127.0.0.1             | root |
| ::1                   | root |
| localhost             | root |
| localhost.localdomain | root |
+-----------------------+------+

# 어디에서나 접속할 수 있는 권한주기 (리눅스에서 작업)
MariaDB [(none)]> grant all privileges on *.* to 'root'@'%' identified by '123456';

# 윈도우에서도 접근가능

 

접속한 목록 확인하기

show processlist;

 

문제

database : project

사용자 : project

암호 : project

* 원격접속 가능

-- root 접속
mysql -u root -p

-- 계정생성 및 암호설정
create user 'project' identified by '123456';

-- 접속권한 주기
grant all privileges on *.* to 'project'@'%' identified by '123456';

-- 이렇게 생성과 권한을 줄 수 있다.
grant all privileges on project.* to 'project'@'%' identified by '123456';

 

원격접속했을때 한글이 insert안되는경우가 생겨서 한글처리 부분

[root@localhost ~] systemctl stop mariadb
[root@localhost ~] vi /etc/my.cnf.d/client.cnf 

# client부분에 default-character-set=utf8 추가 후 저장하고 나가기

[client]
default-character-set=utf8
# This group is not read by mysql client library,
# If you use the same .cnf file for MySQL and MariaDB,
# use it for MariaDB-only client options

 

window

        sample

                zipcode

=> jsp 파일

linux

        project

                zipcode

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.sql.DriverManager" %>
<%@ page import="java.sql.Connection" %>
<%@ page import="java.sql.PreparedStatement" %>
<%@ page import="java.sql.ResultSet" %>
<%@ page import="java.sql.SQLException" %>

<%
    String url = "jdbc:mysql://[윈도우 ip]:3306/sample";
    String user = "root";
    String password = "123456";

    Connection conn = null;
    PreparedStatement pstmt = null;
    ResultSet rs = null;

    StringBuilder sbHtml = new StringBuilder();
    
    try{
        Class.forName( "org.mariadb.jdbc.Driver" );
        conn = DriverManager.getConnection ( url, user, password );

        System.out.println( "Driver loading" );

        String sql = "select zipcode, sido, gugun, dong, ri, bunji, seq from zipcode";
        pstmt = conn.prepareStatement( sql );

        rs = pstmt.executeQuery();

        sbHtml.append("insert into zipcode (zipcode, sido, gugun, dong, ri, bunji, seq) values");
        while( rs.next() ){
        	sbHtml.append("(\'" + rs.getString("zipcode")+"\',");
        	sbHtml.append("\'" + rs.getString("sido")+"\',");
        	sbHtml.append("\'" + rs.getString("gugun")+"\',");
        	sbHtml.append("\'" + rs.getString("dong")+"\',");
        	sbHtml.append("\'" + rs.getString("ri")+"\',");
        	sbHtml.append("\'" + rs.getString("bunji")+"\',");
        	sbHtml.append(rs.getString("seq")+"),");
        }
        System.out.println(sbHtml.substring(0, sbHtml.length()-1) );
        
    }catch( ClassNotFoundException e){
        System.out.println( "[에러] : " + e.getMessage() );
    }catch( SQLException e){
        System.out.println( "[에러] : " + e.getMessage() );
    }finally{
        if(rs != null)rs.close();
        if(pstmt != null)pstmt.close();
        if(conn != null)conn.close();
    }
    
    url = "jdbc:mysql://[리눅스 ip]:3306/project";
    user = "root";
    password = "123456";

    conn = null;
    pstmt = null;
    rs = null;
    
    try{
        Class.forName( "org.mariadb.jdbc.Driver" );
        conn = DriverManager.getConnection ( url, user, password );

        System.out.println( "Driver loading" );

        String sql = sbHtml.toString().substring(0, sbHtml.length()-1);
        pstmt = conn.prepareStatement( sql );

        rs = pstmt.executeQuery();
        
    }catch( ClassNotFoundException e){
        System.out.println( "[에러] : " + e.getMessage() );
    }catch( SQLException e){
        System.out.println( "[에러] : " + e.getMessage() );
    }finally{
        if(rs != null)rs.close();
        if(pstmt != null)pstmt.close();
        if(conn != null)conn.close();
    }
    
%>

 

mysqldump명령어로도 데이터를 가져올 수 있음

mysqldump -h [윈도우 ip] -u root -p sample > sample.sql

 

특정한 테이블만 덤프받을경우

mysqldump -h [윈도우 ip] -u root -p sample zipcode > zipcode.sql

 

테이블 데이터 넣기

mysqldump -h [윈도우 ip] -u root -p123456 sample zipcode | mysql -u project -p123456 project

JSP image

[master@localhost webapps]$ mkdir -p URLBoardModel2/WEB-INF
[master@localhost webapps]$ mkdir -p URLBoardModel2/WEB-INF/lib
[master@localhost webapps]$ mkdir -p URLBoardModel2/WEB-INF/classes

[master@localhost webapps]$ mkdir -p URLBoardModel2/META-INF

 

1. jdbc WEB-INF/lib

2. context.xml META-INF/

3. class (java X) WEB-INF/classes안에 model1 / model2 / controller

4. image URLBoardModel2/ css와 image폴더

5. jsp /WEB-INF/views넣기

 

WAR ( Web Archiver = ZIP )

    Export후 filezilla로 리눅스로 옮긴 후 톰캣을 실행하면 디렉토리가 생성되고

    context.xml 수정해야 함