JDK와 Eclipse 설치 방법은 이 곳을 참조 부탁드립니다.
웹페이지를 생성하기 위해서는 아파치 톰캣을 다운받아 웹페이지와 연결을 해줘야 하는데요. 톰캣 9버전 이상은 공식 사이트에서 다운로드 받을 수 있으나, 그 밑의 버전은 공식 사이트에서 찾을 수 없더라고요. (특히 8버전...) 그래서 그 밑의 버전은 아파치에서 제공하는 아카이브 사이트에서 다운로드 받으실 수 있습니다.
홈페이지에 접속하여 원하는 버전을 클릭한 후 찾고자 하는 상세 버전을 클릭 해주고 bin 파일에 들어가서 운영체제에 맞는 버전의 zip 파일을 다운받으면 됩니다.★ 다운 받아 압축을 해제한 폴더는 나중에 이클립스에서 동적 프로젝트를 생성할 때 사용되니 따로 보관하시면 됩니다.
다음은 이클립스에서 JSP 페이지를 만들기 위한 프로젝트 폴더를 생성하는 방법입니다.
Java EE 버전 화면으로 들어와 주시면 되는데요. Java EE 버전은 화면 오른쪽 상단에서 아래의 사진처럼 된 아이콘을 누르고 Java EE를 선택한 뒤 Open 버튼을 눌러주면 됩니다. 폴더 생성을 위해 아래의 사진 중 원하시는대로 진입해 주시면 초기 화면이 뜨는데요. Project Name에는 원하시는 이름을 작성하시면 되고 Target runtime은 웹서버를 실행할 서버를 선택해 주는 곳입니다. 웹 모듈은 선택된 서버 버전에 따라 자동으로 변경 될 구동 버전이고요. 아래 사진처럼 New Runtime을 눌러줍니다. 사용하시고자 하는 톰캣 버전을 클릭하시고 Create a new local server를 선택하신 뒤 Next를 눌러주세요. 새로 나타난 창 중 Browse 버튼을 클릭 하고 보관해두신 apache tomcat 폴더 자체를 선택한 뒤 Finish 버튼을 누릅니다. 그럼 모듈 버전과 서버 버전에 맞는 기본 설정이 자동으로 지정됩니다. 폴더 지정이 끝난 후 Finish 버튼을 클릭하여 마무리 해주면 기본적인 폴더들을 포함한 project 폴더와 Server 폴더가 만들어집니다! 참고로 웹 어플리케이션의 정적 자원들이 보관되는 WebContent 폴더에, 자바 소스파일이 보관될 src 폴더도 확인 가능합니다.
다음은 웹 프로젝트를 구성하는 폴더들의 간단한 소개입니다. 크게 이클립스 개발 환경과 톰캣 서비스 환경으로 나뉘어져 있는데요. 아래의 글로도 나열을 하겠지만 그림도 첨부해 드리면 더 이해하시는데 도움이 되시리라 생각됩니다.
1. 이클립스 개발 환경 폴더 구조(자료 출처 : http://myblog.opendocs.co.kr/wp-content/uploads/2014/09/service_folder.png)
2. 톰캣 서비스 환경 폴더 구조(자료 출처 : http://myblog.opendocs.co.kr/wp-content/uploads/2014/09/service_folder.png)
Java Resources
: 자바 소스 및 라이브러리 관련 파일들이 위치합니다.
build
: 에는 빌더된 뒤의 클래스 파일(.class)이 위치합니다.
WebContent
: htmp, css, jsp와 같은 웹 관련 파일들이 위치합니다.
WEB-INF
: 서블릿 매핑, 필터, 리스너 등의 웹 어플리케이션 설정 정보를 포함합니다. 이 파일을 통해 웹 어플리케이션의 동작 방식을 정의할 수 있습니다.
classes
: 컴파일된 Java 클래스 파일들이 위치하는 폴더입니다. 주로 서블릿 클래스나 기타 백엔드 로직의 클래스 파일들이 여기에 저장됩니다.
lib
: 웹 어플리케이션에서 사용하는 라이브러리 JAR 파일들을 포함하는 폴더입니다. 이 폴더에 추가된 JAR 파일들은 웹 어플리케이션 실행 시 클래스 패스에 추가되어 사용할 수 있습니다.
web.xml
: 메타 정보를 포함하는 폴더로, 주로 JAR 파일의 메타 데이터가 저장되는데요, 그 중 MANIFEST.MF는 JAR 파일의 메인페스트 파일로, JAR 파일에 대한 기본적인 정보와 의존성 정보를 포함합니다. 또한 클래스 패스 설정 등도 기록될 수 있습니다.
방금 생성한 다이나믹 웹 프로젝트의 디렉토리 구조, 즉 WAS의 표준 디렉토리 경로는 프로젝트 이름/WebContent/WEB-INF/
인데요. 이 디렉토리 안에 서비스 하려는 문서들을 만들어 놓으면 웹에서 서비스가 되는 원리라고 합니다.
이러한 웹 서비스를 실행하기 위해 필요한 파일과 폴더는 각각 web.xml(메타 정보)와 .classes(자바 파일 실행) 인데요. dynamic web project를 생성할 때 web.xml은 생성되어 있지만, classes는 우리가 따로 만들어줘야 합니다. 다음은 그 설정을 위한 절차입니다.
디렉토리 세팅까지 완료되었다면, 이제 웹 어플리케이션에서 직접 웹페이지를 구동해 보겠습니다.
Project Exploere 목록에서 현재 웹 프로젝트 목록에 WebContent를 우클릭 한 후 아래와 같이 JSP 파일을 생성해 줍니다. 만약 Project Explorer를 못찾으실 경우 아래의 사진과 같은 경로에서 찾으실 수 있습니다. 그 다음 아래의 사진처럼 기본으로 사용할 웹페이지의 이름을 jsp 확장자와 함께 작성한 후 Finish 버튼을 눌러줍니다. 참고로 확장자를 안 적어줘도 선택한 파일 생성 유형에 따라 알아서 생성됩니다. 그럼 다음과 같이 프론트 엔드 구축을 위한 JSP 파일이 생성된 모습을 볼 수 있는데요! 마우스 우클릭을 누른 후 Run as -> Run on Server를 클릭해 줍니다. 이때 해당 알림창이 뜨실텐데 별거 없습니다. 저장을 안하고 서버를 구동했음을 의미하는 창이라 세이브 하고 구동할거면 Save를, 안하고 구동할거면 Dont Save를 클릭하면 됩니다. 물론 다음에 묻지 않도록 체크박스를 체킹할 수도 있습니다. 알림창에 버튼을 누르면 다음 창이 뜨는데요! 여기서 Always use this server when running this project를 체크한 후 Finish 버튼을 눌러줍니다. (나중에 원하면 변경도 가능합니다.) 그러나 여러분들 중에는 아래와 같이 에러가 뜨실 수도 있으실 겁니다. 이 에러의 의미는 톰캣의 기본 서버 포트인 8080이 이미 실행중이라는 알림인데요. 저는 이거 찍기 전에 한 번 구동해서 뜨는 겁니다 ㅎ... 아무튼 이러한 오류 메세지는 실행중인 오라클 프로그램의 서버 포트 8080과 충돌되어서 뜨는 에러인데요. 이럴 때는 오라클 포트(808)을 꺼주거나, 포트가 겹치지 않도록 톰캣 서버 포트를 8080에서 다른 포트로 바꾸면 됩니다. 일단 이번엔 해당 포트를 꺼보도록 하죠. 명령 프롬프트를 키신 후 다음 명령어를 입력해 주세요.그럼 아래와 같이 각 네트워크와 연결 포트, 점유 프로세스의 ID를 조회할 수 있는데요. 우리는 그 중 8080 포트를 점유한 프로그램의 ID 번호를 삭제해서 점유 상태를 끊어줘야 합니다. 다시 명령 프롬프트에서 다음 명령어를 입력해 주세요.netstat -ano -p tcp netstat : 네트워크 통계 출력 명령어 -ano : 모든 활성 연결 및 수신 대기 네트워크의 포트를 숫자로 조회하고 각 네트워크를 소유(점유)하고 있는 프로세스의 ID(PID)도 확인하겠다는 명령어 -p tcp : 프로토콜 중 tcp에 대한 프로토콜만 확인하겠음을 의미
그러나 명령어를 입력해도 거부되었다고 뜨죠? 간단합니다. 명령 프롬프트를 관리자 권한으로 실행해 주세요 ㅎ... 관리자 권한으로 실행하고 해당 명령어를 입력하면 삭제에 성공합니다. 다음 방화벽 알림창이 뜨실수도 있는데요. 각 실행 환경에서 해당 어플리케이션의 네트워크를 허용하겠는지를 묻는 알림창이니 여러분 각자의 의사에 따라 선택 후 엑세스 허용을 눌러주시면 됩니다. 이제 다시 돌아와 서버를 구동해주면 아래와 같이 이클립스 내의 자체 홈페이지가 구동된 것을 확인하실 수 있으실 겁니다. 만약 브라우저를 이클립스 자체 홈페이지에서가 아닌, 다른 브라우저에서 생성되기를 원하시는 분들은 아래의 사진의 과정을 거치시면 다음과 같이 해당 브라우저에서 생성되는 것을 확인하실 수 있습니다! 다만 실행중인 서버를 놔두고 다른 JSP나 서블릿 컨테이너에서 서버를 실행할 경우 알림창이 뜨긴 하지만 알림창이 뜨지 않을 경우 404에러가 발생할 수 있기 때문에, 이럴 경우 당황하지 말고 아래 그림처럼 이클립스 화면 우측 하단의 서버 탭에서 서버를 종료하시고 다시 실행하시면 됩니다. (참고로 이클립스를 종료하면 서버도 종료됩니다.)taskkill /f /pid 4744 taskkill : 실행중인 프로세스를 종료하겠음을 의미. /f : 강제 종료(Force)를 의미 /pid (번호) : 삭제할 프로세스 PID(ID)를 지정