jsp db connection 설정 (datasource)

라이브러리

1
2
3
4
commons-collections4-4.1.jar
commons-dbcp2-2.1.1.jar
commons-pool2.2.4.2.jar
mysql-connector-java-5.1.44-bin.jar

4개 파일 다운 후 WebContent/WEB-INF/lib에 복사

mysql connector는

프로젝트 web.xml 생성

프로젝트 우클릭 - Java EE Tools - Generate Deployment Descriptor Stub -> WebContent/WEB-INF/web.xml 생성 확인

아래 내용 추가

1
2
3
4
5
6
<!-- web.xml -->
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/mysql</res-ref-name>
<res-auth>Container</res-auth>
</resource-ref>

톰캣 서버 context.xml 설정

1
2
3
4
5
6
7
8
9
10
11
12
<!-- context.xml -->
<Resource name="jdbc/mysql"
auth="Container"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="30"
maxWait="10000"
username="username"
password="userpass"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://hostname:port/dbname"/>
<!—- 빨간글씨는 바꿔야 하는 부분 —->

dao 생성자

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.ArrayList;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class BDao {
Connection connection = null;
PreparedStatement ps = null;
ResultSet rs = null;

public BDao(){
try{
Context init = new InitialContext();
Context env = (Context)init.lookup("java:comp/env");
DataSource ds = (DataSource)env.lookup("jdbc/mysql");
connection = ds.getConnection();
System.out.println("db connection success!!");
} catch (NamingException e) {
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
// 각 method 에서 connection, ps, rs 를 close() 해주는 것을 잊지 말자

주의사항

mysql connector는 소스쪽과 서버쪽 폴더 동시에 적용시켜야한다.(복사)

  • 위와 같이 했음에도 아래와 같이 에러가 나는 경우
    • 심각: Servlet.service() for servlet [com.javalec.ex.frontcontroller.BFrontContrller] in context with path [/first_test] threw exception [Servlet execution threw an exception] with root cause
    • 위에설치한 4개의jar파일중 버전이 맞지 않아서 생기는 에러(ex. mysql-connector-java-5.1.44-bin.jar이 낮아서 생기는 에러였음)
  • 최신버전으로 다운로드 후 다시 WebContent/WEB-INF/lib에 복사
  • 아파치 톰캣 설치한 경로에도 mysql-connector jar파일을 복사해주어야 한다.

mysql 커스텀 정렬

mysql에서 특정 값들을 내 마음대로 정렬하고 싶을 때 다음과 같이 사용한다.

1
2
3
SELECT *
FROM 테이블명
ORDER BY FIELD(필드명, '값1', '값2', '값3');

라즈베리파이 nginx, php-fpm, mysql(mariadb) 설치

php 개발환경을 세팅해보겠다.

nginx 설치

1
2
$ sudo apt-get install nginx
$ sudo service nginx restart

생각보다 설치와 실행이 너무 쉬워서 깜짝 놀랬다.
http://localhost로 접속하여 확인하자.

php7 설치

설치 준비

php7에 대한 정보가 없기 때문에 이를 추가해 주는 과정이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ sudo vi /etc/apt/sources.list

# 아래 줄을 추가한다.
deb http://repozytorium.mati75.eu/raspbian jessie-backports main contrib non-free

# 키서버를 등록해준다.
$ sudo gpg --keyserver pgpkeys.mit.edu --recv key CCD91D6111A06851

gpg: directory '/root/.gnupg' created
gpg: new configuration file '/root/.gnupg/gpg.conf' created
gpg: WARNING: options in '/root/.gnupg/gpg.conf' are not yet active during this run
gpg: keyring '/root/.gnupg/secring.gpg' created
gpg: keyring '/root/.gnupg/pubring.gpg' created
gpg: "key" not a key ID: skipping
gpg: requesting key 11A06851 from hkp server pgpkeys.mit.edu
sudo gpg --armgpg: /root/.gnupg/trustdb.gpg: trustdb created
gpg: key 11A06851: public key "Mateusz Łukasik <mati75@linuxmint.pl>" imported
gpg: Total number processed: 1
gpg: imported: 1 (RSA: 1)
$ sudo gpg --armor --export CCD91D6111A06851 | sudo apt-key add -

업데이트한다.

1
$ sudo apt update -y

php7 설치 (php-fpm)

1
$ sudo apt install php7.0 php7.0-cli php7.0-common php7.0-fpm php7.0-gd php7.0-json php7.0-mcrypt php7.0-mysql php7.0-readline -y

nginx의 소켓 업데이트

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$ sudo apt-get install php7.0-fpm
$ sudo vi /etc/nginx/sites-available/default
#location ~ \.php$ {
# include snippets/fastcgi-php.conf;
#
# # With php5-cgi alone:
# fastcgi_pass 127.0.0.1:9000;
# # With php5-fpm:
# fastcgi_pass unix:/var/run/php5-fpm.sock;
#}
location ~ \.php$ {
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

# index index.html index.php index.htm 역시 추가하도록 하자

nginx 설정이 수정되었으므로 서비스 재시작을 한다.

1
$ sudo service nginx restart

php 버전을 확인해본다.
버전 정보가 출력된다면 설치가 잘 된 것이다.

1
2
3
4
5
$ php -v
PHP 7.0.19-1~bpo8+1 (cli) (built: May 12 2017 20:05:12) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
with Zend OPcache v7.0.19-1~bpo8+1, Copyright (c) 1999-2017, by Zend Technologies

mysql 설치 (mariadb)

역시 패키지부터 설치해주자.

1
$ sudo apt-get install mariadb-server

root 사용자 비밀번호를 설정하는 창이 나오면 입력하고 한 번 더 입력해준다.

그리고 3306 포트에 대한 방화벽을 열어준다.

1
2
3
$ sudo iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
$ sudo iptables -A OUTPUT -p tcp --dport 3306 -j ACCEPT
$ sudo iptables-save

따로 재시작을 해 줄 필요도, 할 수도 없지만 iptables-save 명령어로 방화벽 정책이 저장된 것이다.

root 로 접속 확인 후
‘사용자명’@‘%’ 를 mysql.user 테이블에 추가하여 테이블 권한을 적절하게 주도록 한다.