php의 함수는 fucntion 키워드를 이용해서 가능하다. (Python의 def처럼 말이다.)

function 함수이름(매개변수1, 매개변수2,...) { 함수가 호출 되었을 때 실행될 코드; }

php는 함수 오버로딩 기능을 지원하지 않으며, 대소문자를 구분하지 않는다고 한다.(ex> sum() == SUM() )

함수 예제)

function sum($x, $y) // 함수의 이름은 sum()이며, 변수 x, y를 매개변수로 가지는 함수를 정의함. { return $x + $y; // 매개변수 x, y를 더한 값을 반환함. } echo sum(1, 2); // sum() 함수에 숫자 1와 2을 인수로 전달하여 호출함.

함수 약변환 타입 설정 예제)

function sum($x, $y) : float // 반환값의 타입을 float 타입으로 설정함. { return $x + $y; } ... var_dump(sum(3 + 4)); // float

함수 강변환 타입 설정 예제)

declare(strict_types = 1); // strict 모드로 설정함. function sum($x, $y) : float // 반환값의 타입을 float 타입으로 설정함. { return $x + $y; } ...var_dump(sum(3 + 4)); // 오류가 발생함.var_dump(sum(3 + 4.5)); // float

'PHP' 카테고리의 다른 글

php 배열  (0) 2019.09.12
php 클래스  (0) 2019.09.12
php 변수, 상수, 타입  (0) 2019.09.12
php 문법과 기초  (0) 2019.09.12
php란?  (0) 2019.09.12

· php 변수 선언

$ 기호를 사용하여 변수 선언함. 타입 명시 X

$Variable = 0; echo gettype($Variable); echo "$Variable<br>"; //정수값 대입 #integer : 0 $Variable = 0.0; echo gettype($Variable); echo "$Variable<br>"; //실수값 대입 #double : 0.0 $Variable = "ComputerScience"; echo gettype($Variable); echo "$Variable<br>"; //문자열 대입 #string : ComputerScience";

· 변수 생성 규칙

공백, $this 사용 X

대소문자 구분함

· 상수(constant)

· define() 함수

# define(상수이름, 상숫값, 대소문자구분여부) define(PHPproject, "PHP 프로젝트를 시작합니다.") //--> 대소문자구분여부 말 없으시 default = True echo PHPproject; //--> PHP프로젝트를 시작합니다. echo phpproject; //--> phpproject
define(PHPproject, "PHP 프로젝트를 시작합니다.", false) echo PHPproject; //--> PHP 프로젝트를 시작합니다. echo phpproject; //--> PHP 프로젝트를 시작합니다.

해당 상수가 선언되기 이전의 스크립트 영역에서는 해당 상수를 참조할 수 없다.

· 마법 상수(magic constants)

echo를 사용하여 볼 수 있다.

__LINE__

파일의 현재 줄 번호를 반환함.

__FILE__

파일의 전체 경로와 이름을 반환함.

inclede 내부에서 사용할 경우 include된 파일명을 반환함.

__DIR__

파일의 디렉터리를 반환함.

포함한 파일 안에서 사용할 경우 포함된 파일의 디렉터리를 반환함.

dirname(__FILE__)과 같은 결과를 반환함.

__FUNCTION__

함수의 이름을 반환함.

__CLASS__

클래스의 이름을 반환함. 클래스 이름은 대소문자를 구분함.

__TRAIT__

트레이트(trait)의 이름을 반환함.

__METHOD__

클래스의 메소드 이름을 반환함.

__NAMESPACE__

현재 네임스페이스의 이름을 반환함.

· 타입

1. 불리언(boolean)

- 불리언 : false

- 정수 : 0

- 실수 : 0.0

- 빈 문자열과 문자열 "0"

- 빈 배열

- NULL

이 외의 값들은 모두 True

2. 정수(integer)

- PHP_INT_SEIZE // 정수 타입의 크기를 나타낸다.

- PHP_INT_MAX // 정수 타입이 표현할 수 있는 가장 큰수를 가리킴. 변수에 정수의 최대 범위를 넘는 값이 대입되면, 그 변수는 자동으로 실수형으로 인식 된다.

3. 실수(float)

- e E 대입 가능 // ex) $float_1 = 1.23e-4;

4. 문자열(string)

5. 배열(array)

- 한 쌍의 키, 값으로 이루어진 맵으로 구성되는 순서가 있는 집합을 의미

- 불리언은 true는 1로, false는 0으로 자동 타입 변환됩니다.

- 유효한 숫자로만 이루어진 문자열은 정수나 실수로 자동 타입 변환됩니다.

- 실수는 소수 부분이 제거되고, 정수로 자동 타입 변환됩니다.

- NULL은 빈 문자열("")로 자동 타입 변환됩니다.

- 배열과 객체는 배열의 키값으로 사용할 수 없습니다.

$arr = array( 1 => "첫 번째 값", // PHP의 배열에서 키값의 1과 "1"은 같은 값을 나타냄. "1" => "두 번째 값", // 같은 키값을 사용하여 두 번 선언했기 때문에 나중에 선언된 "두 번째 값"만 남게됨. 10 => "세 번째 값", -10 => "네 번째 값" ); var_dump($arr); echo $arr[1]; // 두 번째 값 echo $arr["1"]; // 두 번째 값 echo $arr[10]; // 세 번째 값 echo $arr[-10]; // 네 번째 값

6. 객체(object)

- 객체는 클래스의 인스턴스를 저장하기 위한 타입. 프로퍼티와 메소드를 포함할 수 있다.

class Lecture { function Lecture() { $this->lec_01 = "PHP"; $this->lec_02 = "MySQL"; } } $var = new Lecture; // 객체 생성 echo $var->lec_01; // 객체의 속성 접근 echo "<br>"; echo $var->lec_02;

7. 리소스(resource)

- PHP 외부에 존재하는 외부 자원을 의미. 데이터베이스 함수 등에서 데이터베이스 연결 등을 반환할 때 사용.

8. NULL

- NULL은 오직 한 가지 값(NULL 상수) 만을 가질 수 있는 특별한 타입.

$var; var_dump($var); //NULL

· 강제 타입 변환

$var = 10; var_dump($var); //int(10) $var2 = (boolean)$var; var_dump($var2); //bool(true)

· 가변 변수

$PHP = "HTML"; $HTML = "CSS"; $CSS = "JavaScript"; $JavaScript = "Ajax"; $Ajax = "PHP"; echo $PHP; // HTML echo $$PHP; // $HTML -> CSS echo $$$PHP; // $$HTML -> $CSS -> JavaScript echo $$$$PHP; // $$$HTML -> $$CSS -> $JavaScript -> Ajax echo $$$$$PHP; // $$$$HTML -> $$$CSS -> $$JavaScript -> $Ajax -> PHP echo $$$$$$PHP; // $$$$$HTML -> $$$$CSS -> $$$JavaScript -> $$Ajax -> $PHP -> HTML echo $$$$$$$PHP; // $$$$$$HTML -> $$$$$CSS -> $$$$JavaScript -> $$$Ajax -> $$PHP -> $HTML -> CSS ...

'PHP' 카테고리의 다른 글

php 배열  (0) 2019.09.12
php 클래스  (0) 2019.09.12
php 함수  (0) 2019.09.12
php 문법과 기초  (0) 2019.09.12
php란?  (0) 2019.09.12

이 글은 이 곳( http://tcpschool.com/php/php_intro_syntax ) 참조 하였다.

· php의 코드 영역을 설정하는 방법

1. PHP 권장 스타일 : <?php ... ?>

2. HTML 스크립트 스타일 : <script language = "php"> ... </script>

3. SGML 스타일 : <? ... ?>

4. ASP 스타일 : <% ... %>

PHP 권장 스타일과 HTML 스크립트 스타일은 그 어떤 상황에서도 정확히 인식될 것입니다.

하지만 SGML 스타일과 ASP 스타일은 php.ini 설정 파일의 특정 태그를 활성화했을 경우에만 정확히 인식될 것입니다.

따라서 서버별 이식성 문제 등을 피하기 위해서라도 PHP 권장 스타일을 사용하는 것이 좋습니다.

· php 명령문 또한 c언어 처럼 세미콜론(;) 으로 끝난다.

· php 주석

//

/* */

#

· ehco() 함수

ehco() 함수 c언어의 printf() 함수나 c++의 cout 객체와 같이 html 스트림에 문자열 출력

*ehco() 함수는 실제 함수가 아니므로, 인수를 전달할 때 괄호(())를 사용해도 되고 생략할 수도 있다.

** 두 개 이상의 인수를 전달할 때는 반드시 괄호를 사용하면 안된다.

· php는 키워드, 클래스, 함수, 사용자 함수 이름의 대소문자를 구분하지 않는다.

'PHP' 카테고리의 다른 글

php 배열  (0) 2019.09.12
php 클래스  (0) 2019.09.12
php 함수  (0) 2019.09.12
php 변수, 상수, 타입  (0) 2019.09.12
php란?  (0) 2019.09.12

PHP는 서버 측에서 실행되는 프로그래밍 언어로 HTML을 프로그래밍적으로 생성해주고, 데이터베이스와 상호작용 하면서 데이터를 저장하고, 표현합니다. PHP는 웹을 위해서 만들어졌고, 지금도 웹을 위해서 발전하고 있는 웹을 위한 언어입니다. 웹프로그래밍을 위한 높은 생산성을 제공하는 언어입니다. 특히 서버에 직접 설치해서 운영할 수 있는 설치형 웹에플리케이션(제로보드,텍스트큐브,워드프래스,PHPBB등)의 과반이 PHP로 만들어졌습니다. 따라서 PHP를 배워두시면 이러한 솔루션들에 대한 운영, 문제해결 능력이 향상됩니다. 무엇보다 쉽습니다.

https://opentutorials.org/index.php/course/62

php에대한 개요를 설명해놓은 글이다.

클라이언트 사이드와 서버 사이드

웹 시스템에서의 처리는 클라이언트와 서버 중 어느 쪽에서 수행되는 작업인가에 따라 다음과 같이 구분할 수 있습니다.

1. 클라이언트 사이드(client-side)

2. 서버 사이드(server-side)

클라이언트 사이드(client-side)란 클라이언트 측에서 수행하는 처리를 의미합니다.

웹 시스템에서 브라우저는 서버에서 수신한 HTML 문서를 해석하여 여러분의 화면에 표시해 줍니다.

이러한 클라이언트 사이드에서 자주 사용하는 스크립트 언어에는 자바스크립트(JavaScript)가 있습니다.

서버 사이드(server-side)란 서버 측에서 수행하는 처리를 의미합니다.

브라우저에서 요청한 HTML 문서에 서버 사이드 스크립트 언어의 코드가 포함되어 있으면, 서버는 이 부분을 자신이 처리하고 그 결과를 브라우저에 보내 줍니다.

이러한 서버 사이드에서 자주 사용하는 스크립트 언어가 바로 PHP입니다.

PHP(PHP: Hypertext Preprocessor)

PHP는 C언어를 기반으로 만들어진 서버 측에서 실행되는 서버 사이드 스크립트 언어입니다.

http://tcpschool.com/php/intro

'PHP' 카테고리의 다른 글

php 배열  (0) 2019.09.12
php 클래스  (0) 2019.09.12
php 함수  (0) 2019.09.12
php 변수, 상수, 타입  (0) 2019.09.12
php 문법과 기초  (0) 2019.09.12

커넥션풀이란?

데이터베이스와 연결된 커넥션을 미리 만들어서 풀(pool) 속에 저장해 두고 있다가 필요할 때 커넥션을 풀에서 쓰고 다시 풀에 반환하는 기법을 말한다.

웹 프로그램에서는 데이터베이스의 환경설정과 연결 관리 등을 따로 XML파일이나 속성 파일을 사용해서 관리하고, 이렇게 설정된 정보를 이름을 사용하여 획득하는 방법을 사용한다.

- 웹 컨테이너가 실행되면서 커넥션(connection) 객체를 미리 풀(pool)에 생성해 둔다.

- DB와 연결된 커넥션(connection)을 미리 생성해서 풀(pool) 속에 저장해 두고 있다가 필요할 때에 가져다 쓰고 반환한다.

- 미리 생성해두기 때문에 데이터베이스에 부하를 줄이고 유동적으로 연결을 관리 할 수 있다.

출처: https://devbox.tistory.com/entry/JSP-커넥션-풀-1 [장인개발자를 꿈꾸는 :: 기록하는 공간]

클라이언트에서 다수의 요청이 발생할 경우 데이터베이스에 부하가 발생하게 된다.

이러한 문제를 해결 하기 위해서 커넥션 풀(DataBase Connection Pool)기법을 이용 한다.

IntelliJ 에서 커넥션풀을 연결해볼려고 한다.

tomcat-dbcp.jar 파일은 우리가 받은 tomcat 폴더안의 lib에 있다. (원래는 3개로 나뉘어져 있었다고 하는데 tomcat6.0 이상 부터 저렇게 하나로 통합 됬다고 한다.)

이 jar파일을 앞에도 했듯이 WEB-INF 폴더 안의 lib 폴더에 넣어주자.

이클립스에서는 [Servers] - [Tomcat v6.0 Server at localhost-config] 에 있는 context.xml 파일을 연다.

IntelliJ에서는

1. Project Structure -> Module -> Web -> Add Application Server specific descriptor... -> [클릭] -> Tomcat Server -> [선택]

2. context.xml 이 생성됩니다.

3. <Resource />로 JNDI를 설정하시면 각 개인별 설정이 가능합니다.

물론 META-INF/context.xml 파일은 git, svn에서 제외 시키셔야 각 개인별 사용이 가능합니다.

출처: okky

Ctrl + Alt + Shift + S 를 누른 후, 왼쪽 텝에서 Module을 클릭 후 오른쪽에 Web폴더를 선택하여 주고, 화면 중앙에 Add Application Server specific descriptor... 를 선택하면 뜨는 창에서 첫번째 선택창에 Tomcat Server를 선택하여주면 생성 된다.

Context.xml 은 이렇게 수정하여준다.

<Context> <Resource name="데이터베이스 이름" auth="Container" driverClassName="oracle.jdbc.driver.OracleDriver" type="javax.sql.DataSource" url="jdbc:oracle:thin:@ip주소:포트번호:전역 데이터베이스 이름" username="데이터베이스 아이디" password="데이터베이스 비밀번호" maxActive="20" maxIdle="10" maxWait="5000" /> </Context>

이 후 JNDI 를 설정하여 준다.

WEB-INF 의 web.xml에 아래와 같이 <resouce-ref> 태그를 넣어준다.

<resource-ref> <description>Connection</description> <res-ref-name>자신의 데이터베이스 이름</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref>

이 후 java나 jsp에서 커넥션풀과 JNDI를 통하여 DB와 연결된 것을 확인 할 수 있다. 반드시 DB 이름은 web.xml의 <res-ref-name>과 같아야 한다.

import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import javax.sql.DataSource; import java.sql.Connection; import java.sql.SQLException; public class OracleDBConnector { public static Connection getConnection() throws SQLException, NamingException, ClassNotFoundException { Context initCtx = new InitialContext(); Context envCtx = (Context) initCtx.lookup("java:comp/env"); DataSource ds = (DataSource) envCtx.lookup("ORCL"); //반드시 DB 이름은 web.xml의 <res-ref-name>과 같아야 한다. Connection con = ds.getConnection(); return con; } }

test.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ page import="java.sql.Connection" %> <%@ page import="DataAccess.OracleDBConnector" %> <%@ page import="java.sql.PreparedStatement" %> <%@ page import="java.sql.ResultSet" %> <html> <head> <title>ZeroLab</title> </head> <body> <p>아래는 DB 내용</p> <table border="3" bordercolor="skyblue"> <tr bgcolor="skyblue"><td>id<td>pw</tr> <% // 쿼리문 String query="select * from register"; // 커넥션 연결 Connection conn = OracleDBConnector.getConnection(); // DB에 쿼리문을 보낸다. PreparedStatement pstmt = conn.prepareStatement(query); ResultSet rs = pstmt.executeQuery(); // 결과값을 출력한다. while(rs.next()){ out.println("<tr>"); out.println("<td>"+rs.getString("ID")); out.println("<td>"+rs.getString("PW")); out.println("</tr>"); } %> </table> </body> </html>

이렇게 커넥션 풀을 이용하여 DB의 내용을 읽어오는 DAO 클래스의 함수이다. PreparedStatement를 이용하여 읽어온다.

import java.sql.*; public class MyDAO { private static MyDAO instance; //싱글톤 패턴 public MyDAO(){} public static MyDAO getInstance(){ if(instance == null) instance = new MyDAO(); return instance; } public ArrayList<MyDTO> RegisterSelect(){ Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try { StringBuffer query = new StringBuffer(); query.append("SELECT * FROM register"); conn = OracleDBConnector.getConnection(); pstmt = conn.prepareStatement(query.toString()); rs = pstmt.executeQuery(); while(rs.next()){ String id = rs.getString("id"); String pw = rs.getString("pw"); int Num = rs.getInt("num"); String title = rs.getString("title"); String contents = rs.getString("contents"); String date = rs.getString("date"); MyDTO dto = new MyDTO(id, pw, Num, title, contents, date); dtos.add(dto); } return dtos; } catch (Exception sqle) { throw new RuntimeException(sqle.getMessage()); } finally { try{ if ( pstmt != null ){ pstmt.close(); pstmt=null; } if ( conn != null ){ conn.close(); conn=null; } }catch(Exception e){ throw new RuntimeException(e.getMessage()); } } } }

'Java > JSP' 카테고리의 다른 글

Oracle JDBC 연결  (0) 2019.09.12
DB별 JDBC 드라이버 명 및 URL 형식  (0) 2019.09.12
DAO , DTO(VO) 작성  (0) 2019.09.12
IntelliJ-JDBC-MariaDB연결하기(JDBC)  (0) 2019.09.12
JSP 에러페이지, HTTP 에러코드 정리  (0) 2019.09.12

Oracle DB 또한 MariaDB를 연결 한 것과 과정은 동일하나 JDK 버전을 알 필요가 있다.

JDK1.8(java 8 버전) 이면 OracleDB12버전을 받아줘야한다.

OracleDB 별 JDBC버전

https://stackoverflow.com/questions/30928813/supported-jdbc-jdk-versions-for-oracle-11g

드라이버

oracle.jdbc.driver.OracleDriver

URL

jdbc:oracle:driver_type:[username/password]@[//]host_name[:port][/XE]

ex) jdbc:oracle:thin:@localhost:1521:xe

'Java > JSP' 카테고리의 다른 글

커넥션풀(DBCP)  (0) 2019.09.12
DB별 JDBC 드라이버 명 및 URL 형식  (0) 2019.09.12
DAO , DTO(VO) 작성  (0) 2019.09.12
IntelliJ-JDBC-MariaDB연결하기(JDBC)  (0) 2019.09.12
JSP 에러페이지, HTTP 에러코드 정리  (0) 2019.09.12

'Java > JSP' 카테고리의 다른 글

커넥션풀(DBCP)  (0) 2019.09.12
Oracle JDBC 연결  (0) 2019.09.12
DAO , DTO(VO) 작성  (0) 2019.09.12
IntelliJ-JDBC-MariaDB연결하기(JDBC)  (0) 2019.09.12
JSP 에러페이지, HTTP 에러코드 정리  (0) 2019.09.12

DAO 와 DTO에 대한 설명을 먼저 알아볼려고 한다.

DAO(Data Access Object) 란 ? - 데이터 베이스에 접속해서 데이터 추가, 삭제, 수정 등의 작업을 하는 클래스

일반적인 JSP 혹은 Servlet 페이지내에 위의 로직을 함께 기술할 수 도 있지만, 유지보수 및 코드의 모듈화를 위해 별도의 DAO클래스를 만들어 사용 한다.

DTO(Data Transfer Object) 란? - DAO클래스를 이용하여 데이터 베이스에서 데이터를 관리할 때 데이터를 일반적인 변수에 할당하여 작업 할수도 있지만, 해당 데이터의 클래스를 만들어 사용 한다. vo(Value Object)와 용어를 혼용해서 많이들 사용한다. 아래는 DTO와 VO에 대한 차이점을 알아볼 수 있다.

구조는 데이터베이스에 있는 정보들을 가져오기 위하여 DAO라는 클래스를 이용하여 데이터베이스에 접속하고, 거기서 나온 결과들을 DTO의 클래스에 저장을 한 후 그 정보들을 필요에 맞게 가공하여 jsp로 보여주는 구조이다.

먼저 DTO를 작성해보도록 하자.

package pack; public class Notice_Board_DTO{ //변수 private String id; private String pw; private int Num; private String title; private String contents; private String date; //생성자 public Notice_Board_DTO(String id, String pw, int Num, String title, String contents, String date){ this.id = id; this.pw = pw; this.Num =Num; this.title = title; this.contents = contents; this.date = date; } //getter, setter public String getID(){ return id; } public String getPW(){ return pw; } public String getTitle(){ return title; } public String getContents(){ return contents; } public int getNum(){ return Num; } public String getDate(){ return date; } public void setID(String id){ this.id = id; } public void setPW(String pw){ this.pw = pw; } public void setNum(int num){ this.Num = num; } public void setTitle(String title){ this.title = title; } public void setContents(String contents) { this.contents = contents; } public void setDate(String date){ this.date = date; } }

처음에는 DTO가 이름만 들어서는 무엇인지 긴가 민가 했었으나, 이렇게 코드를 보니 여태껏 안드로이드를 하면서 많이 봤던 자바빈 같은 것이였다.

DTO는 자신의 DataBase에 있는 테이블에서 가져올 정보들에 맞게 작성해 주면 될 것이다.

다음은 DAO이다.

package pack; import java.sql.*; import java.util.ArrayList; public class Notice_Board_DAO { private Connection con = null; private Statement stmt = null; private ResultSet rs = null; //드라이버 로딩 public Notice_Board_DAO(){ try { Class.forName("org.mariadb.jdbc.Driver"); } catch (ClassNotFoundException e) { System.err.println(" !! <JDBC 오류> Driver load 오류: " + e.getMessage()); e.printStackTrace(); } } //select 구문 public ArrayList<Notice_Board_DTO> Notice_Board_Select(){ String server = "localhost"; // 서버 주소 String database = ""; // DATABASE 이름 String user_name = ""; // 서버 아이디 String password = ""; // 서버 비밀번호 ArrayList<Notice_Board_DTO> dtos = new ArrayList<Notice_Board_DTO>(); //연결 try { con = DriverManager.getConnection("jdbc:mysql://" + server + "/" + database + "?useSSL=false", user_name, password); stmt = con.createStatement(); rs = stmt.executeQuery("select * from register"); System.out.println("정상적으로 연결되었습니다."); while(rs.next()){ String id = rs.getString("id"); String pw = rs.getString("pw"); int Num = rs.getInt("num"); String title = rs.getString("title"); String contents = rs.getString("contents"); String date = rs.getString("date"); Notice_Board_DTO dto = new Notice_Board_DTO(id, pw, Num, title, contents, date); dtos.add(dto); } } catch(SQLException e) { System.err.println("con 오류:" + e.getMessage()); e.printStackTrace(); } finally { try{ //종료 if(rs != null) rs.close(); if(stmt != null) stmt.close(); if(con != null) con.close(); }catch (Exception e){ e.printStackTrace(); } } return dtos; } }

위와 같이 코드를 작성하면 select 구문으로 뺄 수 있게 된다.

다음은 JSP에서 DAO와 DTO로 가져온 내용을 확인 하는 코드이다.

<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ page import="pack.Notice_Board_DAO" %> <%@ page import="pack.Notice_Board_DTO" %> <%@ page import="java.util.ArrayList" %> <html> <head> <title>ZeroLab</title> </head> <body> <% Notice_Board_DAO noticeDAO = new Notice_Board_DAO(); ArrayList<Notice_Board_DTO> dtos = noticeDAO.Notice_Board_Select(); for(int i=0; i <dtos.size(); i++){ Notice_Board_DTO dto = dtos.get(i); out.println(dto.getID()); out.println(dto.getPW()); } %> </body> </html>

이렇게 정보를 빼주면 된다.

여기서 가장 주의해야할 점은 DBConnector가 어디에 위치하고 있느냐 인데, 프로젝트명/web/WEB-INF/ 밑에 lib 디렉터리를 생성 해주고 거기 안에 집어 넣어준다. 나는 어느 lib에 존재해야하는 지 몰라서 계속해서 드라이버 로드 오류가 발생했었다.

'Java > JSP' 카테고리의 다른 글

Oracle JDBC 연결  (0) 2019.09.12
DB별 JDBC 드라이버 명 및 URL 형식  (0) 2019.09.12
IntelliJ-JDBC-MariaDB연결하기(JDBC)  (0) 2019.09.12
JSP 에러페이지, HTTP 에러코드 정리  (0) 2019.09.12
maven 이란?  (0) 2019.09.12

IntelliJ에 DB를 연결하는 방법이다.

MariaDB 다운로드

https://downloads.mariadb.org/

MariaDB와 Java를 연결 시켜주는 Connetcor이다.

https://mariadb.com/kb/en/library/about-mariadb-connector-j/

필자는 MariaDB를 이용하였다.

먼저 intelliJ에서 MariaDB를 연결하여 보겠다.

MariaDB를 받고 설치한 후 다음과 같이 Ctrl + Shift + A 를 눌러준 후 Database를 쳐서 검색하여 클릭하여준다.

이 후 우측에 창이 하나 뜰 텐데, 여기서 + 기호를 눌러 DB를 찾아 준다. ( 필자는 이미 만들어 리스트에 MariaDB가 있지만 텅텅비어있다면 정상이다. )

클릭을 하게 되면 이렇게 Data Sources and Drivers 라는 창이 뜨게 되고 여기서 MariaDB를 선택하여 준 후 Connector/J 를 설치하여 준다.

이 때 연결하는 창이 뜰 텐데, 다른 계정을 만들지 않았다면 User 아이디는 root가 된다. password는 지정한 대로 쳐주면 된다.

아래는 MariaDB로 연결하고 미리 만들어 두었던 notice table을 불러온 모습이다.

이번에는 JDBC 설정을 해볼 것이다. Ctrl + Alt + Shift + S 를 눌러 Project Structure 창을 켜준다. 그리고 + 를 눌러 Java library를 새로 받아 온다.

자신이 다운받은 connector의 위치로 가서 지정하여 준다.

ok 를 눌러준 후 apply이 해준다.

다음과 같이 클래스를 하나 생성 해주고 코드를 넣어 준다.

import java.sql.*; public class MariaDBConnetor { public static void main(String[] args) { Connection con = null; String server = " 서버 주소 "; String database = " DATABASE 이름 "; String user_name = " 서버 아이디 "; String password = " 서버 비밀번호 "; try { Class.forName("org.mariadb.jdbc.Driver"); } catch (ClassNotFoundException e) { System.err.println(" 드라이버 로딩 오류 : " + e.getMessage()); e.printStackTrace(); } try { con = DriverManager.getConnection("jdbc:mysql://" + server + "/" + database + "?useSSL=false", user_name, password); // SSL 실행 확인 System.out.println("연결 성공"); } catch(SQLException e) { System.err.println("에러 내용 :" + e.getMessage()); e.printStackTrace(); } try { if(con != null) con.close(); } catch (SQLException e) {} } }

자신이 만든 MariaDB의 아이디와 비밀번호, 주소, 데이터베이스명을 적어 준 후 Ctrl + Shift + F10 을 눌러 개별 실행을 해 보자.

연결 됨을 확인할 수가 있다.

SSL은 True로 하면 에러가 난다. 이 부분은 조금 더 찾아본 후 적용할 수 있는지를 알아보도록 할 것이다.


'Java > JSP' 카테고리의 다른 글

DB별 JDBC 드라이버 명 및 URL 형식  (0) 2019.09.12
DAO , DTO(VO) 작성  (0) 2019.09.12
JSP 에러페이지, HTTP 에러코드 정리  (0) 2019.09.12
maven 이란?  (0) 2019.09.12
JSP, Servlet, 자바빈 등 용어 정리  (0) 2019.09.12

jsp 에서 페이지 설정은 다음과 같다.

<%@ page errorPage="errorPage.jsp" contentType="text/html;charset=UTF-8" language="java" %>

page errorPage="에러페이지 명.jsp" 를 작성하여 주고

<%@ page isErrorPage="true" contentType="text/html;charset=UTF-8" language="java" %> <% response.setStatus(200); %> <html> <head> <title>ZeroLab</title> </head> <body> <br><br><br> <h1 align="center">페이지에 에러가 발생했습니다.<br> 다시 접속하여 주세요.</h1> <p align="right"><%= exception.getMessage()%></p> </body> </html>

이렇게 에러페이지를 구성하여 주면 된다.

하지만 이렇게 jsp에다가 바로 에러페이지를 꾸미게 된다면 jsp마다 에러페이지를 설정하여 줘야해서 귀찮다.

그러므로 web.xml을 수정하여 에러페이지로 이동하는 방법을 사용할려고 한다.

web.xml은 페이지 에러 코드별, Exception 별로 처리가 가능하다.

web.xml을 처리하기전에 알아야할 것들이 있다고 본다. HTTP 에러코드 정리 인데

HTTP 에러코드

에러 메시지

100

Continue

101

Switching Protocols

200

OK, 에러 없이 전송 성공

202

Accepted, 서버가 클라이언트의 명령을 받음

203

Non-authoritative Information, 서버가 클라이언트 요구 중 일부만 전송함

204

Non Content, 클라이언트 요구를 처리했으나 전송할 데이터가 없음

205

Reset Content

206

Patrial Content

300

Multiple Choices, 최근에 옮겨진 데이터를 요청함.

301

Moved Permanently, 요구한 데이터를 변경된 임시 URL에서 찾음

302

Moved Permanently, 요구한 데이터가 변경된 URL에 있음

303

See Other, 요구한 데이터를 변경하지 않았기 때문에 문제가 있음

304

Not modified

305

Use Proxy

400

Bad Request, 요청 실패 - 문법상 오류가 있어서 서버가 요청 사항을 이해하지 못함.

401.1

Unauthorized, 권한 없음 - 접속 실패, 이 에러는 서버에 로그온 하려는 요청 사항이 서버에 들어있는 권한과 비교했을 시 맞지 않을 경우 발생. 이 경우, 요청한 자원에 접근할 수 있는 권한을 부여받기 위해서 서버 운영자에게 요청해야 함.

401.2

Unauthorized, 권한 없음 - 서버 설정으로 인한 접속 실패, 이 에러는 서버에 로그온 하려는 요청사항이 서버에 들어있는 권한과 비교했을 때 맞지 않을 경우 발생. 이것은 일반적으로 적절한 www-authenticate head field를 전송하지 않아서 발생함.

402.3

Unauthorized, 권한 없음 - 자원에 대한 ACL에 기인한 권한 없음. 이 에러는 클라이언트가 특정 자원에 접근할 수 없을 때 발생. 이 자원은 페이지가 될 수도 있고, 클라이언트의 주소 입력란에 명기된 파일일 수도 있다. 또한, 클라이언트가 해당 주소로 접속할 때 이용되는 또 다른 파일일 수도 있다. 접근할 전체 주소를 다시 확인해 보고 웹 서버 운영자에게 여러분이 자원에 접근할 권한이 있는지를 확인한다.

401.4

Unauthorized, 권한 없음 - 필터에 의한 권한 부여 실패. 이 에러는 웹 서버가 서버에 접속하는 사용자들을 확인하기 위해 설치한 필터 프로그램이 있음을 의미함. 서버에 접속하는데 이용되는 인증 과정이 이런 필터 프로그램에 의해 거부된 것임.

404.5

Unauthorized, 권한 없음 - ISA PI/CGI 어플리케이션에 의한 권한 부여 실패. 이 에러는 이용하려는 웹 서버의 어드레스에 ISA PI나 CGI 프로그램이 설치되어 있어 사용자의 권한을 검증함. 서버에 접속하는데 이용되는 인증 과정이 이 프로그램에 의해 거부됨.

402

Payment Required, 예약됨

403.1

Forbidden, 금지 - 수행 접근 금지. 이 에러는 CGI나 ISA-PI, 혹은 수행시키지 못하도록 되어 있는 디렉터리 내의 실행 파일을 수행시키려고 했을 때 발생함.

403.2

Forbidden, 금지 - 읽기 접근 금지. 이 에러는 브라우저가 접근한 디렉터리에 가용한 디폴트 페이지가 없을 경우에 발생함.

403.4

Forbidden, 금지 - SSL 필요. 이 에러는 접근하려는 페이지가 SSL로 보안 유지되고 있는 것일 때 발생.

403.5

Forbidden, 금지 - SSL 128이 필요. 이 에러는 접근하려는 페이지가 SSL로 보안 유지되고 있는 것일 때 발생. 브라우저가 128비트의 SSL을 지원하는지를 확인해야 함.

403.6

Forbidden, 금지 - IP 주소 거부됨. 이 에러는 서버가 사이트에 접근이 허용되지 않은 IP주소로 사용자가 접근하려 했을 때 발생함.

403.7

Forbidden, 금지 - 클라이언트 확인 필요. 이 에러는 접근하려는 자원이 서버가 인식하기 위해서 브라우저에게 클라이언트 SSL을 요청하는 경우 발생함. 자원을 이용할 수 있는 사용자임을 입증하는데 사용됨.

403.8

Forbidden, 금지 - 사이트 접근 거부. 이 에러는 웹 서버가 요청사항을 수행하고 있지 않거나, 해당 사이트에 접근하는 것을 허락하지 않았을 경우에 발생함.

403.9

Forbidden, 금지 - 연결된 사용자수 과다. 이 에러는 웹 서버가 busy한 상태에 있어서 요청을 수행할 수 없을 경우에 발생함.

403.10

Forbidden, 금지 - 설정이 확실하지 않음. 이 에러는 웹 서버의 설정 부분에 문제가 있을 경우 발생함.

403.11

Forbidden, 금지 - 패스워드 변경. 이 에러는 사용자 인증 단계에서 잘못된 패스워드를 입력했을 경우 발생함.

403.12

Forbidden, 금지 - Mapper 접근 금지. 이 에러는 클라이언트 인증용 맵(map)이 해당 웹 사이트에 접근하는 것을 거부할 경우에 발생.

404

Not Found, 문서를 찾을 수 없음 - 이 에러는 클라이언트가 요청한 문서를 찾지 못한 경우에 발생함. URL을 다시 잘 보고 주소가 올바로 입력되었는지를 확인함.

405

Method not allowed, 메소드 허용 안 됨 - 이 에러는 Request 라인에 명시된 메소드를 수행하기 위한 해당 자원의 이용이 허용되지 않았을 경우에 발생함.

406

Not Acceptable, 받아들일 수 없음 - 이 에러는 요청 사항에 필요한 자원은 요청 사항으로 전달된 Accept header에 따라 "Not Acceptable" 내용을 가진 사항이 있을 경우에 발생함.

407

Proxy Authentication Required, Proxy 인증이 필요함 - 이 에러는 해당 요청이 수행되도록 proxy 서버에게 인증을 받아야 할 경우에 발생함.

408

Request timeout, 요청 시간이 지남.

409

Conflict

410

Gone, 영구적으로 사용할 수 없음.

411

Length Required

412

Precondition Failed, 선결조건 실패 - 이 에러는 Request-header filed에 하나 이상에 선결 조건에 대한 값이 서버에서의 테스트 결과 false로 나왔을 경우에 발생.

413

Request entity too large

414

Request-URI too long, 요청한 URI가 너무 김 - 이 에러는 요청한 URI의 길이가 너무 길어서 서버가 요청 사항의 이행을 거부했을 경우 발생.

415

Unsupported media type.

500

Internal Server Error, 서버 내부 오류 - 이 에러는 웹 서버가 요청사항을 수행할 수 없을 경우에 발생함.

501

Not Implemented, 적용 안 됨 - 이 에러는 웹 서버가 요청사항을 수행하는데 필요한 기능을 지원하지 않는 경우에 발생.

502

Bad gateway, 게이트웨이 상태 나쁨 - 이 에러는 게이트웨이 상태가 나쁘거나 서버의 과부하 상태일 때 발생한다.

503

Service Unavailable, 서비스 불가능 - 이 에러는 서비스가 현재 멈춘 상태 또는 현재 일시적인 과부하 또는 관리 상황일 때 발생될 수 있다.

504

Gateway timeout

505

HTTP Version Not Supported

이렇게 에러 코드들이 있다고 한다. 이 중에서 404와 500이 대표적인 JSP 오류라고 한다.

먼저 web.xml 을 처리해 줄 필요가 있겠다.

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <servlet> <servlet-name>Servlet</servlet-name> <servlet-class>pack.Servlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>Servlet</servlet-name> <url-pattern>/Serv1</url-pattern> </servlet-mapping> <error-page> <error-code> 404 </error-code> <location> /errorPage/404errorPage.jsp </location> </error-page> <error-page> <error-code> 500 </error-code> <location> /errorPage/404errorPage.jsp </location> </error-page> </web-app>

이 후에는 저 /errorPage/404errorPage.jsp 이 경로에 맞게 jsp 파일을 만들어 주면 된다. 필자는 errorPage 디렉터리를 만들어 주고 거기에 errorPage.jsp 를 만들어 보았다.

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <% response.setStatus(HttpServletResponse.SC_OK); %> <html> <head> <title>ZeroLab</title> </head> <body> <br><br><br> <h1 align="center">404 <br><br>페이지에 에러가 발생했습니다.<br> 사유 : 요청하신 페이지가 없습니다.</h1> </body> </html>

위는 404errorPage.jsp 코드이다.

서버를 돌려서 404에러를 한번 내서 에러페이지가 잘 작동하는지 확인해 볼 필요가 있다.

이런 페이지가 뜨게 할려면 말이다. 간단하다. 다음과 같은 코드를 입력하여 주자.

<% page errorPage="" contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>ZeroLab</title> </head> <body> <ul> <li><a href="intro.php">소개</a></li><br><!-- 헛페이지 링크를 만들어 보자--> </ul> </body> </html>

다음은 500 에러 페이지 이다. 방금 위의 코드에 삽입해보자.

<% int i =1 / 0 // 왜 이게 에러가 나는지는 설명을 하지 않아도 알 수 있어야 한다. %>

500 에러페이지

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <% response.setStatus(HttpServletResponse.SC_OK); %> <html> <head> <title>ZeroLab</title> </head> <body> <br><br><br> <h1 align="center">500 <br><br>페이지에 에러가 발생했습니다.<br> 사유 : 내부 문제</h1> </body> </html>

'Java > JSP' 카테고리의 다른 글

DAO , DTO(VO) 작성  (0) 2019.09.12
IntelliJ-JDBC-MariaDB연결하기(JDBC)  (0) 2019.09.12
maven 이란?  (0) 2019.09.12
JSP, Servlet, 자바빈 등 용어 정리  (0) 2019.09.12
JSP 에서 Post로 Servlet 에 parameter 넘기기  (0) 2019.09.12

+ Recent posts