서블릿 정리

개발 및 관리/Java 2013. 2. 4. 17:06 posted by HighLighter
반응형

 

1. 서블릿은 HTTP(웹) 서버에서 돌아가는 자바 클래스다.

 

2. 서블릿은 웹 페이지를 통한 클라이언트와의 상호작용의 결과로 서버에서 돌아가는 코드로 쓰인다. 예를 들면, 클라이언트에서 웹 페이지 폼의 형태로 정보를 제공하면 서블릿에서는 그 정보를 처리하고 데이터베이스에 추가한 다음 그 내용을 확인해주는 답변 페이지를 보내줄 수 있다.

 

3. 서블릿을 컴파일하려면 servlet.jar 파일에 들어있는 서블릿 패키지가 필요하다. 서블릿 클래스는 자바 표준 라이브러리에 포함되어있지 않기 때문에 java.oracle.com에서 servlet.jar를 다운로드 받거나 서블릿 기능이 있는 웹 서버에서 복사해와야 한다.

 

4. 서블릿을 실행하려면 apache.org에서 제공하는 톰캣과 같은 서블릿을 실행시킬 수 있는 웹 서버가 필요하다.

 

5. 서블릿은 웹 서버에서 지정한 위치에 저장해야 하므로 서블릿을 실행시키기 전에 어디에 저장해야 하는지 알아야 한다. 서블릿을 지원하는 ISP에 웹사이트를 호스팅하고 있다면 ISP에서 어떤 디렉토리에 서블릿을 저장해야 하는지 알려 줄 것이다.

 

6. 일반적으로 서블릿을 만들 때는 HttpServlet을 확장하고 doGet()이나 doPost()와 같은 서블릿 메소드를 오버라이드한다.

 

7. 웹 서버에서는 클라이언트의 요청에 따라 서블릿을 시작하고 적당한 메소드(doGet() 등)를 호출한다.

 

8. 서블릿에서는 doGet() 메소드의 response 매개변수로부터 얻은 PrintWriter 출력 스트림을 받아서 적절한 응답을 돌려보낼 수 있다.

 

마지막으로, 서블릿과 JSP는 자바 언어에 표함된 것이 아니고 표준 확장(standard extension)으로 간주된다. 서블릿과 JSP를 돌리려면 서블릿, JSP가 지원되도록 설정된 웹 서버와 서블릿 '컨테이너'가 필요하다.

 

*****서블릿과 JSP에 대한 자세한 내용을 원한다면 '자바 서블릿 프로그래밍(한빛미디어)이나 '자바 서버 페이지'를 참고

 

*****EJB에 대한 자세한 내용을 원한다면 '엔터프라이즈 자바빈즈(한빛미디어)'와 Head First EJB를 참고

 

cf. Head First Java p.588

반응형

'개발 및 관리 > Java' 카테고리의 다른 글

Head First Series  (0) 2013.02.05
RMI 예제  (0) 2013.02.05
JAVA, 읽어 보야아 할 책들  (0) 2013.02.04
서블릿  (0) 2013.02.04
RMI  (0) 2013.02.04

JAVA, 읽어 보야아 할 책들

개발 및 관리/Java 2013. 2. 4. 16:33 posted by HighLighter
반응형

자바 프로그래밍을 7년 전에 해보고 다시 시작하고 있다.

Head First Java는 다 봤다. 이제 'Java의 정석, 열혈강의 JAVA Programming, 소설같은 자바 4판, 나 정말 JAVA를 공부한 적이 없다구요' 를 읽어 보고 코드를 작성해봐야 겠다. 객체지향 언어를 해봐서 내용은 비슷한 점들이 많다. 상속, 오버라이딩, 오버로딩, 추상클래스 등 약간 유사한 면이 있으면서 다른 점들도 많다.

 

1. 기초 서적
HTML:
JSP:
JAVASCRIPT:

 

2. 자바 추천 서적
(spring, java, jsp, jquery, javascript, ibatis, struts, 서블릿)

 

http://architect.tistory.com/313

 

1) Head First Servlet & JSP
2) ORACLE JDBC & JSP Programming
3) 기초부터 모델2 기반의 MVC 패턴까지 JSP 웹프로그래밍
4) 소설같은 JSP
5) 모델 2로 다시배우는 JSP
6) JAVA 서블릿 프로그래밍
7) Spring: Spring in action
8) JSP 프로그래밍 2.0 기초부터 중급까지 혹은 최범균 저서중 jsp 관련 서적

 

cf. Head First Design Pattern 고향집에서 가져와야겠다.

반응형

'개발 및 관리 > Java' 카테고리의 다른 글

RMI 예제  (0) 2013.02.05
서블릿 정리  (0) 2013.02.04
서블릿  (0) 2013.02.04
RMI  (0) 2013.02.04
java.net.MalformedURLException: invalid URL String: Remote Hello  (0) 2013.02.04

서블릿

개발 및 관리/Java 2013. 2. 4. 15:26 posted by HighLighter
반응형

 

 서블릿은 http 웹서버에서 웹서버와 함께 돌아가는 자바 프로그램이다. 클라이언트에서 웹 브라우저를 써서 웹 페이지와 정보를 주고 받을 때 http 요청이 웹서버로 전송된다. 그 요청에 응답하는데  자바 서블릿이 필요하다면 웹서버에서 서블릿 코드를 실행시킨다. (또는 서블릿이 이미 실행되고 있으면 서블릿 코드를 호출하기만 하면 된다.) 즉, 서블릿 코드는 클라이언트의 요청에 따라 필요한 작업을 처리하기 위해 서버에서 실행되는 코드일 뿐이다. 예를 들면, 정보를 텍스트 파일 또는 데이터베이스에 저장하는 작업을 할 수도 있다.

 

 서블릿을 만들고 실행시키는 방법

 1. 서블릿을 저장해야 하는 위치를 알아낸다.

 2. servlet.jar를 구해서 클래스경로에 추가한다.

 3. HttpServlet을 확장하여 서블릿 클래스를 만든다.

 4. 서블릿을 호출하는 HTML 페이지를 만든다.

 5. 서블릿과 HTML을 웹 서버에서 사용할 수 있게 만든다.

 

MyServletA.java
다운로드

 

 

cf. Head First Java - p.585

 

서블릿 관련 기본 책을 사서 공부를 해 보아야 겠습니다.

import javax.servlet.*;

import javax.servlet.http.*;

위의 두 서블릿 패키지는 자바 표준 라이브러리에 들어 있지 않아서 별도로 다운로드 받아서 클래스 경로에 집어 넣어야 합니다.

 

http://docs.oracle.com/javaee/5/api/javax/servlet/Servlet.html

http://flashcafe.org/java_study/6978

http://cafe.naver.com/webmas/861

반응형

'개발 및 관리 > Java' 카테고리의 다른 글

서블릿 정리  (0) 2013.02.04
JAVA, 읽어 보야아 할 책들  (0) 2013.02.04
RMI  (0) 2013.02.04
java.net.MalformedURLException: invalid URL String: Remote Hello  (0) 2013.02.04
Package  (0) 2013.02.01

RMI

개발 및 관리/Java 2013. 2. 4. 13:13 posted by HighLighter
반응형

 

MyRemote.java
다운로드

 

MyRemoteClient.java
다운로드

 

MyRemoteImpl.java
다운로드

 

javac -d C:\Users\Administrator\HeadFirstJava\TestRMI\classes MyRemote.java

javac -d C:\Users\Administrator\HeadFirstJava\TestRMI\classes MyRemoteImpl.java

javac -d C:\Users\Administrator\HeadFirstJava\TestRMI\classes MyRemoteClient.java

 

cd C:\Users\Administrator\HeadFirstJava\TestRMI\classes

 

1. 스터브와 스켈레톤 생성

- 1.2 버전 부터 스터브만 만들어지고 스켈레톤은 생성이되지 않는다.

- RMI에서 클라이언트 보조 객체는 스터브(stub)이고 서버 보조 객체는 스켈레톤(skeleton)이다.

 

rmic MyRemoteImpl

 

 

 

 

2. rmiregistry 실행

rmiregistry

 

3. 서비스 시작

java MyRemoteImpl

 

4. 클라이언트 시작

java MyRemoteClient

 

5. RMI를 사용할 때의 주의 사항

1) 원격 서비스를 시작하기 전에 rmiregistry를 실행시키는 것을 잊어버리는 경우가 많다.

(Naming.rebind() 메소드로 서비스를 등록하는 시점에서 반드시 rmiregistry가 실행되고 있어야 한다.)

 

2) 인자와 리턴 유형이 Serializable이 아닌 경우가 종종있다.

(실행해보기 전에 알아내기 힘들다. 컴파일러에서 오류를 잡아 줄 수가 없다.)

 

3) 클라이언트 클래스에 스터브 클래스를 집어 넣는 것을 잊어버리는 경우가 많다.

 

6. 내용 정리

1) 원격 서비스(즉, 원격 클라이언트에서 최종적으로 메소드를 호출하는 객체)를 만들려면 우선 원격 인터페이스를 만들어야 한다.

2) 원격 인터페이스는 java.rmi.Remote 인터페이스를 확장해야하며 모든 메소드에서 RemoteException을 선언해야 한다.

3) 원격 서비스에서는 원격 인터페이스를 구현해야 한다.

4) 원격 서비스는 UnicastRemoteObject를 확장해야 한다.(정확하게 말하자면 원격 객체를 만드는 다른 방법도 있지만 UnicastRemoteObject를 확장하는 방법이 가장 간단하다.)

5) 원격 서비스 클래스에는 반드시 생성자가 있어야 하며 그 생성자에서는 RemoteException을 선언해야 한다. (상위클래스 생성자에서 RemoteException을 선언하기 때문)

6) 원격 서비스의 인스턴스를 반드시 만들어야 하며 그 객체는 RMI  레지스트리에 등록되어야 한다.

7) 원격 서비스를 등록할 때는 Naming.rebind("서비스명", 서비스인스턴스); 라는 선언문으로 rebind()라는 정적 메소드를 호출해야 한다.

8) RMI와 관련된 작업을 할 때는 대부분의 경우에 RemoteException이 던져진다. 즉, 서비스를 레지스트리에 등록하는 작업, 레지스트리에 서비스를 찾는 룩업 작업, 클라이언트에서 스터브에 있는 메소드를 호출하는 모든 원격 메소드 호출 작업에서 그 예외가 던져질 수 있다.

 

 

관련 링크 - RMI 단계별 작성 방법 및 실행

 

http://blog.naver.com/echris7?Redirect=Log&logNo=140016163852

http://cafe.naver.com/junes81/387

http://cafe.naver.com/javachobostudy/34451

http://cafe.naver.com/javal/19

http://wodnrrns.tistory.com/2

반응형
반응형

 

java.net.MalformedURLException: invalid URL String: Remote Hello

 

http://oreilly.com/catalog/errataunconfirmed.csp?isbn=9780596009205

 

아래 캡쳐 화면을 보면 "Remote Hello"에서 "Remote_Hello" 으로 변경된 것을 알 수 있다.

RMI 서비스 명에 빈칸이 들어가서 발생한 문제다.

 

 

 

관련 링크 - RMI 단계별 작성 방법 및 실행

 

http://blog.naver.com/echris7?Redirect=Log&logNo=140016163852

http://cafe.naver.com/junes81/387

http://cafe.naver.com/javachobostudy/34451

http://cafe.naver.com/javal/19

http://wodnrrns.tistory.com/2

반응형

'개발 및 관리 > Java' 카테고리의 다른 글

서블릿  (0) 2013.02.04
RMI  (0) 2013.02.04
Package  (0) 2013.02.01
패키지를 사용해서 컴파일하고 실행하는 방법, 패키지를 갖고 실행 가능한 JAR를 만드는 방법  (0) 2013.02.01
jar 파일 - mainfest.txt  (0) 2013.02.01

Package

개발 및 관리/Java 2013. 2. 1. 18:34 posted by HighLighter
반응형

 

1. 클래스를 패키지에 넣으려면 package 선언문을 소스 코드 파일 맨 위에 (다른 어떤 import 선언문보다 위에) 넣어야 한다.

 

package com.headfirstjava;

 

2. 컴파일된 클래스가 classes 디렉토리 밑에 올바른 패키지 디렉토리 구조에 저장되게 하려면 -d 컴파일러 플래그를 사용하면 된다.

 

cd source

java -d ../classes com/headfirstjava/Hello.java

 

3. 코드를 실행시키려면 classes 디렉토리로 이동한 다음 클래스의 전체 이름을 지정해야 한다.

 

cd classes

java com.headfirstjava.Hello

반응형
반응형

1. 패키지를 사용해서 컴파일하고 실행하는 방법

1) -d(디렉토리) 플래그를 사용해서 컴파일하는 방법

 

c:> cd MyProject/source

c:\MyProject\source> javac -d .../classes com/headfirstjava/PackageExercise.java

or

c:\MyProject\source> javac -d .../classes com/headfirstjava/*.java

 

2) 코드를 실행시키는 방법

c:> cd MyProject/classes

c:\MyProject\classes> java com.headfirstjava.PackageExercise

 

2. 패키지를 갖고 실행 가능한 JAR를 만드는 방법

1) 클래스 파일이 classes 디렉토리 밑에 제대로 된 패키지 구조로 저장되어 있는지 확인한다.

2) main() 메소드가 들어있는 클래스를 지정하기 위한 manifest.txt 파일을 만든다. 이 때 반드시 전체 이름을 써야 한다.

Main-Class: com.headfirstjava.PackageExercise

manifest.txt 파일을 classes 디렉토리에 넣는다.

3) jar 도구를 실행시켜서 패키지 디렉토리와 manifest 파일이 있는 JAR 파일을 만든다.

'com' 디렉토리만 포함시키면 패키지 전체(그리고 모든 클래스)가 JAR로 들어간다.

c:> cd MyProject/classes

c:\MyProject\classes>jar -cvmf manifest.txt packEx.jar com

cf. com 디렉토리만 지정하면 필요한 것들이 모두 JAR 파일로 들어간다.

반응형

'개발 및 관리 > Java' 카테고리의 다른 글

java.net.MalformedURLException: invalid URL String: Remote Hello  (0) 2013.02.04
Package  (0) 2013.02.01
jar 파일 - mainfest.txt  (0) 2013.02.01
채팅 - SimpleChatClientA.java, VerySimpleChatServer.java  (0) 2013.02.01
Thread  (0) 2013.02.01

jar 파일 - mainfest.txt

개발 및 관리/Java 2013. 2. 1. 17:30 posted by HighLighter
반응형

javac -d C:\Users\Administrator\HeadFirstJava\MyProject\classes SimpleChatClientA.java

 

mainfest.txt 내용

Main-Class: SimpleChatClientA

jar -cvmf manifest.txt app1.jar *.class

java -jar C:\Users\Administrator\HeadFirstJava\MyProject\classes\app1.jar

 

Main-Class 내용이 들어있는 행 뒤에 반드시 엔터 키를 눌러야 한다. 그렇게 하지 않으면 mainfest 파일이 작동하지 않을 수도 있다.

 

1) JAR 파일을 만들 때는 다음과 같은 명령을 입력하면 된다.

 jar -cvfm mainfest.txt MyJar.jar com

 

2) 실행 가능한 JAR 파일을 실행할 때는 다음과 같은 명령을 입력한다.

 java -jar MyJar.jar

 

3) JAR 파일에 들어있는 내용을 풀어 놓는 jar 명령어

 (a) JAR 파일에 들어있는 내용 목록을 출력하는 방법

  jar -tf app1.jar

 (b) JAR 파일의 내용을 풀어 놓는 방법

  jar -xf app1.jar

 

 

참고)

 http://www.skylit.com/javamethods/faqs/createjar.html

 http://dolhani.egloos.com/2790274

 http://docs.oracle.com/javase/tutorial/deployment/jar/downman.html

반응형
반응형

 1. Head First Java p.530 ~ p.533

SimpleChatClientA.java

 VerySimpleChatServer.java

간단한 채팅 프로그램입니다. 간략하게 구성되어 있습니다.

반응형

Thread

개발 및 관리/Java 2013. 2. 1. 14:39 posted by HighLighter
반응형

1. 예제 파일들

 

RunThreads.java

 

RyanAndMonicaJob.java

 

TestSyncTest.java

 

ThreadTester.java

 

 

2. 중요 키워드

 

java.lang.Thread 클래스

 void join();

 void start();

 static void sleep();

 

class Test Sync implements Runnable

 

TestSync job = new TestSync();

Thread a = new Thread(job);

Thread b = new Thread(job);

a.start();

b.start();

 

public synchronized void increment() {

}

 

public void go() {

  doStuff();

  synchronized (this) {

cirticlalStuff();

moreCriticalStuff();

  }

}

 

try {

Thread.sleep(2000); //대기 시간은 밀리초(1/1000) 초 단위

} catch (InterruptedException ex) {

      ex.printStackTrace();

}

 

public class RunThreads implements Runnable {

  public static void main (String[] args) {
 RunThreads runner = new RunThreads();
 Thread alpha = new Thread(runner);
 Thread beta = new Thread(runner);
 alpha.setName("Alpha thread");
 beta.setName("Beta thread");
 alpha.start();
 beta.start();
  }

  public void run() {
    for ( int i = 0; i < 25; i++) {
 String threadName = Thread.currentThread().getName();
 System.out.println(threadName + " is running");
    }
  }
}

 

3. 내용정리

 

1) 어떤 메소드를 한 번에 한 스레드만 접근할 수 있게 하고 싶다면 synchronized라는 키워드를 사용한다.

 

2) 락은 메소드마다 하나씩 있는 것이 아니고 객체마다 하나씩 있다.

 

3) Thread.sleep()이라는 정적 메소드는 적어도 sleep 메소드에 전달된 인자로 지정한 시간 동안 스레드를 실행중인 상태를 떠나있게 만든다. Thread.sleep(2000) 이라호 하면 스레드가 2초 동안 대기 상태로 들어가게 된다.

 

4) sleep() 메소드에서는 확인 예외(InterruptedException)를 던지기 때문에 sleep()을 호출할 때는 반드시 try/catch로 감싸거나 예외 선언을 해야 한다.

 

5) setName() 메소드를 써서 스레드에 이름을 붙일 수도 있다. 모든 스레드에는 기본 이름이 주어지지만 따로 이름을 붙여주면 스레드를 추적하는 것에 도움이 된다. 특히, print나 println 선언문을 사용하면 디버깅 할 때 좋다.

 

6) 스레드를 사용할 때도 객체를 안전하게 만들고 싶다면 어떤 선언문들이 원자적인 절차로 처리되어야 하는지(쪼개지지 않고 한번에 처리되어야 하는지) 결정해야 한다. 즉, 다른 스레드가 같은 객체의 같은 메소드에 들어가기 전에 끝까지 실행되어야만 하는 메소드를 결정해야 한다.

 

7) 스레드 두 개가 메소드 하나에 동시에 들어가는 일을 방지하고 싶다면 메소드 선언부에 synchronized 키워드를 선언해야 한다.

 

8) 어떤 스레드가 그 객체에 있는 동기화된 메소드에 들어가면 다른 어떤 스레드도 같은 객체에 있는 동기화된 메소드에 들어갈 수 없다. 이런 제한이 있어야 데이터를 조작하는 모든 메소드를 동기화함으로써 데이터를 보호할 수 있다.

반응형