블로그 이미지
개발자의 조건은 어떤것도아닌 3일은 기본으로 날샐수있는 체력과 3일을 안씻어도 찝찝합을 못느끼는 것과 라면을 먹어도 탈없는 위입니다.
DefineJAVA

공지사항

최근에 받은 트랙백

글 보관함

calendar

    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    
크리에이티브 커먼즈 라이선스
Creative Commons License

기본적으로 HttpSessionListener를 구현(Implements)하여 세션이 생성 되는 시점과 세션이 사라지는 시점을 가지고 올 수 있다.

세션을 생성 되는 시점에 DB나 특정 Static 변수에 세션 정보를 저장 하고 세션이 종료될 때 그 세션 정보를 지워 줌으로써

해당 세션의 중복 로그인을 막을 수 있으며 현재 접속중이 접속자 정보를 가지고 올 수 있다.

package com.moainfo.http.session;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public class MoaSessionListener implements HttpSessionListener
{
 public void sessionCreated(HttpSessionEvent se)
 {
  HttpSession session = se.getSession();
  System.out.println("Create session : " + session.getId());
 }
 public void sessionDestroyed(HttpSessionEvent se)
 {
  HttpSession session = se.getSession();
  System.out.println("Close session : " + session.getId());
  
 }
}

저작자 표시 비영리 변경 금지

세션 강제 종료(강제 로그 아웃)

2011/05/05 13:46 | Posted by DefineJAVA
크리에이티브 커먼즈 라이선스
Creative Commons License

Servlet 버젼이 올라 감으로 HttpSession에서 HttpSessionContext을 가져오는 메소드인 getSessionContext를 사용 못하게 되었다.
실제 사용을 하면 객체을 반환을 하기는 하지만 객체 안에 세션은 비워져 있다.

문서를 뒤져 보니 보안 관계상 사용을 못한다고 어쩌고 적혀 있기는 하는데.....그래도 관리자가 강제 로그아웃 시키거나 세션을 지워줘야 할 경우가 있을 것 같아서 고민끝에 편법을 하나 생각 해 냈다.(Jeus에서는 된다는 말도 있음)

HttpSessionContext 사용이 가능 하다면 HttpSessionContext .getSession(아이디)를 사용하여 세션 객체를 반환받고 HttpSession.invalidate() 메소드를 호출 하면된다.

HttpSessionContext 사용이 불가능 하다면 아래 소스와 같이 jsessionId값을 뒤쪽에 붙여 보내에 해당 세션으로 연결 시켜서 로그 아웃을 실행 하면 된다.


call.jsp

String jsessionId = "288B29804635D51357A52F6CCF25617B";
BufferedReader in = null;
String address = "http://me:8080/cms/logout.jsp;jsessionid="+ jsessionId;
try
{
 URL url = new URL(address);
 in = new BufferedReader(new InputStreamReader(url.openStream()));
 String line = in.readLine();
 in.close();
} catch (Exception e) {
 System.out.println("-.-;;");
}
in = null;

logout.jsp
System.out.println(session.getId());
 session.invalidate();

이 편법은 Session Hijacking이라는 다른 사람의 세션을 훔치는 방법을 응용한 방법이다.

약간의 문제가 있을 수도 있지만 우선은 이렇게 처리했다.

jsessionId값을 모르면 아무 소용이 없기 때문에 HttpSessionListener를 구현하여 세션이 생성되고 세션을 종료 되는 시점을 체크 하여 특정 저장 공간에 세션아이디 값과 아이피등 여러 정보를 저장 해 놓고 사용 하면된다.
저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License
DAO를 풀어보면 Database Access Object로써 DB에 접근하여 무언가를 행하는 클레스입니다.

VO는 Variable Object(Value Object)로 DB 혹은 어떠한 물체 틀(형상화)을 잡고 이 틀을 잡기 위한 변수들을 모아둔 하나의 클레스트 입니다.

회원 DAO와 회원 VO의 구조를 보자면 다음과 같음.

UserDAO.java

더보기


UserVO.java

더보기


VO 부분은 회원 1명을 표현할때 필요한 여러 변수를 가지고 있으며 DAO는 그 회원들의 정보를 저장 불러오기 수정 등을 할수 있는 행위가 기술됨.

DAO에서 중요한 부분은 잘 생각해 보면 이 DAO는 몇번을 실행하더라도 내용이 바뀌지가 않음. DAO가 실행될때 마다 바뀌는건 VO고 이를 봤을 때 싱글톤 패턴을 사용하면 메모리를 조금 더 적게 사용할 수 있으며(매 호출시 인스턴스를 만들지 않기 때문) static영역에 미리 만들어진 인스턴스가 들어가 있기 때문에 그 주소를 참조해서 객체를 불러오기 때문에 객체를 생성하는것에 비해 속도가 빠름.
저작자 표시 비영리 변경 금지

제 10회 한국자바개발자 컨퍼런스

2009/02/25 13:39 | Posted by DefineJAVA
크리에이티브 커먼즈 라이선스
Creative Commons License
제 10회 한국자바개발자 컨퍼런스
크리에이티브 커먼즈 라이선스
Creative Commons License

MyEclipse에서 Xdoclet을 이용하여 sesstion bean 만들기
For weblogic 8 #2

http://www.definejava.net/ @ ALT

MyEclipse에서 Xdoclet을 이용하여 sesstion bean 만들기 For weblogic 8 #1에서 Xdoclet을 이용하여 배포에 필요한 xml과 class 파일을 생성하였습니다.
이제 실제로 Weblogic Server에 Application을 배포하여 이것이 잘 돌아가는지 확인 해 보겠습니다.
우선 MyEclipse에 Weblogic 서버 설정이 되어있어야 합니다.
설정 하는 방법은 우선 따로 정리하지 않고 나중에 다시 강좌를 한개 더 쓰겠습니다.
설정이 되어있다는 가장하에 진행하도록 하겠습니다.

  • Server정보에 WebLogic 8 이 있는지 확인하고 마우스 오른쪽 버튼을 누르고 Manage Deployment를 선택합니다.
    Server Deployments 폼이 나타나면 add를 클릭한 뒤 Project에서 HelloEJB를 선택 한 뒤 Finish를 누릅니다.

사용자 삽입 이미지

  • Deploy가 완료 되면 OK 버튼을 누르고 Weblogic 8 왼쪽에 + 버튼을 눌러 helloEJB Application이 등록되었는지 확인합니다.

사용자 삽입 이미지

  • Deploy된 helloEJB 밑에 helloEJBEJB 프로젝트와 helloEJBWEB 프로젝트가 있음을 알 수 있습니다.
  • Weblogic 관리자 화면에도 배포가 잘 되었는지 확인 해 봅니다.

사용자 삽입 이미지


이제 JSP 또는 JAVA 파일을 만들어서 방금 만든 EJB를 사용 해 보겠습니다.
Web Project를 미리 만들었기 떄문에 JSP에서 EJB를 확인 해 보겠습니다.

helloEJBWeb 프로젝트에서 helloEJB01.jsp 파일과 helloEJB02.jsp 파일을 만듭니다.
01파일은 로컬에서 EJB를 사용할 때 그리고 02는 원격지에서 EJB를 사용할 때의 예제 입니다.

helloEJB01.jsp와 helloEJB02.jsp에 다음과 같이 입력합니다.
helloEJB01.jsp

helloEJB01.jsp 시작


helloEJB02.jsp

helloEJB02.jsp 시작


이제 브라우져를 확인 하겠습니다. debug 모드로 서버를 시작하셨다면 따로 deploy를 다시 안해 주셔도 자동으로 jsp파일을 deploy 할 것입니다.

브라우져 주소창에 http://localhost:7001/helloEJBWeb/helloEJB01.jsphttp://localhost:7001/helloEJBWeb/helloEJB02.jsp 입력 하시고 Hello World가 뜨면 성공한 것 입니다.


크리에이티브 커먼즈 라이선스
Creative Commons License

MyEclipse에서 Xdoclet을 이용하여 sesstion bean 만들기
For weblogic 8 #1


http://www.definejava.net/ @ ALT

이번에는 마이이클립스에서 Xdoclet을 이용하여 EJB 무상태 세션 빈을 만들어서 웹로직 8에 배포하는 과정을 적어 보았습니다.
  • 우선 프로젝트를 생성하겠습니다. 새 프로젝트 중 Enterprise Application Project를 선택합니다.
    EJB 프로젝트를 따로만들거나 WEB 프로젝트를 따로 만들어서 상관 없습니다.

사용자 삽입 이미지

  • Project Name에 알맞은 이름을 주시고 J2EE 버젼을 1.3으로 체크합니다. 웹로직 8에서는 1.3을 지원하는거 같더군요. 1.4 버젼으로 컴파일 했을 경우 오류가 떳었습니다
  • 밑에 Creation tasks는 WEB 프로젝트와 EJB 프로젝트를 사용할지 물어보는 탭 입니다. 두개다 체크를 하시고 next를 누릅니다.
사용자 삽입 이미지

  • 다음화면에서 WEB 프로젝트 생성을 선택하고 알맞은 WEB 프로젝트 이름을 주시고 next를 누릅니다.

사용자 삽입 이미지

  • 다음화면에서 EJB 프로젝트 생성을 선택하고 알맞은 EJB 프로젝트 이름을 주시고 finish를 누릅니다.
사용자 삽입 이미지

  • Package Exploer를 보시면 세개의 프로젝트가 생성이 되었습니다. helloEJB는 Application으로 이 밑에 여러 가지 EJB모듈과  WEB Application을 둘수 있습니다.
    helloEJBEJB 프로젝트에서는 실제적인 EJB 모듈을 생성할 것이며 helloEJBWeb에서는 이 모듈을 JNDI에 Look Up 하여 실제로 사용하여 보겠습니다.
사용자 삽입 이미지

  • helloEJBEJB의 src에서 마우스 오른쪽 버튼을 누르셔서 new에 Session Bean을 선택하여 세션빈 하나 생성해 줍니다.
사용자 삽입 이미지

  • 생성 후 열린 파일의 마지막 부분의 replaceWithRealBusinessMethod()를 getHelloWorld로 변경하고 위에 문서화 주석 부분을 변경합니다.
사용자 삽입 이미지

사용자 삽입 이미지

  • 이것으로 세션빈이 만들어 졌습니다. 이제 Project에서 Xdoclet 설정을 하고 해야합니다. helloEJBEJB 프로젝트의 속성을 들어가서 MyEclipse의 Xdoclet을 선택합니다.

사용자 삽입 이미지

  • Xdoclet에서 Add Standard 버튼을 눌러 Standard EJB를 선택합니다.
    ejbdoclet에서 오른쪽 버튼을 눌러 Add를 눌러 weblogic을 추가해줍니다.

사용자 삽입 이미지

  • 추가가 완료되면 weblogic을 선택하고 오른쪽에서 destDir 속성을 src/META-INF로 넣어 둡니다. 다음으로 OK 버튼을 누릅니다.
사용자 삽입 이미지

  • Xdoclet 설정이 완료되면 프로젝트에서 오른쪽 버튼을 누르고 MyEclipse 메뉴에서 Run Xdoclet을 클릭 합니다.
사용자 삽입 이미지

  • 다음과 같이 홈, 원격 인터페이스와 배포시 필요한 xml 파일들이 자동으로 생성됩니다.
사용자 삽입 이미지


다음에 MyEclipse에서 Xdoclet을 이용하여 sesstion bean 만들기 For weblogic 8 #2로 실제로 웹로직에 Application을 배포를 하고 테스트를 해보겠습니다.

Jakarta Commons Lang 1. 살펴보기

2007/05/15 16:05 | Posted by DefineJAVA
크리에이티브 커먼즈 라이선스
Creative Commons License

Jakarta Commons Lang 1. 살펴보기


1. Jakarta Commons Lang Package
Commons Lang 라이브러리는  자바 표준 JDK의 java.lang 패키지에 있는 기능들을 확장 또는 사용이 편하게 만들어 놓은 패키지입니다.
즉java.lang 패키지의 기능을 보다 편리하게 사용하기 위한 패키지입니다.

최상위 패키지에는 여러가지 유틸 클레스를 포함하고 있으며 서브클레스에는 여러 종류의 클레스와 예외 클레스 등을 포함하고 있습니다.

2. Download
http://jakarta.apache.org/site/downloads/downloads_commons-lang.cgi
(현재 2.3 최신버젼)

3. 패키지 구조

패키지

org.apache.commons.lang
사용하기 편한 정적 메소드와, java.lang을 비롯한 핵심 클레스들을 추가로 제공합니다.

org.apache.comm1ons.lang.builder
equals(Object), toString(), hashCode(), and compareTo(Object) 메소드를 만드는 것을 지원합니다.

org.apache.commons.lang.enum
org.apache.commons.lang.enums로 변경되어 3.0 버젼부터는 없어 질것입니다.

org.apache.commons.lang.enums
c언어 스타일을 자바에서 사용 가능하도록 지원합니다.

org.apache.commons.lang.exception
예외처리 클레스를 제공합니다.

org.apache.commons.lang.math
java.math를 확장한 여러가지 수학통계학 메소드들을 지원합니다.

org.apache.commons.lang.mutable
변수에 대한 포장클레스를 지원합니다.

org.apache.commons.lang.text
java.text 패키지를 확장하여 text 능숙히 다룰수 있도록 지원합니다.

org.apache.commons.lang.time
시간과 날짜에 관련된 클레스들을 제공합니다.

JNDI 소개

2007/05/14 17:37 | Posted by DefineJAVA
크리에이티브 커먼즈 라이선스
Creative Commons License

많은 J2EE개발자들이 환경 변수(environment entries), DataSource 객체, JMS 메시지 수신지(JMS message destinations) 그리고 엔터프라이즈 빈 홈 인터페이스(enterprise bean home interfaces)를 찾고자 Java Naming and Directory Interface (JNDI)를 이용한다. 하지만 많은 사람들은 JNDI에 대한 진정한 이해 없이 이러한 기능을 하는 코드를 단순히 복사해서 붙이고 고칠 뿐이다. 이 팁은 사용자의 엔터프라이즈 시스템에 배포된 리소스를 액세스하기 위해 JNDI를 사용하는 방법을 소개한다.

엔터프라이즈 애플리케이션들은 그것들의 특성상, 비즈니스 오퍼레이션을 지원하기 위해 여러곳에 배포된 리소스들을 한데 모아야 한다. 새로운 시스템이 생성되었다거나, 기존의 시스템이 업그레이드 되었다거나, 오래된 시스템이 더 이상 작동하지 않을 때 서비스들이 오가게 된다. 애플리케이션 서비스를 서로 분리하는 것은 시스템을 쉽게 유지/확장할 수 있게 한다. 하지만 서비스가 분리되었을 때, 각자의 역할을 제대로 수행하기 위해서는 서로를 찾아낼 수 있어야만 한다. 이 때가 바로 명명 서비스(naming services)와 디렉토리가 유용한 시점이다.

명명 서비스는 이름을 이용해서 객체나 객체에 대한 레퍼런스를 검색하는 방법을 제공한다. 그러한 객체로의 예는 메시지 큐(message queues), 데이터베이스 커넥션 팩토리(database connection factories), 환경 파라미터(environment parameters), 그리고 엔터프라이즈 빈과 같은 분산 컴포넌트(distributed components)등이 있다. 애플리케이션 개발자들은 명명 서비스내의 이름에 객체들을 바인딩해서 객체에 이름을 붙인다. 애플리케이션 코드는 이렇게 바인딩된 이름으로 객체들을 검색하기 위해 명명 서비스를 사용할 수가 있다. 이러한 분리(decoupling)는 네트워크 객체들을 사용하는 시스템 컴포넌트에 대한 어떠한 변경없이 유지 보수를 위해 올리거나 내릴 수 있고, 요청들을 리다이렉트(redirect)시킬 수 있으며, 서비스가 다이나믹하게 재조정될 수 있음을 의미한다.

이미 기존의 명명 서비스에 대해 잘 이해하고 있으리라고 생각된다.

  • DNS (Domain Name Service)는 java.sun.com과 같은 호스트네임을 %nslookup java.sun.com%과 같은 IP주로소 매핑한다.
  • CORBA (Common Object Request Broker Architecture)를 위해 쓰이는 COS (Common Object Services) 명명 서비스 는 CORBA 인터페이스 이름(interface names)을 객체 인터페이스로 매핑한다.

사용자는 컴퓨터의 파일시스템을 파일의 경로(pathname)에 파일의 컨텐츠를 매핑하는 일종의 명명 서비스로 생각할 수 있다.

밑의 그림은 명명 서비스가 서비스 네임을 데이터나 서비스 인터페이스로 매핑하는 방법을 보여주고 있다.

figure 1

이름(name)을 객체로 매핑하는 것을 바인딩이라 부른다. 바인딩은 명명 서비스를 형성하는 사람에 의해 생성된다. 대부분의 명명 서비스는 프로그램이 런타임시에 이름을 객체로 바인딩하거나 해제하는 방법도 제공한다.

컨텍스트는 이름을 객체로 바인딩한 집합이다. 예를 들면, 파일시스템에서 경로 /home 는 흔히 시스템의 유저 디렉토리를 포함하는 컨텍스트이다. 컨텍스트는 다른 컨텍스트를 포함할 수도 있다. /home 컨텍스트의 유저 디렉토리는 그 자체가 유저 파일을 포함하는 컨텍스트이다.

컨텍스트는 최소한 명명 규칙(naming convention)과 검색기능(lookup function)을 갖는다. 예를 들면, DNS는 가장 구체적인 스트링은 왼쪽, 도메인은 오른쪽에 나타내면서 스트링을 점으로 분리하는 명명 규칙을 갖는다. DNS의 검색기능은 nslookup 프로그램을 이용해서 커맨드라인으로부터 액세스가 가능하다.(물론, DNS 명명 서비스에 대한 API도 존재한다.) 컨텍스트는 대게 객체들을 바인딩하고 해제하는 방법과 그것들을 열거하는 방법을 제공한다.

때때로 명명 서비스 의 객체들은 다른 프로그램이 필요로 하는 데이터를 포함한다. 가령, J2EE애플리케이션에서 환경 변수를 나타내는 객체들은 대게 명명 서비스 에 저장된다. 하지만 이외에 명명 서비스의 객체는 객체에 대한 레퍼런스를 나타낸다. 예를 들면, 서버에 레퍼런스를 제공하는 객체는 통상적으로 오픈 서버 커넥션이 아닌 서버에 대한 레퍼런스로서 명명 서비스 에 의해 저장된다.명명 서비스 에 의해 리턴된 레퍼런스 객체는 필요시에 서버 커넥션을 생성하기 위해 사용될 수 있다.

다음 그림은 컨텍스트의 개념도이다. top 컨텍스트는 /top로 불리며 객체, 레퍼런스, 그리고 다른 컨텍스트들을 포함한다. 컨텍스트 /top은 subcontexts b 와 g를 갖는다. 컨텍스트 /top/g 는 subcontext "b"를 갖는다. A라고 불리는 객체가 하나 이상 일지라도, 특정 개체 /top/g/b/a는 그 위치가 컨텍스트 /top/g/b 임이 분명하기 때문에 찾을 수가 있다.

figure 2

바인딩된 객체들에 대한 데이터를 제공하는 명명 서비스를 디렉토리라고 부른다. 가령, 파일시스템 디렉토리는 일반적으로 크기, 타입, 접근 허용 그리고 파일을 생성하고 수정한 날짜에 관한 정보를 제공한다. 몇몇 디렉토리는 이름으로 검색, 애트리뷰트의 조합으로 검색 모두를 허용한다.

각각의 명명 서비스들은 각자의 태스크(task)에 잘 맞도록 되어있지만, 그들이 작동하는 방식은 서로 다르다. 각 명명 서비스는 고유의 명명규칙, 검색기능, 바인딩과 디렉토리 프로토콜(directory protocols)과 객체 서비스 인터페이스(object service interfaces)를 갖는다. JNDI 는 네트워크 서비스를 이름짓고 찾기 위해 일관된 방법을 제공한다.

Java Naming and Directory Interface

JDBC 데이터베이스 커넥션(database connections), JMS 큐(JMS queues) 혹은 엔터프라이즈 빈 홈 인터페이스(enterprise bean home interfaces)와 같은 네트워크 객체에 액세스하기 위해 JNDI 를 사용하는 방법을 이미 알고 있을 것이다. 사실 JNDI 는 이름들을 객체로 매핑하지만, JNDI 는 명명 서비스가 아니다. 그보다도 JNDI는 명명 서비스를 표준적인 방법으로 액세스가능하게 하면서 기존의 명명 서비스를 감추는(wrap) 인터페이스들의 집합이다.

다음 그림에서 보는 것과 같이, 자바 애플리케이션은 JNDI인터페이스를 이용해서 감춰진(underlying) 명명 서비스에 액세스한다.

figure 3

애플리케이션내의 코드는 JNDI 인터페이스 메소드를 호출한다. 이러한 메소드를 구현하는 객체들은 JNDI 인터페이스 호출을 감춰진 명명 서비스에 대한 호출로 매핑한다. 또한 JNDI는 통합된 명명 규칙도 정의한다. JNDI 이름들은 JNDI의 명명 관리자(naming manager)에 의해 감춰진 명명 서비스의 명명 규칙을 따르는 이름으로 매핑된다.

javax.naming 패키지는 다음과 같은 명명과 디렉토리에 관련된 인터페이스들을 포함한다.

  • javax.naming.Context는 컨텍스트를 나타내는데, 이것은 바인딩과 서브컨텍스트를 찾고 관리하는 데에 쓰인다.
  • javax.naming.Name는 명명 서비스의 이름을 추상적으로 표현(abstract representation)하게 해준다.
  • javax.naming.Binding은 명명 서비스 이름과 그 이름에 바인딩된 객체의 표현이다.
  • javax.naming.Reference는 객체의 복사본을 얻어낼 수 있게 해준다.

컨텍스트 찾기

이 팁에 포함된 샘플코드는 JNDI컨텍스트의 컨텐츠를 열거하는 방법을 보여준다. 샘플 서블릿 Oct2003Servlet는 사용자가 입력한 이름에 해당하는 JNDI namespace내의 컨텐츠를 찾고 디스플레이한다.

컨텍스트를 얻는 가장 쉬운 방법은 javax.naming.InitialContext 클래스의 인스턴스를 생성하는 것이다. 샘플 서블릿 메소드 jndiList 는 최초의 컨텍스트를 생성하고 명명된 객체를 찾을 때 그것을 사용한다.

   InitialContext ic = new InitialContext();
   Object objFound = ic.lookup(name);

여기에서 name은 사용자가 HTML페이지에서 입력한 HTTP GET 혹은 POST 변수명(vriable name)이다. 만약 리턴된 객체가 Context 라면 jndiListlistContext 메소드를 호출하고, ListContext메소드는 주어진 이름에 해당하는 컨텍스트의 컨텐츠를 열거한다. 객체가 DataSource이면, jndiList 는 명명된 데이터 소스에 관한 정보를 출력한다.

listContext 메소드는 주어진 JNDI 컨텍스트의 컨텐츠를 하나의 테이블로 출력한다. 이를 위해서는 Context 메소드 listBindings 를 이용하는데, 이는 NamingEnumeration 를 리턴한다.

      NamingEnumeration ne = context.listBindings("");

NamingEnumerationjava.util.Enumeration를 구현한 것이다. NamingEnumeration.next 메소드는 javax.naming.Binding 타입의 객체를 리턴하고, 이는 객체의 이름과 객체의 클래스 이름 그리고 저장된 객체 자체를 포함한다.

      
      while (ne.hasMore()) {
         Binding ncp = (Binding)ne.next();
         String objName = ncp.getName();
         String objClass = ncp.getClassName();
         Object objObj = ncp.getObject();

         ...
     }

단순히 Context내의 이름들과 클래스이름을 보고자 한다면 Context.list 메소드를 이용할 수 있다. Context.listNamingEnumeration를 리턴하지만, 그것이 담고있는 컬랙션은 Binding이 아닌 NameClassPair 타입이다. NameClassPair는 이름과 객체 클래스 이름만을 포함한다.

샘플애플리케이션을 배포하고 실행하는 방법은 샘플코드 실행하기 를 참고한다.

애플리케이션을 실행하면, 다음과 같은 시작페이지를 보게 된다.

jndichoice

컨텍스트를 입력하거나, 텍스트 필드를 빈 상태로 놔두고 명명된 컨텍스트의 컨텐츠를 보기 위해 List버튼을 클릭한다. 예를 들면 jdbc 의 엔트리는 다음과 같은 화면을 디스플레이한다.

jndilist

JNDI 에 관한 더 자세한 정보는 JNDI 튜토리얼를 참고한다.


출처 : 한국 썬 개발자 네트워크
TAG J2EE, Java, JNDI

정적 변수를 선언하는 방법들

2007/05/12 10:57 | Posted by DefineJAVA
크리에이티브 커먼즈 라이선스
Creative Commons License

정적 변수를 선언하는 방법


static을 이용하여 정적 변수를 선언할 떄 대부분 어떻게 사용하는가?

public class StaticTest
{
 private static int SIZE= 10;
 private static int[] myStatic = new int[SIZE];
}

대부분 이렇게 사용할 것이다.

myStatic이라는 배열을 만들었다. 그렇다면 이 myStatic에 값을 할 당할때 어떻게들 사용하는가?
myStatic은 배열이다. 배열에 값을 할당 할때 과연 어떻게 할 수 있을까?(반복문을 이용하는 방법중)
생성자를 만드는 방법도 있을것이고 메인메소드나 기타메소드에서 값을 할당 받는경우도 있다.
가장 쉽게 생각한 방법이 다음과 같은 두가지 방법일 것이다.

ex1)

more..

ex2)

more..



ex1같은 경우 main 메소드 같은 곳에서 처음 한번만 초기화 값을 넣는 방법과 ex2처럼 생성자를 만들어 객체를 생성하게 하여 사용하는 방법이 있을 것이다.
(필자는 두가지 방법밖에 몰랐었다. 하긴 지금은 몇가지를 더 알고 있으니깐 이글을 쓰는거겠지만...;;)

ex1 같은 경우를 보자! 일반 Application에서는 main메소드를 호출 하기 때문에 단 1번만 호출되면서 값이 활당된다. 그렇다면 웹어플리케이션에서는 어떨까?
당연히 힘들다.(불가능 한것은 아니다. init가 있기 때문에) web.xml을 수정하여하고 이래저래 복잡하다.
ex2 같은경우를 보자! 이와 같은 방법은 객체를 생성하여야 한다. 객체 생성으로 그만큼의 공간을 잡아 먹는 샘이다. 불필요한 공간을 계속 잡고 있을 테니 조금 문제가 될수있다.

두가지의 문제점을 해결 할 수 있는 방법이 필자가 소개할려고 하는 ex3 이다.
아는 사람도 많이 있겠지만 모르는 사람도 많을 것 같다.

바로 static block을 이용하는 방법이다. ex3을 보도록 하자!
ex3)

more..


ex3을 보면 static 블럭에 의해서 값들이 초기화 된다. 즉 객체 생성도 필요없고 특정 메소드에서 호출 할 필요도 없다는것이다.
이해가 잘 안된다면 static의 생성자 개념이라고 생각하면 될것이다. 물론 생성자는 아니다. 그냥 생각만 그렇게 하라는것이다.

오랜만에 강좌를 쓰다보니 앞뒤가 하나도 안 맞게 되었다. 다음에는 더 좋은 내용을 적어보도록해야겠다^ㅡ^


 

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

Jakarta Commons Lang 1. 살펴보기  (0) 2007/05/15
JNDI 소개  (0) 2007/05/14
정적 변수를 선언하는 방법들  (0) 2007/05/12
클래스? 인스턴스? 속성? 메소드? 객체?  (0) 2007/02/21
자바 예외처리(간단)  (1) 2007/02/21
자바의 접근제한자(한정자)  (1) 2007/02/14
크리에이티브 커먼즈 라이선스
Creative Commons License

① 클래스(Class)

2개 이상의 유사한 객체들을 묶어서 하나의 공통된 특성을 표현하는 요소, 즉 공통된 특성과 행위를 갖는 객체의 집합. 한 클래스를 기준으로 하여 그 기준 클래스의 상위 클래스를 슈퍼 클래스, 하위 클래스를 서브 클래스라고 함.

② 인스턴스(Instance)

하나의 클래스에 속하는 각각의 객체를 의미

③ 속성(Attribute)

한 클래스내에 속한 객체들이 가지고 있는 데이터 값들을 단위별로 정의하는 것으로서 성질, 분류, 식별, 수량 또는 현재 상태 등을 표현.

④ 메소드(Method)

객체의 정의된 연산을 의미 하며, 객체의 상태를 참조하거나 변경하는 수단이 됨.

⑤ 객체(Object)

속성과 이를 처리하기 위한 메소드를 결합시킨 실체로써 객체는 각각의 상태를 가지고 있음. 객체는 다른 객체들과 구별할 수 있는 이름을 가지고 있어야 하며 일정한 기억장소를 가지고 있음.

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

JNDI 소개  (0) 2007/05/14
정적 변수를 선언하는 방법들  (0) 2007/05/12
클래스? 인스턴스? 속성? 메소드? 객체?  (0) 2007/02/21
자바 예외처리(간단)  (1) 2007/02/21
자바의 접근제한자(한정자)  (1) 2007/02/14
상속  (0) 2007/02/13
이전 1 2 다음