JSP(Java Server Pages)란?
: HTML 코드에 JAVA코드를 넣어 동적웹페이지를 생성하는 웹어플리케이션 도구이다.
JSP가 실행되면 자바 서블릿(Servlet)으로 변환되며 웹 어플리케이션 서버에서 동작되면서 필요한 기능을 수행하고 그렇게 생성된 데이터를 웹 페이지와 함께 Client로 응답한다.
JSP와 Servlet
JSP와 서블릿의 차이점은 결과적으로 하는일은 동일하지만 역할의 차이가 있다.
Servlet이란?
- 서블릿이란 Java 기반의 웹 프로그램 개발을 위해 만들어진 기술이다.
- 따라서 Java로 작성된 프로그램을 실행할 수 있는 서버 소프트웨어(ex.톰캣) 를 통해 관리된다.
- 즉 서블릿을 실행하기 위해서는 톰캣과 같은 서블릿 컨테이너가 필요하며 이러 한 서버 소프트웨어는 일반적으로 WAS(Web Application Server)로 불리기도 한다.
- HTML은 내용을 직접 수정하기 전까지 변하지 않으므로 정적인 파일이다. 하지만 사용자 로그인 처리를 위해 데이터베이스에 저장된 내용과 비교도 해야하고, 게시판에 글을 올리기 위해서는 DB에 저장하는 과정이 필요하다. 서블릿은 바로 이러한 기능을 수행할 수 있도록 설계된 특수한 목적의 자바 프로그램이다.
그런데 서블릿은 HTML과 데이터를 조합하는 방식에 어려움이 있다. 한 화면에 수천라인이 될 수도 있는 HTML코드 구성을 위해 자바언어로 작성해야 한다는 것은 매우 비효율 적이다.
JSP는 바로 이러한 문제를 해결하기 위해 등장하게 되었다.
WAS 서버들의 공통적인 디렉토리 구조
: JAVA는 CLASS파일이 실행되는 것이기때문에 이를 위해
WAS서버들은 아래와 같은 공통적인 구조(서블릿 규약)를 갖는다
Context Root | +--------WEB-INF | +---------classes폴더 (여기에 클래스 파일들이 위치한다) | +---------lib폴더 (jar파일이 위치) | +---------src폴더(java파일이 위치) | web.xml파일 |
Context Root밑에는 jsp/html/css/js/이미지파일(jpg.gif등)등이 위치한다. 이들은 WEB-INF안에 넣으면 안된다.
JSP란?
- Java언어를 기반으로 하는 Server Side Script Language(SSSL)이다.
- HTML코드 안에 Java코드가 있기때문에 코드작성이 간편하다는 장점이 있다.
- Servlet을 보완하고 기술을 확장한 스크립트 방식 표준이다. 즉 Servlet의 모든기능 + 추가적인 기능
- 자바중심의 서블릿과 달리 JSP는 HTML을 중심으로 데이터를 처리하는 특징을 가지는데 쉽게 말해 HTML에서 자바 코드를 사용할 수 있는 구조이다.
아래는 JSP와 서블릿의 작동 순서와 원리(?)이다.
▲ 순서를 보자면
1. 개발자가 소스를 작성 및 컴파일까지 해서 Webapps폴더에 넣음으로써 배포를 한다.
2. Client가 URL등으로 동작을 요청함으로써 서버로 .jsp를 요청하였다.
3. (그림에는 없지만) Web 서버로 먼저 요청이 들어가고 그 다음 WAS서버(Web Application Server)(여기서는 서블릿 컨테이너)로 요청이 들어간다.
4. WAS서버에서 DB로 요청하여 연동되어 다시 data를 WAS서버로 전송, WAS서버 안에있는 서블릿 컨테이너안에서 .jsp파일이 HTML 형식으로 바뀌어서 Web서버로 전달되고 최종적으로 Client에게 전달된다.
위처럼 우리는 Servlet의 개선판인 JSP를 사용하여 서버와 통신한다. 그 과정에서 사용하는 서버 소프트웨어 대표적으로 Tomcat이 있다.
톰캣에는 여러 디렉토리가 있는데 각 디렉토리의 구조는 다음과 같다
- bin : 톰캣 실행에 관련된 .exe파일이나 .bat등이 있다.
- conf : 톰캣 설정 파일들이 있다.(server.xml/web.xml/context.xml 등)
- lib : 톰캣을 실행하는데 필요한 라이브러리(jar)파일이 있다.
- webapps : 실제 웹 어플리케이션이 위치할 디렉토리
- work : 톰캣의 작업공간으로 변환된 JSP파일의 서블릿코드(자바코드)가 여기에 위치한다.
웹 컨테이너
- 웹 어플리케이션을 실행 할 수 있는 컨테이너
- Servlet컨테이너와 JSP컨테이너를 합쳐서 웹 컨테이너라고 한다.
- 일종의 WAS역할을 한다.
- 종류로는 오픈 소스 웹 컨테이너인 Tomcat, Jetty등이 있고 상용인 Weblogic,WebShpere,JBoss등이 있다.
- Tomcat은 가벼운 WAS역할을 한다고 볼 수 있다.
[주요 설정파일]
-Tomcat설치된 디렉토리 중 conf에서 중요한 3가지 파일이 있다.
server.xml
- 포트를 변경하거나 홈 디렉토리를 변경하거나 Tomcat서버에 실행중인 context를 등록할 때 주로 사용한다.
▲ 이클립스에 JSP를 연결하면 Context Root 즉, 프로젝트명으로된 파일과는 별개로 Servers폴더가 생성되는데 여기에 server.xml파일이 있다. 이 파일에 들어가보면 아래와 같은 코드가 있다.
▲ 위 코드에서 보다시피 port번호는 8080인데 이것은 톰캣에서 사용하는 포트번호이다. 참고로 oracle도 이 포트번호를 사용하기 때문에 충돌난다. 따라서 오라클이 설치되어 있는데 톰캣을 사용하고 싶으면 오라클의 포트번호를 바꾸거나 사용중지를 해야한다. 여기서 포트번호를 변경할 수 있으며 포트번호를 80으로 변경하면 http 번호가 된다.
web.xml
- 시작문서를 설정하거나 서블릿을 등록하거나 세션 유지 시간을 설정하거나 한다.
▲ 서버를 연결하고
▲ 위 파일을 Run As시켜보면 아래와 같은 페이지가 나온다.
▲ 위 URL을 보면 하이라이트 처리가 된 부분이 보일 것이다. 우리가 실행시킨 jsp파일명까지 나타나는 것인데 우리가 사용하는 사이트 예를 들면 네이버는 www.naver.com 밖에 에 나오지 않는다.
현재 위에서 HelloWorld.jsp부분을 지우고 엔터를 치면 아래와 같이 404error가 뜬다.
하지만 이것을 우리가 web.xml에서 등록해준다면 jsp파일명 없이도 접속할 수 있다.
▲ web.xml 파일을 열고 찾아보면 아래와 같은 부분이 있을 것이다.
▲ 위 코드의 해석은 입력한 URL에서 첫번째로 index.html을 찾고 없으면 index.jsp를 찾고 없으면 index.htm을 찾고.... 이런식으로 찾아가다 있으면 접속이 되는 것이다.
▲ 위와 같이 첫줄에 실행시키는 .jsp파일명을 등록해주면 이제는 URL에서 HelloWorld.jsp를 생략하고 입력해도 접속이 되게 된다. 이것이 시작문서를 설정한다는 것이다.
'JSP' 카테고리의 다른 글
[JSP]out 객체 (0) | 2022.04.29 |
---|---|
[JSP]response 객체 (0) | 2022.04.29 |
[JSP]request객체 (0) | 2022.04.29 |
[JSP] 스크립팅 원소(Scripting Element) (0) | 2022.04.28 |
[JSP]지시어(Directive) (0) | 2022.04.28 |