ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Servlet-JSP 순수to웹 (2) 메모장으로 Servlet 만들어보기
    Web/Servlet-JSP 2023. 5. 21. 19:15

     

    1. 메모장을 이용해 서블릿 만들기

     

    서블릿을 만든다는 것은 서버 어플리케이션을 만든다는 것이다. 

    서버 어플리케이션들은 기능별로 나누어져있고, 선택적으로 코드들이 실행 될 수 있도록 

    구성된다. 

    즉, 하나의 큰 웹서버를 위해 기능별로 조각나 있는 작은 서버 어플리케이션(ex서블릿) 이 있고, 사용자의 요청에 따라 

    해당 기능을 가진 서블릿만 로드실행되는 것이다.

     

    기존의 자바 클래스와 서블릿 클래스의 다른점은

     

    서블릿은 기존 자바 클래스와 다른 형식을 따른다는 것이다. 서블릿은 was에 의해 로드되고 실행된다.

    이를 위해서 서블릿은 약속되어 있는 인터페이스나 추상클래스를 상속 혹은 구현해야한다.

    was는 서블릿에 직접 접근하는 것이 아니라 추상클래스를 통해서 서블릿에 참조를 얻고 구현된 메서드를 호출해서 실행하는 것이다.

    마치 자바의 public 클래스가 실행되려면 public static void main(String[] args)를 만들어야 하는 것과 같다.

    위와 같이 클래스를 만들면, was는 HttpServlet을 통해서 Hi서블릿에 참조를 얻고 service메서드를 호출하는 것이다.

    (마치 HttpServlet c1 = new Hi() -> c1.service();)

     

     

    2. 서블릿 컴파일 하기

    cmd를 이용해 컴파일하는데, 이때 서블릿을 만드는데 사용되는 여러 클래스들은 기본 자바 라이브러리에 포함된 아이들이 아니라서, 관련 라이브러리를 import해야한다. cmd에서 javac -cp (class-path)옵션을 사용하자. servlet과 관련된 라이브러리는 톰캣 라이브러리에 있다. 

     

    3.서블릿 등록하기

     

    이제 url을 통해 서블릿을 사용하려면, 몇가지 설정이 필요하다.

     

    3.1 폴더설정 

     

    모든 서블릿 파일들은 반드시 루트 디렉토리/WEB-INF/classes 폴더 안에 있어야한다. (폴더가 없으면 만들어야함)

    만약 우리가 만든 class가 특정 패키지에 포함된다면, 루트 디렉토리/WEB-INF/claasses/패키지명 까지 폴더를 만들어서 그 안에 넣어 두어야한다. (이건 약속!)

     

    3.2 서블릿을 찾을 수 있는 경로를 톰캣에게 알려주기

     

    WEB-INF와 그 하위폴더들은 절대 사용자가 url을 요청해서 접근할 수 없다.

    따라서 컴파일된 서블릿은 WEB-INF/classes 아래 두되, 사용자 요청에 따라 이를 찾을 수 있도록 WAS에게 알려줘야한다.

    이러한 설정을 하는 파일이 web.xml(배치서술자) 이다.

     

    web.xml파일에 이런식으로 서블릿을 등록해둬야한다.

    위는 서블릿의 존재를 알려주는 것이다. 만약 서블릿 클래스가 패키지에 포함되어 있다면, 패키지 명까지 적어주자 

    아래는 사용자에 입력과 서블릿을 매핑하는 것이다. 사용자가 url에 /co를 입력하면, 

     >웹서버가 먼저 루트 디렉토리를 뒤적거리고 없으면, url정보를 WAS에 넘기고 WAS가 classes폴더에서 서블릿을 찾아서 구동하고, 결과를 내보낸다.

     

     

    *따라서 우리는 톰캣 server.xml파일과 web.xml 파일을 이용해서 두가지 설정을 할 수 있다.

     

    Server.xml에 context추가 -> WAS와 웹서버가 뒤적거릴 루트 디렉토리 설정

    Web.xml에 서블릿 등록 -> 각각의 루트 디렉토리에서 들어온 요청 중 서블릿과 매핑된 요청이 있으면 WASweb.xml파일을 참고해서 찾아줌

    (단 각 루트 디렉토리들은 WEB-INF/classesweb.xml가지고 있다고 가정)

     

    Ex 루트 디렉토리 1. Server.xml“/서버1”로 컨텍스트 등록, “/hh”요청이 오면

    이와 매핑된 servlet실행하도록 등록

    루트 디렉토리 2  Server.xml“/서버2”로 컨텍스트 등록, “/kk”요청이 오면

    이와 매핑된 servlet실행하도록 등록

    Localhost:8080/서버1/hh -

    Localhost:8080/서버2/kk

     

    3.3 톰캣서버 다시키고 서블릿 사용해보기

     

    톰캣서버를 다시키고 지정한 url패턴에 맞게 요청해보자. 

     

    화면은 하얗고, 서버에 이런게 뜨면 성공이다. 이는 우리가 output을 시스템으로 두었기 때문이다.

     

    3.4 웹 화면에 출력

     

    자바 웹 프로그래밍과 콘솔 프로그래밍의 또 다른 차이점 중 하나는 

    입/출력의 방향이 콘솔이냐 웹이냐이다.

    웹 프로그래밍은 서버가 원격으로 클라이언트에게 입력을 받고, 다시 클라이언트에게 출력을 돌려주는 것이다. 그리고 이 과정이 웹을 통해 이루어진다.

    그렇다면, 이를 위한 입출력 스트림은 어떻게 얻어야 할까?  

    서블릿 클래스이랑 완세트인 response와 request를 통해 각각 출력과 입력 스트림을 얻을 수 있다.

    HI 서블릿 클래스를 다음과 같이 고친 뒤에 다시 컴파일하고, classes폴더 밑에 두고, 다시 서버를 끄고 킨 뒤에 url요청을 하면

    이렇게.. 어렵사리 웹화면에 결과를 얻을 수 있다. 

     

     

     

    참고자료: 유튜브 강의 뉴렉처 - 서블릿/jsp 

Designed by Tistory.