목록Java (81)
삶 가운데 남긴 기록 AACII.TISTORY.COM
세션은 클라이언트 마다 개별적으로 생성되어 클라이언트의 브라우저를 종료할 때까지 서버쪽에서 그 객체(정보)를 유지합니다. HttpSession 생성 HttpSession객체는 개발자가 수동으로 생성하는게 아니라 HttpServletRequest의 getSession() 메서드를 이용해서 객체를 획득합니다. 새 서블릿 SessionTest.java를 생성합니다. package net.aacii.test; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpSe..
쿠키(Cookie) 클라이언트 단위로 상태정보를 유지해야 할 때 쿠키를 사용합니다. 예를들어 로그인 후 로그아웃 할 때까지 인증 상태를 유지 한다던지, 쇼핑몰 장바구니에 선택한 상품 정보들을 유지 한다던지 같은 유지 정보들을 관리합니다. 쿠키는 텍스트로 name=value 형태로 저장하며 만료 일자나 시간을 지정할 수 있습니다. 쿠키 저장(전송) 작업중인 패키지에 클래스 CookieTest.java를 생성합니다. package net.aacii.test; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; im..
ServletContext 서블릿 컨텍스트는 서버 쪽에서 웹 어플리케이션 단위로 값(정보)를 유지하는 방법입니다. 서블릿 컨테이너가 시작될 때 ServletContext 객체가 자동으로 생성되어 웹 어플리케이션이 종료될 때까지 계속 유지 합니다. init() 메소드를 재정의하여 추출 작업중인 패키지에서 class 파일을 하나 생성하고 이름을 ServletContextTest.java로 만들고 아래처럼 작성합니다. package net.aacii.test; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletConfig; import javax.servlet.ServletContext; import javax..
자바 웹 어플리케이션은 브라우저에서 아래 처럼 접근 할 수 있습니다. http://서버주소:포트번호/웹어플리케이션이름/서블릿orJSP 서블릿 경로(build path) 프로젝트 이름을 우클릭하고 Build Path -> Configure Build Path 를 선택합니다. 여기 source 탭에 아래 부분에 Default output folder: 항목에 Browse... 버튼을 클릭합니다. 폴더 목록에서 jsp> WebContent > WEB-INF 폴더를 선택한 후 Create New Folder를 선택합니다. 그러면 자바 소스 파일들이 컴파일 후에 방금 지정한 WEB-INF/classes 에 생성되는 것입니다. 서블릿 작성(package 경로: net.aacii.test) src 경로에 net.aa..
REST Client REST API를 이용하여 서버가 리소스를 제공하는 경우 클라이언트 측에서 리소스를 받기 위해 REST Client API가 필요합니다. 그중 하나인 OkHttp 라이브러리를 이용해 JAVA용 REST Client를 구현하는 예제를 소개합니다. OkHttp OkHttp는 Square 에서 만든 간편하게 REST API나 http기반의 요청 응답을 처리할 수 있는 라이브러리입니다. 오픈소스로 공개된 소프트웨어입니다. https://github.com/square/okhttp GitHub - square/okhttp: Square’s meticulous HTTP client for the JVM, Android, and GraalVM. Square’s meticulous HTTP cli..
byte는 8 bits 2진법(0 or 1)으로 표현된 데이터 입니다. 16진법은 0~9, A~F 까지 기호를 사용하여 숫자를 표현(코딩)하는 방식입니다. 64진법은 0~9, a~z, A~Z, +, / 기호를 이용하여 숫자를 표현(코딩)하는 방식입니다. byte array 는 2진수로 이루어진 데이터 입니다만 사람이 읽기 어려우므로 16진법(Hex digits)이나 64진법(base64)으로 변환하여 2진수의 배열(byte array)을 문자처럼 사용하기도 합니다. java에서 byte 데이터를 16진수 String으로 바꿀 때 보통 아래와 같은 소스 코드를 이용합니다. Integer.toString(((int) bytedata & 0xff)+0x100, 16).substring(1); Integer.t..
Base64는 64진법이라는 뜻입니다. 디지털 신호인 2진법은 너무도 길어서 8진법이나 16진법 등으로 묶어서 표현 하기도 합니다. 64진법은 영어권의 ASCII 문자들을 써서 표현 할 수 있는 가장 큰 진법인데 그래서 Base64는 전자 메일을 통한 2진 데이터 전송에 많이 쓰이고 있습니다. 보통 알파벳 대문자 A~Z, 소문자 a~z, 숫자0~9, 그리고 마지막 두 개를 어떤 기호를 쓰느냐의 차이만 있습니다. Base64의 정확한 규격은 RFC 1421, RFC 2045에 정의 됩니다. 연속된 8비트를 인코딩하도록 정의되어 있습니다. 인코딩된 결과는 padding된 비트 때문에 원본보다 용량이 4/3 정도 늘어나게 됩니다. 2진(binary)데이터를 알파벳 등으로 변환하는 것이기 때문에 이미지 데이터도..
Set 순서를 유지하지 않고, 중복을 허용하지 않는 컬렉션 입니다. 수학에서의 집합과 유사한 개념입니다. 순서나 인덱스가 없기 때문에 Iterator 를 이용해서 값에 접근해야 합니다. HashSet Set 인터페이스를 구현한 클래스 입니다. HashSet은 객체를 저장하기 전에 객체의 해시코드를 얻어내고 이미 저장되어 있는 객체들의 해시코드와 비교해서 중복된 값이 있는지 검사합니다. public class HashSetEx { public static void main(String[] args) { Set set = new HashSet(); set.add("Java"); set.add("JDBC"); set.add("Servlet"); set.add("Java");//중복해서 저장되지 않음 set.a..
List 컬렉션 순서를 유지하며 객체를 저장하며 중복해서 저장할 수 있습니다. ArrayList 인덱스 정보가 있는 List 컬렉션입니다. 인덱스가 있으므로 삽입과 삭제가 빈번한 구조에서는 바람직하지 않습니다. 이런 경우 LinkedList를 사용하는 것이 좋습니다. java 1.5부터 제네렉을 통해 객체의 타입을 지정해줘서 불필요한 casting을 하지 않아도 됩니다. import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class ArrayListEx { public static void main(String[] args) { List list = new ArrayList(); list.add("1st");..
바이트 배열을 문자열로 변환 문자열은 본래 바이트(byte/char)의 배열로 되어있습니다. 자바에서는 이를 클래스나 기본 데이터 타입처럼 String 을 다룰 수 있습니다. public class ByteToString { public static void main(String[] args) { byte[] bytes = {72, 101, 108, 108, 111, 32, 74, 97, 118, 97 }; //Hello Java String str1 = new String(bytes); System.out.println(str1); String str2 = new String(bytes, 6, 4);//6번째 인덱스부터 길이가 4만큼 System.out.println(str2); } } 실행 결과 He..
자바 프로그램은 운영체제가 아니라 JVM에서 실행됩니다. 그래서 System 클래스를 통해 운영체제의 일부 기능을 제공하고 있습니다. exit() 프로세스를 강제 종료한는 메소드 입니다. public class ExitEx { public static void main(String[] args) { for(int i = 0; i
Objects Object 클래스와 이름이 유사한 Objects 클래스는 static으로 객체를 다루기 위한 여러가지 메서드들을 지원합니다. 객체 비교 compare() import java.util.Comparator; import java.util.Objects; public class CompareExample { public static void main(String[] args) { Student s1 = new Student(1); Student s2 = new Student(1); Student s3 = new Student(2); int result = Objects.compare(s1, s2, new StudentComparator()); System.out.println(result);..
if~else class Sample { public static void main(String[] args){ int num = (int)(Math.random()*6) +1;//주사위 번호 뽑기 if(num == 1) { System.out.println("1번이 나왔습니다."); }else if(num == 2){ System.out.println("2번이 나왔습니다."); }else { System.out.println("3번이상이 나왔습니다."); } } } switch class Sample { public static void main(String[] args){ int num = (int)(Math.random()*6) +1;//주사위 번호 뽑기 switch(num) { case 1: Sy..
변수(variable) 변수는 값을 저장하는 메모리 공간을 가리키는 메모리 주소를 참조하는 이름을 붙인 것입니다. 변수의 선언 변수는 사용하기 전에 선언을 해야 합니다. 왜냐하면 저장되는 값의 데이터 타입(data type)에 따라서 메모리 공간의 크기가 달라지기 때문입니다. 그 데이터 타입의 크기만큼 공간을 미리 확보해서 다른 프로그램이 값을 변경시키지 못하도록 해야 하기 때문입니다. int age; 여기서 int가 데이터 타입(정수형)이고 age가 변수입니다. 변수 작성 관례 1. 알파벳 소문자로 시작합니다. 2. 단어를 합성할 때 첫 글자를 대문자로 합니다. (낙타등 표기법) 3. 자바에서 사용하는 예약어는 금지입니다. char charData; 변수 할당 연산자 = = 은 수학에서는 같다의 뜻이지..
JDK 구버전 다운로드 최신 버전은 연구용이나 학습용으로 주로 사용됩니다. 프로젝트에서는 보통 최신 버전을 사용하지 않고 안정화되고 대중화된 버전을 사용합니다. 그래서 jdk 구버전이 필요할 때가 있습니다. 아래는 오라클에서 제공하는 모든 구버전 다운로드에 관한 링크입니다. https://www.oracle.com/technetwork/java 단, 오라클 계정이 필요합니다. JDK JDK는 java virtual machine 실행환경과 개발환경 모두 포함되어 있습니다. jdk설치 경로에는 bin 디렉토리가 있는데, 거기에 javac 가 .java 소스코드를 .class로 컴파일 해주는 컴파일러이고, java가 class를 실행해주는 실행 파일입니다. (윈도우: 제어판>시스템 및 보안>시스템>고급 시스..