Programming/HTML2011. 6. 20. 11:28

 소스와 설명

 미리보기

 1. <input> : 평범하게 글자이나 텍스트칸을 넣을 수있는 공간이 생기죠.

 

 2. <input type=""> : 기존의 input에다가 type를 지정하여 type의 옵션을 넣으면, 다양한 모양이 됩니다. 단 입력이나 기타등등의 모양 꼴로 변하죠.

 

 3. <input type="text"> : 이건 <input>과 동일한 것인데, text를 넣을 수있습니다.

 

 3-1 <input type="password">: 이건 1번과 2번과 3번과 동일한데, 비밀번호로 지정되어 글자를 넣든 숫자를 넣든 **** <-이렇게 표시됩니다

 

 4. <input type="checkbox"> : 이건 체크박스로 나타납니다.

 

 5. <input type="checkbox" checked> : 이건 체크박스의 선택된 것으로 나오죠.

 

 6. <input type="checkbox" checked disabled> : 이건 체크되었다가 다시는 선택 못하게 하는거죠

 

 7. <input type="radio"> : 이건 라디오 버튼으로 나타납니다.

 

 8. <input type="radio" checked> : 이건 라디오 버튼의 선택된 것으로 나오죠.

 

 9. <input type="radio" checked disabled> : 이건 선택되었다가 다시는 선택 못하게 하는거죠

 

 10. <input type="hidden"> : 이건 숨김필드입니다. 값을 넘겨받을때 숨김속성으로 몰래 감쳐지죠. 대부분 form태그의 중요한 속성을 사용할 때 하더군요.

 

 11. <input type="image" src="이미지 경로및 주소"> 이건 이미지의 경로를 넣어 일반<img>태그 처럼 할 수 있습니다. 단 버튼이 이미지의 경로로 바뀌고,form 태그의 submit태그와 함께 포함되어 있습니다.

 

 12. <input type="reset"> : 이건 초기화 하는 버튼(영어로 submit 또는 초기화라고 나옴)

 

 13. <input type="reset" value="초기화"> : value값에 초기화라고하면 초기화라고 만들어줌

 

 14. <input type="submit"> : 이건 전송버튼

 

 15. <input type="submit" value="전송함"> : 전송버튼인데다가 버튼이름을 전송함 이라고 할 수있음.

 

 16. <input type="file"> : 파일을 첨부 할때 사용하며, CSS와 곁들어서 사용 가능

 

 17. <input type="text" value="텍스트"> : 이렇게 사용하면 텍스트 칸에 텍스트 라고 글자가 이미 나와버림

 

 18. <input type="text" value="텍스트 사이즈 지정" size="20"> : 텍스트 사이즈를 20만큼 지정

 

 19. <input type="text" value="" name="text"> : php이나, 자바스크립트를 사용할때 변수를 넘거나 받을때 text라는 값을 받도록 name의 갑을 text라 지정하고 이 버튼의 태그 이름을 text라고 지정함

 

 20. <input type="text" value="" name="text" style="border-color:red;"> : 이건 CSS인데 여러모로 사용 할수있음. 굳이 설명을 하지 않겠음 CSS에서 color;red 라고 지정해주면, 텍스트칸의 글자색을 빨간색으로 지정해줌

 

 21. 버튼에 CSS를 첨가하여 이쁘게 꾸밀 수있다.
<input name="button" style="background-color:yellow;border-color:red;font-face:굴림;font-size:9pt;">

 

disabled의 속성과 maxlength="15"의 속성
disabled속성은 input의 선택을 못하게 막아준다

<input type="text" value="" disabled>
<input type="text" value="ㅋㅋㅋ 금지욧" disabled>
<input type="radio" value="" checked disabled>
<input type="checkbox" value="" checked disabled>

그리고 maxlength 속성은 최대 글자 입력넣을 수있는 제한수입니다.

<input type="text" value="" maxlength="20"> <--이렇게 하면 글자 입력수를 20자리만 입력가능


 글자제한과 폰트사이즈 지정 font-size:7pt;  
 인푸트폼의 넓이와 높이를 지정 width:150pt; height:12pt;  
 글자제한과 폰트사이즈와 백그라운드이미지 지정 background-image:url('test.gif');  

출처 : Tong - 쭈꿈님의 쭈꿈님의 기본통통

Posted by 신의물방울
Programming/JAVA2011. 6. 19. 13:40

POJO (Plain Old java Object) 를 해석하면 평범 자바 오브젝트라고 한다.
POJO를 이해 하기 전 POJO라는 단어가 만들어진 역사적 배경을 살펴볼 필요가 잇다. POJO는 마틴 파울러가 2000년 가을에 열렸던 어느 컨퍼런스의 발표를 준비하면서 처음 만들어낸 말이다. 마틴 파울러는 EJB(Enterprise JavaBean)보다는 단순한 자바 오브젝트에 도메인 로직을 넣어 사용하는 것이 여러가지 장점이 있는데도 왜 사람들이 그 EJB가 아닌 '평범한자바 오브젝트'를 사용하기를 꺼려 하는지에 대해 의문을 가졌다. 그리고 그는 단순한 오브젝트에는 EJB와 같은 그럴듯한 이름이 없어어서 그 사용을 주저하는 것이라고 결론 내렸다.
그래서 만든 단어가 POJO라는 용어인 것이다. POJO기반의 기술을 사용한다고 말하면 왠지 첨단 기술을 사용하는 앞선 개발자인 듯한 인상을 주기 때문인다.

POJO기반의 프로그래밍 기술이 EJB의 강력한 대안으로 등장했고 ,POJO 기반 프레임워크 ,POJO 애플리케이션을 위한 플랫폼 등이 점점 인기를 끌게 되었고, 결국 POJO가 배제하려고 했던 EJB는 POJO기반의 기술에 밀려 이제 레거시 기술로 사라질 위기에 처했다. 그렇다면 단지 EJB를 사용하지 않으면 모두 POJO라고 할 수 있을까? 그렇지 않다. POJO프로그래밍이라는 개념은 단지 "EJB가 아닌 자바"이상의 특징을 가지고 있는 프로그래밍 모델이다. POJO기반의 개발은 생각보다 단순하지 않다.
POJO를 좀더 이해하려면 EJB의 장단점을 함께 이해해야 한다. 그것은 POJO 프로그래밍이 다시 EJB시대이전으로 돌아 가자는 것이 아니고 ,EJB를 넘어 그보다 더 앞으로 나아가자는 것이기 때문이다.
EJB를 사용하지 말고 POJO를 쓰자는 것은 EJB이전의 방식으로 돌아 가는 것을 의미한다면 또 다른 문제가 발생 할 수 밖에 없다. 여전히 복잡한 로우레벨의 API를 이용해 코드를 작성해야 하고, 많은 기술적인 문제를 애플리케이션 코드에 그대로 노출시켜 개발해야 한다면 기껏 POJO로의 복귀 덕분에 얻는 많은 장점들을 놓칠 수 밖에 없다.

그래서 등장한 것이 POJO 기반의 프레임워크이다. POJO프레임워크는 POJO를 이용한 애플리케이션 개발이 가진 특징과 장점을 그대로 살리면서 EJB에서 제공하는 엔터프라이즈 서비스와 기술을 그대로 사용할 수 있도록 도와주느 프레임워크이다. 나아가 이는 기존의 EJB에서보다 훨씬 더 세련되고 나은 방법이다. 데표적인 프레임웤 스프링 하이버네이트~!

참고로 스프링은 엔터프라이즈 서비스들을 POJO기반으로 만든 비지니스 오브젝트에서 사용할 수 있게 한다. 대표적인 선언적인 트랜잭션 서비스와 보안이다. 또한 EJB와 마찬가지로 오브젝트 컨테이너를 제공해서 인스턴스의 라이프사이클을 과리하고 필요에 따르 스레딩, 풀링 및 서비스 인젝션 등의 기능을 제공한다. 또한 OOP를 더 OOP답게 사용 할 수있게 하는 AOP기술을 적용해서 POJO개발을 더 쉽게 만든다.

POJO프로그램의 진정한 가치는 자바의 객체지향적인 특징을 살려 비지니스 로직에 충실한 개발이 가능 하도록 하는것이기도 하다.

내생각을 적자면
평범한 자바 객체로 프로그래밍 하기라고 부르며, 침략적인 코드를 적지 않은 것이다.
쉽게 말해 implement 와 extends를 사용 하지 않으며
콤포지션과 인터페이스타입으로 프로그래밍 하는것(이건 레디 존슨)

특정 클래스의 concrete class가 되면 안되고, 구현 체도 되면 안된다.
Posted by 신의물방울
Programming/JAVA2011. 6. 19. 12:32

# 1. Beans(강남콩)의 이해
- JSP Page 상에 나열되는 자바 처리 로직은 디자인 코드와 함께 매우 복잡한 코드를 구성합니다.
이로 인해 디자인 변경시 자바코드가 영향을 받아 오류가 자주 발생되며, 코드 수정시 코드를 알아볼 수
없어 유지보수가 매우 힘이 듭니다.
이러한 반복되는 자바 코드들을 JAVA 파일안에 저장하여 사용하는 형태를 빈즈라고 합니다.
- 확장자는 *.java입니다. 컴파일하여 .class 형태로 배포합니다.
- 메모리에 생성된 Beans(DTO)는 다른 자바 클래스(DAO, Business Logic)에 의하여 사용됩니다.
- Beans는 dll과 같은 원리를 가지고 있습니다.
- Beans는 sun에서 제시한 작성 규칙이 존재합니다.

# 2. DTO(Data Transfer Object : 데이터 전송 객체, value Object) Beans
- 폼에서 입력된 데이터들은 하나의 DTO 객체로 변환 될 수 있습니다.
- 하나의 데이터베이스 레코드를 저장하며 레코드와 같은 구조를 가지고 있습니다.
- 하나의 레코드는 Beans 클래스 객체 하나로 매핑됩니다.

1) 필드 선언 (멤버 변수, 인스턴트 변수)
- 하나의 컬럼 값을 저장
- 보안성 및 캡슐화, 데이터 은닉의 목적으로 private를 선언합니다.
ex) private String name;

2) setter
- 필드에 값을 저장하는 기능을 합니다.
- HTML 폼의 INPUT 태그의 값을 빈에 저장하는 역할을 합니다.
- 메소드 명은 set + input 태그의 이름 중 첫자를 반드시 대문자로 사용하는 규칙을 적용해 태그명을 지정
합니다. 따랏 HTML에서 input 태그의 이름은 영문 소문자로 사용하여 태그의 이름에 신중을 기해야
합니다,

예1)
<input type="text" name="id" size="15" value='user1'>
<input type="text" name="addr" size="15" value='user1'>

public void setId(String id) {
this.id = id;
}

public void setAddr(String addr) {
this.addr = addr;
}

3) getter
- 인스턴스 변수의 값을 가져오는 기능을 합니다.

예1) public String getName() {
return name;
}

# 3. DAO(Data Access Object : 데이터 접근 객체t) Beans
- DTO 객체를 만들어 편집 및 조작을 합니다.
- DTO를 데이터베이스 서버에 저장하기도 하고, 데이터 베이스 서버로부터 레코드를 Select해 DTO 객체로
변경해 가져오기도 합니다.
- Insert, delete, upadate, select 등 데이터 처리를 주 목적으로 ㅎ바니다.

# 4. Manager Class(관리 클래스, MGR)
- DTO와 DAO 사이에서 연결 및 처리 역할을 합니다.
DreamWeaver Eclipse DbEdit
(*.html, *.jsp) (*.java) (*.sql)
----------- ------------------------ -------------
JSP <-----> Manager Class <-----> DAO <-----> Oracle
↑ ↑
│ │
└--------------------------------┘
DTO
계층간 데이터 전송 객체

# 5. Beans의 사용 Scope(범위)
- page : 기본값, page를 벗어나면 자동으로 소멸합니다.(중요)

- request : forward, include에서 사용 가능, 약간 사용됩니다..

- Session : 사용자가 로그인해 있는 동안 계속적으로 살아 있습니다.
메모리 소모가 심함으로 필요한 곳에 적절히 사용해야 됩니다.
쇼핑카드 구현등 객체를 지속적으로 유지해야하는 경우에 사용됩니다.
사용자가 브라우저를 닫으면 고나련 JSP session Bean은 소멸됩니다.(중요)

- Application : 웹 사이트 전체, 모든 사용자에게 영향을 미치는 빈
메모리 소모가 심함으로 많이 사용하지 않고, 서버가 운영되는 동안 객체가 살아있습니다.
모든 사용자가 변수와 객체를 공유하게 됩니다.
서버를 재 시작해야 변수들이 재 설정됩니다.

Posted by 신의물방울
Programming/JAVA2011. 6. 19. 12:27

EJB 아키텍처 개요

1. 자바언어로 분산 객체 형태의 비즈니스 애플리케이션을 개발하기 위한 표준 컴포넌트 아키텍처이다.

2. 자바로 분산 객체 형태의 엔터프라이즈용 비즈니스 애플리케이션을 쉽게 만들기 위해서 EJB 아키텍처가 만들어졌다.

3. 일반적으로 비즈니스 애플리케이션은 크게 프로세스와 데이터 부분으로 나뉜다. 프로세스라는 것은 비즈니스 업무의 단위이며 데이터는 업무를 수행하기 위해 필요한 데이터 및 정보들을 의미하며, EJB 아키텍처는 비즈니스 애플리케이션의 프로세스데이터를 안정적으로 처리하기 위한 모델을 제시한다. EJB 아키텍처에서 프로세스세션 빈(Session Bean)”, “데이터엔티티 빈(Entity Bean)” 이라는 EJB 컴포넌트들이 담당하게 된다.

4. EJB 애플리케이션 서버의 구조

EJB 컴포넌트는 개발자들이 관련 소스 코드를 작성하여 컴파일하고 개발한다.

그 후 EJB 컴포넌트들이 실행될 때 자동으로 관리되어야 할 트랜잭션, 보안, 자원 관리등의 내용을 XML 문서(디플로이먼트 디스크립터)로 작성하여 EJB 애플리케이션 서버에 컴포넌트와 같이 플러그인(plugin) 한다. (플러그인이란 EJB 컴포넌트를 EJB 컨테이너 안에 설치하는 것을 의미하며 다른 말로 이 과정을 디플로이먼트(deployment)”라고 한다.)

출처 :

엔터프라이즈 자바빈즈

JStorm

대청 2001.06.01

출처 : http://blog.naver.com/joonghyune



EJB란

EJB가 생겨난 배경

서버측에서 어플리케이션을 개발할 경우, 이하와 같은 문제가 있다.

・종래의 어플리케이션에서 필요로 하는 비지니스로직 뿐만 아니라, 시스템 서비스를 이용한 데이터베이스처리와 트랜젝션처리의 프로그램이
필요로 하기 때문에 어플리케이션의 개발에 시간이 걸린다.
・각각의 어플리케이션 서버에서는 독자의 API가 제공되고 있기 때문에 각사의 API를 사용해서 작성한 어플리케이션에는 이동성이 아니고 부품화가 곤란함

이같은 문제를 해결해서, 서버 어플리케이션의 생산성의 향상과 이동성을 실현하기 위해서 생겨난 것이 Enterprise JavaBeans(EJB)이다.

EJB의 개요
Enterprise JavaBeans(EJB)는 독립한 부품이 아닌, 미국 Sun Microsystems사가 제창한 규약이다.

EJB는 서버 어플리케이션의 개발을 용이하게해 다중다양한 Platform과 제품간의 이동성을 실현하기 위하여
이하와 같은 비지니스로직과 시스템 서비스를 이용하는 로직을 분산해 그 사이의 규약을 규정하고 있다.

비지니스 로직을 탑제한 부품을 "Enterprise Bean"이라고 불린다. Database처리, Transaction처리등의 시스템 서비스를 이용한
로직을 감추고 있는 부품을 "컨테이너"라고 불린다.

EJB를 이용함으로 인해 개발자는 어플리케이션개발시에 비지니스 로직의 개발만 전념하는 것이 가능하다.

또, EJB의 한가지 특징은 Enterprise Bean의 "Deployment"를 행하는 것이다. Deployment를 행하는 것에는 Enterprise Bean은 컨테이너에
설치된 실행가능한 상태로 된다. Deployment를 행하는 것으로 인해 각사의 여러가지 EJB제품상에서 Enterprise Bean을 동작시키는 것이 가능하게 된다.

EJB에는 "deployment descriptor"에 의한 Enterprise Bean이 갖는 각종의 속성값을 지정하는 것이 가능하다.
deployment descriptor의 내용을 변경하는 것에서 Enterprise Bean의 소스 코드를 변경하는것이 아니고 각각의 환경과 니즈에 의한 운영환경을 카스타마이즈하는 것이 가능하다.

EJB의 도입효과
EJB에는 지금까지 설명한것과 같은 큰 2가지의 특징이 있다.
・어플리케이션 개발이 용이
・어플리케이션에서 이동성이 있다.

이것들의 특징을 활발히 함으로 인해서 서버 어플리케이션을 보다 빠르게 구축하는 것이 가능해 졌다.
이러한 EJB를 도입하는 것에 의해 서버 어플리케이션 개발의 생산성이 향상되어 서버 어플리케이션 개발 비용이 삭감하는 것이 가능하다.

EJB의 기본구성
EJB는 이하의 4개의 요소로 구성되어 있다.

1. Enterprise Bean
2. Container
3. EJB Server
4. Client Application

이 4가지 요소중 어플리케이션 개발자가 용이한 것은 Enterprise Bean과 client application의 2가지이다.

■Enterprise Bean
비지니스 로직을 실장한 서버 컴포넌트이다.
Enterprise Bean에는 이하의 2가지의 모델이 있다.
1. Session Bean
2. Entity Bean

"Session Bean"는 클라이언트의 대화처리를 실현하는 OBject이다.
"Entity Bean"는 Database에 격납된 레코드를 Object로서 뽑아내거나 격밥하기 위하여 이용하는 Object이다.

일반적으로는 클라이언트가 Session Bean을 불러 Session Bean이 Entity Bean을 불르는 것으로 데이터베이스에 접근을 행한다.

■Container
EJB서버와 Enterprise Bean의 중간에 위치해, 클라이언트 어플리케이션은 그 컨테이너를 경유해서 Enterprise Bean에 접근한다.
컨테이너가 데이터베이스처리와 트랜젝션처리등을 숨기기위해 개발자와 그것들을 의미하지 않는 어플리케이션을 개발하는 것이 가능하다.

■EJB Server
EJB서버는 컨테이너를 관리해서 EJB로서 필요한 시스템 레벨의 서비스( 데이터베이스 처리, 트랜젝션 처리등)을 실현한다.

■Client application
EJB에 준거한 클라이언트 어플리케이션이다.
Java Applet, Java Application, Servlet, JavaServer Pages(JSP) 베이스의 어플리케이션등이 있다.

Enterprise Bean의 기본동작

Enterprise Bean의 기본동작을 설명한다.

클라이언트부터 서버의 Enterprise Bean에의 접근은 컨테이너를 경유해서 행한다.
컨테이너는 Enterprise Bean의 대리가 되는 "EJB object"와, EJB object의 생성/삭제를 행하고 "EJB home"을 의미한다.
클라이언트는 컨테이너가 갖는 이 두가지 object를 통해서 Enterprise Bean에 접근한다.

이하의 클라이언트가 컨테이너를 통해서 Enterprise Bean에 접근할 때의 흐름을 나타낸다.

1. JNDI의 lookup메소드에서 EJB home을 검색한다.

2. 클라이언트가 습득한 EJB home에 대해서 create 또는 find메소드를 호출하면 컨테이너가 Enterprise Bean의 대리 object에 있는
EJB object를 생성한다. 이 때, 컨테이너 내부에는 실제로 비지니스 로직이 갖춰져있는 Enterprise Bean의 인스턴스가 생성된다.

3. 클라이언트는 Enterprise Bean의 대리가 되는 EJB object의 비지니스 메소드를 호출한다. 컨테이너가 그것을 중개해서
Enterprise Bean의 메소드를 호출한다.

실현환경
EJB서비스에는 EJB의 컨테이너라고 하는 개념이 포함되어 있다. 컨테이너는 EJB 어플리케이션을 넣기 위한 용기이다.
개발환경에서 작성된 EJB 어플리케이션은 전개된 후 서버에 전송하는 컨테이너에 설치하는 것에 의해 실행가능한 상태로 된다.
EJB어플리케이션을 전개하는 것을 "Deployment"라고 한다.

Posted by 신의물방울
Programming/JAVA2011. 6. 17. 09:56
CalculTest.java
public class CalculTest {
    public static void main(String args[]){
        //calculTest ct= new calculTest();
        CalculModel calModel = new CalculModel();
        CalculControler calCon = new CalculControler(calModel);
    }
}

CalculModel.java
public class CalculModel {
    CalculControler calCon;

    String num1; //기존의 수
    String num2; //새로 받은 수
    String oper; //연산자

    boolean inputNumberAbleStatus;  // 화면에 숫자가 새로 받아지는걸 허용/비허용
    boolean selectedOperStatus;     // 연산자 버튼을 눌럿는지 안 눌렀는지
    boolean pointExist;             // .을 눌럿는지 안 눌럿는지
    //생성자
    CalculModel(){
        num1="0";
        num2="0";
        oper="";
        inputNumberAbleStatus=true;
        selectedOperStatus=false;
        pointExist=false;
    }
    //숫자 입력 받앗을때
    public void inputNumber(String num){
        if(!num.equals("Number not divide 0")){
            if(num.equals(".")){
                if(pointExist) num="";
                if(inputNumberAbleStatus){
                    inputNumberAbleStatus=false;
                    calCon.setView("0"+num);
                }else{
                    calCon.setView(getView()+num);
                }
                pointExist=true;
            }else{
                if(inputNumberAbleStatus){
                    inputNumberAbleStatus=false;
                    setView(num);
                }else{
                    setView(getView()+num);
                }
            }
        }
    }
    //기호 입력 받앗을때
    public void inputOper(String oper){
        if(selectedOperStatus){
            num2=getView();
            if(!num2.equals("Number not divide 0")){
                num1=operation(this.oper, num1, num2);
                this.oper=oper;
                setView(num1);
                inputNumberAbleStatus=true;
                pointExist=false;
            }
        }else{
            this.oper=oper;
            num2=getView();
            num1=operation(oper, num2, num1);
            selectedOperStatus=true;
            inputNumberAbleStatus=true;
            pointExist=false;
        }
    }
    // Clear버튼  눌럿을때
    public void inputClear(){
        num1="0";
        num2="0";
        oper="";
        setView("0");
        inputNumberAbleStatus=true;
        selectedOperStatus=false;

    }
    // 연산자 처리 부분 로직
    public String operation(String oper, String num1, String num2){
        switch(oper.charAt(0)){
        case '+': 
            num1=""+(Double.parseDouble(num1)+Double.parseDouble(num2));
            return num1;
        case '-': 
            num1=""+(Double.parseDouble(num1)-Double.parseDouble(num2));
            return num1;
        case '*':
            if(selectedOperStatus)
                num1=""+(Double.parseDouble(num1)*Double.parseDouble(num2));
            return num1;
        case '/':
            if(selectedOperStatus&&num2.equals("0")){
                num1="Number not divide 0";
                oper="";
            }
            if(!num2.equals("0"))
                num1=""+(Double.parseDouble(num1)/Double.parseDouble(num2));
            return num1;
        case '=':
            num1=num2;
            oper="";
            return num1;
        default:
            return num1;
        }
    }
    //소수점이 .0일때 뒤에 .0을 제거하여 정수형으로 나타냄
    public String removePointZero(String numWithPoint){
        String newNum="";
        int pointIdx=0;
        int zeroIdx=0;
        if(numWithPoint.equals("-0")) return "0";
        if(numWithPoint.length()<3) return numWithPoint;
        if(numWithPoint.charAt(numWithPoint.length()-2)
                =='.'&&numWithPoint.charAt(numWithPoint.length()-1)=='0'){
            for(int i=0;i<numWithPoint.length()-2;i++){
                newNum+=numWithPoint.charAt(i);
            }
            return newNum;
        }else
            return numWithPoint;


    }
    //뷰의 필드값 세팅/게팅
    public void setView(String s){calCon.setView(removePointZero(s));}
    public String getView(){return calCon.getView();}
}

CalculControler.java
public class CalculControler {
    CalculView calView;
    CalculModel calModel;
    public CalculControler(CalculModel calModel) {
        this.calModel=calModel;
        calModel.calCon=this;
        calView = new CalculView(this);
        calView.setBounds(600,400,300,200);
        calView.setResizable(false);
        calView.setVisible(true);
    }
    // 숫자버튼.기호버튼,Clear버튼을 구분
    public void inputNumber(String num){calModel.inputNumber(num);}
    public void inputOper(String oper){calModel.inputOper(oper);}
    public void inputClear(){calModel.inputClear();}
    // 계산기창 필드의 값을 setting / getting
    public void setView(String s){calView.setView(s);}
    public String getView(){return calView.getView();}
}

CalculView.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class CalculView extends JFrame {
    CalculControler calCon;
    JPanel pCalView, pCalButton;
    JLabel vCalView;
    JButton numButton[], operButton[];
    JButton bZero, bOne, bTwo, bThree, bFour, bFive, bSix, bSeven, bEight, bNine, bPoint; 
    JButton bPlus, bMinus, bMultiply, bDivide, bEquals; 
    JButton bClear;

    GridBagConstraints gbc;
    GridBagLayout gbl;

    CalculView(CalculControler calCon){
        this.calCon=calCon;
        //this.calModel=calModel;
        

        //타이틀과 배치관리자를 설정
        Container con = getContentPane(); 
        this.setTitle("이상한 계산기");
        con.setLayout(new BorderLayout());
        //뷰 패널 생성 및 배치관리자 설정
        pCalView = new JPanel();
        pCalView.setLayout(new BorderLayout());
        //계산 뷰 텍스트창 생성
        vCalView = new JLabel("0");
        vCalView.setHorizontalAlignment(JLabel.RIGHT);
        vCalView.setBackground(Color.WHITE);
        vCalView.setFocusable(false);
        //뷰 패널에 계산 텍스트 창 합치기
        pCalView.add(vCalView);

        //프레임에 부착
        this.add(pCalView, "North");

        //계산 패널 생성
        pCalButton = new JPanel();
        //숫자 버튼 생성
        bZero = new JButton("0");
        bOne = new JButton("1");
        bTwo = new JButton("2");
        bThree = new JButton("3");
        bFour = new JButton("4");
        bFive = new JButton("5");
        bSix = new JButton("6");
        bSeven = new JButton("7");
        bEight = new JButton("8");
        bNine = new JButton("9");
        bPoint = new JButton(".");
        //리스너 부착
        setNumberButton(bZero, bOne, bTwo, bThree, bFour, bFive, bSix, bSeven, bEight, bNine, bPoint);

        //연산자 버튼 생성
        bPlus = new JButton("+");
        bMinus = new JButton("-");
        bMultiply = new JButton("*");
        bDivide = new JButton("/");
        bEquals = new JButton("=");
        //리스너 부착
        setOperButton(bPlus, bMinus, bMultiply, bDivide, bEquals);
        
        //Clear버튼 생성
        bClear = new JButton("C");
        setClearButton(bClear);
        //리스너부착
        setPanelButton();
        
        //배치관리자 버튼 부착
        this.add(pCalButton, "Center");

        addWindowListener(new WindowAdapter(){
            public void windowClosing(WindowEvent evt){
                dispose();
                System.exit(0);
            }
        });
    }
    //리스너 부착 메소드
    public void setNumberButton(JButton ...numButtonArr){
        numButton=numButtonArr;
        for(JButton numB : numButton)
            numB.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent ae) {
                    calCon.inputNumber(ae.getActionCommand());
                }
            });

    }
    //    리스너 부착 메소드
    public void setOperButton(JButton ...operButtonArr){
        operButton=operButtonArr;
        for(JButton operB : operButton)
            operB.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent ae) {
                    calCon.inputOper(ae.getActionCommand());
                }
            });
    }
    //    리스너 부착 메소드
    public void setClearButton(JButton clearButton){
        clearButton.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e) {
                calCon.inputClear();
                
            }
        });        
    }
    // 레이아웃 메소드    
    public void setPanelButton(){
        gbl = new GridBagLayout();
        pCalButton.setLayout(gbl);
        gbc=new GridBagConstraints();
        gbc.weightx=1.0;
        gbc.weighty=1.0;
        gbc.fill=GridBagConstraints.BOTH;

        layout(bClear, 0, 0, 1, 1);
        layout(bDivide, 1, 0, 1, 1);
        layout(bMultiply, 2, 0, 1, 1);
        layout(bMinus, 3, 0, 1, 1);

        layout(bSeven, 0, 1, 1, 1);
        layout(bEight, 1, 1, 1, 1);
        layout(bNine, 2, 1, 1, 1);
        layout(bPlus, 3, 1, 1, 2);

        layout(bFour, 0, 2, 1, 1);
        layout(bFive, 1, 2, 1, 1);
        layout(bSix, 2, 2, 1, 1);

        layout(bOne, 0, 3, 1, 1);
        layout(bTwo, 1, 3, 1, 1);
        layout(bThree, 2, 3, 1, 1);
        layout(bEquals, 3, 3, 1, 2);

        layout(bZero, 0, 4, 2, 1);
        layout(bPoint, 2, 4, 1, 1);

    }
    public void layout(Component obj, int x, int y, int width, int height){
        gbc.gridx = x;
        gbc.gridy = y;
        gbc.gridwidth = width;
        gbc.gridheight = height;
        pCalButton.add(obj, gbc);
    }
    //필드값을 세팅,게팅
    public void setView(String s){vCalView.setText(s);}
    public String getView(){return vCalView.getText();}
}

//분석하자!! 
Posted by 신의물방울
Programming/Database2011. 6. 16. 17:53

*오라클 설치 
administrator : sys  or system --> 패스워드 : oracle 
*오라클 설치후 제어판-관리도구-서비스- Oracle 관련 수동으로 설정 ,
  시작 - 오라클 - 데이터베이스로 시작  으로 오라클을 실행 
*오라클 데이터베이스에서 자신의 계정 만들기 
  시작 - 오라클 - 오라클 홈페이지로 이동 메뉴 선택 후
  웹 페이지 뜨면 system , oracle 계정으로 접속 -> 관리 탭 -->데이터베이스 사용자
  -->사용자 생성 --> pm , oracle 계정에 모든 권한 선택 후 생성해서 
  다시 로그인 한다. 
*오라클 jdbc 드라이버를 java 실행 환경에 설정하기 
 C:\oraclexe\app\oracle\product\10.2.0\server\jdbc\lib\ojdbc14.jar 를 copy,
 C:\Program Files\Java\jdk1.6.0_20\jre\lib\ext\ 밑에 paste
 
*오라클을 이클립스에서 사용하기 위한 연동 설정하기 
oracle 과 eclipse 연동을 위한 tip
       java EE perspective 로 이동 - Data Source explorer 하단 탭을 이동  
       오른쪽 마우스 클릭  - new - new Connection Profiles - Oracle 선택 - 이름 oracle로
       입력 - Driver 선택 창 - 오른쪽 상단부 New Driver Definition을 클릭 -
       Name/Type 탭에서 Oracle Thin Driver 10 을 선택 후 - Jar list 탭에서 
       Add Jar/zip 선택후 - C:\Program Files\Java\jdk1.6.0_20\jre\lib\ext\ojdbc14.jar를
        선택 - Properties 탭의 Properties 의 connection Url 을 
       jdbc:oracle:thin:@127.0.0.1:1521:xe 로 입력 , Database Name을 xe로 입력 
       User ID 를 am, Password를 oracle로 입력한다. 
       설정 마치고 Test Connection으로 테스트 후 성공하면 연결이 OK!! 
       .sql 파일로 이동하여 type:Oracle_10 , Name:oracle , Database : xe 를 설정하고 
       query 실행해본다. --> query 실행시 영역 선택하고 
       Execute Selected Text로 주로 사용
-- 테이블 생성하기 
create table member(
 id varchar2(50) primary key, -- primary key : 유일키  unique+not null 속성 
 password varchar2(50) not null, -- not null 제약 조건 : null 값은 허용 안됨. 
 name varchar2(50) not null,
 address varchar2(50)
)
-- 현 데이터베이스에서 table 을 모두 확인하기 
select * from tab;

insert into member values('java','1234','보아','종로');

insert into member values('spring','4321','한효주','강남');

select * from member;

 

 

 

 

jdbc에서 Connection 연결이 안될때...

1. cmd창에서 lsnrctl status 입력후 호스트 명과 url에 입력해야할값이 맞는지 바교

2 호스트명바꾸기(한글명...)

HKEY_LOCAL_MACHIN  -> SOFTWARE -> Microsoft -> Windows NT -> CurrentVersion

에 들어가서 호스트가 한글로 되어있으면 영어로 수정..

 

3.여기까지 햇는데 안됬을경우는....

C:\oraclexe\app\oracle\product\10.2.0\server\NETWORK\ADMIN 들어간후 텍스트파일로 열고

listener.ora 와 tnsnames.ora 의 호스트를 영어로 변경후 저장..!

 

나같은경우는 한글호스트라서 jdbc가 안됬었다능..

Posted by 신의물방울
Programming/Database2011. 6. 16. 17:51
Posted by 신의물방울
Programming/JAVA2011. 6. 16. 15:48

제네릭 ver 5.0부터 지원

제네릭은 데이터형을 정하지 않는것을 의미하고 데이터형은  값을 넘겨준후 데이터형이 결정된다.

 

 


package com.test0518;

class Demo2<T>{ //<T> 제네릭클래스 : 자료형이 결정되지 않은것이 있다.
 private T n;
 public void set(T t){
  this.n = t;
 }
 
 public T get(){
  return n;
 }
}

public class Test2 {
 public static void main(String[] args){
  Demo2 ob1 = new Demo2();   //Object이용 : 오브젝트이용시 가져와 대입할때는 반드시 캐스팅
  ob1.set("자바");
  //ob1.set(200);//아래에서 런타임 오류
  String s = (String)ob1.get(); //ob1.set(200); 의 경우 Integer형을 String로 캐스팅하려고 했기때문에...
  System.out.println(s);
  
  Demo2<Integer> ob2 = new Demo2<Integer>();  //제네릭이용
  ob2.set(100);
  Integer i = ob2.get();
  System.out.println(i);
  
  Demo2<Double> ob3 = new Demo2<Double>();
  ob3.set(10.0);
  Double d = ob3.get();
  System.out.println(d);
 }

}

Posted by 신의물방울
Programming/JAVA2011. 5. 27. 14:16

@1. Servlet은 Java 소스에 HTML 코드가 삽입된다.

      JSP는 반대로 HTML코드에 Java코드가 삽입된다.

 

@2. Servlet class는 컴파일과정과 등록 과정이 필요하지 하지만 JSP는 필요 없다.

 

@3. Servlet 보다는 JSP 디자인과 로직에 대한 구분이 명확해서 유지보수가 용이하다.

 

@4. 간단한 로직을 구현할 때는 JSP가 더 간편하다.

      하지만 복잡한 로직을 구현할 때에 HTML 중심의 코드가 이해하기 어렵게 만들수 있고, 프로그래밍 언어를 모르는 사람이 실수로 중요한 코드를 건들 우려도 있다. 그리고 힘들게 개발한 로직의 유출을 막기 위해서도 Servlet 기술이 필요하게 된다.

  => 그래서 요즘은 JSP 기술과 Servlet 기술을 혼용한 새로운 프로그래밍 방법이 권장되고 있다. 프로그램의 기능을 구현하는 복잡한 로직은 서블릿 클래스 안에 기술하고, 그 결과를 가져다가 출력하는 일만 JSP 페이지가 담당하도록 만드는 방법이다.(아래의 예제 참고)

 

 

 

@ JSP와 Servlet 기술을 혼합해서 작성한 웹 애플리케이션

 

// ch01.Ex02_SumServlet.java 파일

 

package ch01;

import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Ex02_SumServlet extends HttpServlet {  
 private static final long serialVersionUID = 1L;

 public void doGet(HttpServletRequest request, HttpServletResponse response) 
   throws ServletException, IOException {  
  
  int total = 0;
  for (int cnt=1; cnt<=100; cnt++)
   total += cnt;  
  request.setAttribute("result", total);  // 위의 total 변수의 값을 "result"에 넣어서 jsp파일에서 사용할 수 있도록 한다.
  RequestDispatcher rd = request.getRequestDispatcher("ch01/ex02_sum.jsp");  // jsp 페이지 호출 // RequestDispatcher : 요청을 보내주는 인터페이스 (참고 : http://famlilia.blog.me/100092297572)
  rd.forward(request, response);  
  // forward : forward는 request, response객체를 모두 다 전달하기 때문에 이동된 페이지(또는 서블릿)에서도 request와 response객체를 이용해서 파리미터를 받아서 처리할 수 있다.
  // 참고 http://blog.naver.com/seektruthyb/150109008317
 }
}

 

 

 

 

// WebContent/WEB-INF/web.xml 파일에 servlet 등록

 

  <!-- Ex02_SumServlet.java 등록 -->
  <servlet>
   <servlet-name>ch01_ex02</servlet-name>
   <servlet-class>ch01.Ex02_SumServlet</servlet-class>
  </servlet>
  <servlet-mapping>
   <servlet-name>ch01_ex02</servlet-name>
   <url-pattern>/ch01_ex02</url-pattern>
  </servlet-mapping>
  
 

 

 

 

// WebContent/ch01/ex02_sum.jsp

 

<%@ page contentType="text/html; charset=UTF-8" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
1부터 100까지의 합은? ${result }
</body>
</html>

 

 

 

 

// 실행화면

 

http://localhost:9090/hanb_jsp_servlet/ch01_ex02

 

 

 

출처 : 한빛미디어 - 뇌를 자극하는 JSP & Servlet p24~30 

Posted by 신의물방울
Programming/JAVA2011. 5. 25. 14:17

이클립스 ctrl+space를 눌렀을때...어시스트 내용이 안보입니다.     




그림같이 치고 ctrl+space를 눌렀을때 str시작되는 내용이 창에 보여야 하는데 보이지 않네요.

No Default Proposals, No Template Proposals 이라고만 뜨네요.

어떻게 해야 해결이 되나요?

 

답변

re: 이클립스 ctrl+space를 눌렀을때...어시스트 내용이 안보입니다.

waitto
답변채택률 0%
2008.07.29 15:47
 

이클립스 메뉴바에서 Window 를 클릭하면 맨 아래에 preferences ...이 있습니다.

그걸 클릭하면 popup창이 하나 뜹니다.

거기서 왼쪽 맨 위 텍스트창에 type filter text 라고 써있는데 그걸 지우고

advenced라고 써보세요

그러면 아래 그림처럼 나옵니다

왼편 맨아래 파란색으로 보이는 Advaced를 클릭하면 그림처럼 오른편에 체크박스가 나옵니다.

필요한 부분을 체크해주면 됩니다. 저는 모두 체크 했습니다.

그럼 ctl+space 하면 asist가 잘 나옵니다.

 

 

 

출처 : 네이버지식인 

Posted by 신의물방울