Web/JSP

[JSP] 2. 서블릿 API 이용

Binceline 2014. 7. 14. 08:50

출처 : https://www.youtube.com/watch?v=_Grz3gtnuJM&list=PL6ieCYNds2bZtaZd_UOJHyiW20hdm0pic&index=2


텍스트 문서에 자바 형식으로 클래스를 만들고, 확장자는 .java로 변경한다. 클래스 이름과 파일 이름이 같아야 한다.

톰캣 컨테이너의 입력/출력을 담당하는 클래스로 확장해야 하는데, extends HttpServlet을 해주면 된다.

그 후 이 클래스에서 가상함수로 doGet이라는 함수를 두고 있는데, 이 함수가 가장 먼저 호출된다. Java와는 살짝 다른 인터페이스로 main 대신에 doGet을 이용해야 한다. 이를 오버라이드해서 구현해 줘야 한다. 

다 만들었다면, 콘솔을 켜고 javac를 입력해 본다. 없다 그러면 환경변수 Path에 java폴더의 bin 폴더까지의 경로명을 등록시킨다. 


그리고 방금 만든 .java 파일이 존재하는 위치로 가서 javac name.java 를 입력해 본다.

라이브러리가 없다는 에러를 볼 수 있을 것이다. Java가 기본적으로 제공하고 있는 라이브러리가 아니라면 classpath(줄여서 cp) 옵션을 이용해 링크해 줘야 한다.

우선 아파치 톰캣의 lib 폴더에 보면 servlet-api.jar 파일이 있을 것이다. 이걸 링크할 것이다. 다음과 같이 경로와 파일명을 써 주고 컴파일할 파일을 적는다.


요롷게 하면 된다.

아무 표시도 안나면 컴파일이 완료된 것이다.

컴파일이 끝나면 java.class 파일이 생긴다



이 Tera.class 파일을 지정한 웹서버의 root 폴더로 가져가는데, root 폴더에 "WEB-INF" 라는 폴더를 하나 만든다. 여기에 이 WEB-INF 폴더에 들어 있는 파일들을 웹 브라우저로는 접근할 수 없기 때문에, 보안 이슈가 되는 것들은 여기에 넣어 둔다.

더 자세한 내용은 다음 링크를 참고 

http://teraphonia.tistory.com/441


보통 WEB_INF 디렉토리에는 웹 관련 클래스, 라이브러리, JSP, 웹서버 설정 등이 포함되어 있다.

.java 파일을 컴파일해서 나온 .class 파일들은 꼭 WEB-INF/classes 디렉토리 안에 두어야 한다.

조금 더 자세한 내용은 블로그 어딘가에 살짝 있을 것이다.

여기까지 했으면 사용자가 웹 브라우저를 이용할 수 있도록 배포하는 것 까지 완료됬다.


하지만 이걸 저렇게 서버에서 바로 줄 수 없다. 왜냐하면, 우선 WEB_INF는 웹 브라우저에서 참조할 수 없다. 그리고 .class파일은 프로그램이기 때문에 실행을 해야 하는데, 서버에서 실행하고 그 결과를 되돌려 주도록 해야 한다.

저 상황에서는 web.xml에서 nana.class를 Load할 수 있도록 스크립팅을 해야 한다.

직접 접근하도록 하는 것이 아니라, URL을 통해서 접근하도록 다음과 같이 스크립팅 해야 한다.

<url-pattern> 부분이 URL을 지정하는 부분이다.

이렇게 스크립팅하는데,

Nana라는 클래스를 로드하지만 이것은 유저들이 몰라야 한다. 대신 이름으로 hi라고 지정한 것이다.

시작은 servlet-mapping의 hello url을 호출하는 것으로 시작하며, 동작은 다음과 같다.

1. /hello url을 호출하면, hi라고 등록된 서블릿 이름을 위의 <servlet> 내용에서 찾는다.

2. hi라는 서블릿 이름을 찾고, 그 이름에 매핑된 "Nana"라는 class를 Load한다. 그럼 이 class는 톰캣에서 로드되어 실행된다.

이렇게 한 후, 서버를 다시 켠다.

HttpServlet을 상속받아 확장시키지 않았다면 에러가 날 것이다.

에러가 있으면 수정하고 다시 컴파일 하고 폴더에 다시 갔다 놓고 서버를 재시작한다.

그러면 class에서 구현하고 출력하는 결과값을 볼 수 있을 것이다.

반응형

'Web > JSP' 카테고리의 다른 글

[JSP] JSP 강좌 사이트  (0) 2014.07.15
[JSP] 1. 톰캣 서버 구축/사용 팁  (0) 2014.07.12