Server Side Script/JAVA.Servlet.JSP

Head-Frist Servlets & JSP 를 공부하다가...

미련곰 2007. 8. 20. 17:08
Chapter 3 [초간단 MVC] P.101~P.125

package com.example.web;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
import com.example.model.*;

public class BeerSelect extends HttpServlet
{
      public void doPost(HttpServletRequest request, HttpServletResponse response)
       throws IOException, ServletException
      {
           response.setContentType("text/html");
           PrintWriter out = response.getWriter();
           out.println("Beer Select Advice<br>");
           String c = request.getParameter("color");
 
           BeerExpert be = new BeerExpert();
           List result =be.getBrands(c);
           Iterator it = result.iterator();
           while(it.hasNext())
           {
              out.print("<br>TRY : " + it.next());
            }
       }
 }

 

Q . 컴파일시 에러는

      C:\java\project1\MyProjects\beerV>javac -d classes "src\com\example\web\BeerSelect.java"
      src\com\example\web\BeerSelect.java:7: package com.example.model does not exist
      import com.example.model.*;
      ^
      src\com\example\web\BeerSelect.java:19: cannot find symbol
      symbol : class BeerExpert
      location: class com.example.web.BeerSelect
      BeerExpert be = new BeerExpert();
      ^
      src\com\example\web\BeerSelect.java:19: cannot find symbol
      symbol : class BeerExpert
      location: class com.example.web.BeerSelect
      BeerExpert be = new BeerExpert();
 

A . BeerExpert.java, BeerSelect.java 이 두 파일을
     C:\java\project1\MyProjects\beerV\src 디렉토리에 옮기세요. 그리고 src 디렉토리로 이동
     다음처럼 실행하세요.
     C:\java\project1\MyProjects\beerV\src>javac -d ../classes *.java
     그러면 두파일이 컴파일 될껍니다. 소스는 항상 같은 디렉토리에서 콤파일 하세요 ~

     [설명] 아시다 시피 자바 classpath는 디렉토리 구조로 되어있습니다.
     아까 컴파일 하신 명령을 보면
     C:\java\.~.\beerV>javac -d classes "src\com\example\web\BeerSelect.java"  

     이 명령은 -d 옵션으로 컴파일된 class 파일은 clases 디렉토리 밑에 생성됩니다.
     그리고 소스는 BeerSelect.java 인데요 이 소스에서 import com.example.model.* 
     구문으로 필요한 BeerExpert 클래스를 찾아야 됩니다.
 
      javac 가 어디서 찾아야 할 까요. 우선 컴파일러 javac 자신이 사용하는 부트 클래스
      rt.jar에서 찾습니다. 설치된 jdk 디렉토리에 보시면 대따 큰 rt.jar을 볼수 있습니돠
 
     구리고  여기를 뒤지니 com.example.model 패키지가 없네요. 구래서 다시 또 javac는  
     classpath 내의 모든 *.jar 파일속을 뒤적뒤적 거립니다.

     그리도 없네요 ;;; 마지막으로 지금 컴파일된 현재 디렉토리(current dir)인
     C:\java\.~.\beerV>를 기준으로 하위 디렉토리리 뒤집니다.  

     즉, 아래 디렉토리 그림에서 처럼 BeerExpert.class를 찾습니다.

      C:\java\.~.\beerV>
                      +-- com
                             +-- example
                                       +-- model
                                             BeerExpert.class
                         
      그런데~~~~~~~~ 없네요. ㅎㅎ 현재 사용가능한 BeerExpert.class는 classes 디렉토리
      밑에 있지요.

      C:\java\.~.\beerV>
                      classes
                           +-- com
                                  +-- example
                                            +-- model
                                                   BeerExpert.class

      그래서 아~~ 자꾸 길어진다. ㅋ 그냥 소스(파일둘다) 한곳에 모아놓고 다음처럼 컴파일하면
      C:\java\.~.\beerV>javac -d ../classes *.java  

      파일 둘 다 함께 컴파일하면 javac가 지금 콤파일 한 class 가 어디있는지는 알고있저
      따라서, 자기가 컴파일 해서 넣는 디렉토리 C:\java\.~.\beerV\classes 이 속을 뒤저서
      import 해서 모두 컴파일 시킵니다.

      그래서 보통 소스 컴파일은 디렉토리 한 곳에 몰아넣고 합니다. 그러면 생성된
      소스가 여러 패키지(디렉토리)에 분산되어 있어도 javac 가 다 알아서 찾아 쓰니깡요

 

 

수정 출처 : http://www.okjsp.pe.kr/seq/90430