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 신의물방울
Programming/Database2011. 5. 23. 16:51
Posted by 신의물방울
카테고리 없음2011. 5. 22. 20:38

Posted by 신의물방울
Programming/JAVA2011. 5. 9. 10:18
숫자 123 과 문자열 "123"은 다릅니다.

숫자 123에 1을 더하면 124 가 되지만, 문자열 "123"에 1을 더하면 "1231"이 되어 버립니다.

따라서 문자열로 된 숫자가 숫자 구실을 하도록 하려면, 그 문자열을 숫자로 변환해 주어야 합니다.


문자로 된 숫자를, 진짜 숫자로 변환 예제


소스 파일명: Foo.java
public class Foo {
  public static void main(String args[]) {


    String s = "1000";                      // 문자열 정의



    int i = Integer.parseInt(s) + 1;        // 32비트 정수로 그리고 1을 더하기
    System.out.println(i);                  // 출력: 1001



    long L = Long.parseLong(s) + 1;         // 64비트 정수로 그리고 1을 더하기
    System.out.println(L);                  // 출력: 1001


    float f = Float.parseFloat(s) + 1.0F;   // 32비트 실수로 그리고 1을 더하기
    System.out.println(f);                  // 출력: 1001.0


    double d = Double.parseDouble(s) + 1.0; // 64비트 실수로 그리고 1을 더하기
    System.out.println(d);                  // 출력: 1001.0

  }
}


전화 번호나 주민등록번호 등도 실은 숫자가 아니라 문자열입니다. 왜냐하면 전화번호에 1을 더하거나 하는 사칙연산을 해 봐도 아무 의미가 없기 때문입니다. 물론 더해지지도 않겠지요.

Posted by 신의물방울