[JSP] 2. 서블릿 API 이용
출처 : 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에서 구현하고 출력하는 결과값을 볼 수 있을 것이다.