[ JSP 태그 ]
- HTML 기반의 JSP 코드 내에 JAVA 코드를 삽입할 수 있게 해주는 태그
JSP는 HTML 기반으로 되어 있기 때문에 JAVA 코드를 넣어서 동작시키려면 JSP 태그 사이에 삽입해야 한다. HTML, CSS, Javascript 등으로 클라이언트단에서 보여지고 동작할 뼈대를 만든 후 JSP 태그로 JAVA 코드를 넣어 특정 로직을 수행할 수 있도록 한다.
JSP는 서블릿으로 변환된 후 사용자에게는 HTML 형태의 코드만 전송하므로 JSP 태그의 내용은 사용자에게 노출되지 않는다.
[ 지시자 : <%@ %> ]
- JSP 페이지가 컨테이너에게 필요한 메세지를 보내기 위한 태그
- page : JSP 페이지의 전체적인 속성을 지정
- include : 다른 페이지를 현재 페이지에 삽입
- taglib : 태그라이브러리의 태그 사용
- 범위 : JSP 파일 전체 (클래스를 import 할 경우 파일 내 어디서든 접근할 수 있음)
이클립스에서 처음 JSP 파일을 생성하면 가장 윗부분에 생성되는 부분이 JSP 지시자 태그이다. JSP 페이지의 기본 성격을 나타내는 부분이며, 컨테이너가 JSP파일을 서블릿으로 변환시킬 때 필요한 정보를 기술한다. 자바 클래스를 import 시켜서 사용한다거나 다른 페이지를 삽입한다거나 할 때 사용.
page는 대부분 import나 에러 페이지 삽입 등의 용도로 많이 사용되고 taglib(태그라이브러리)는 커스터마이징 태그나 JSTL 같은 태그라이브러리를 삽입해 사용하는 용도이다.
include(디렉티브)는 아래와 같은 코드 형태로 사용되는데, 다른 JSP 페이지의 소스코드를 가져와서 그대로 붙여준다. 해당 JSP 파일을 변환해서 컴파일할 때 include된 페이지도 같이 컴파일돼 삽입한 순서대로 로직을 수행해서 최종 HTML 코드를 생성해준다.
include 에서 파일의 위치는 상대 경로를 사용하기 때문에 같은 폴더에 있다면 그냥 파일 이름을 써주면 되지만 다른 폴더에 있다면 상대경로로 파일 위치를 지정해줘야 한다. 폴더 내의 하위 경로에 있다면 "/폴더/파일명" 형태로 사용해주면 되고 현재 폴더보다 한 칸 위에 있다면 "../파일명", 두 칸 위에 있다면 "../../파일명" 형태로 사용해주면 된다.
[ 선언 : <%! %> ]
- 변수와 메소드를 선언함
- 범위 : 페이지 내 어디서나 접근할 수 있는 전역 변수 및 메소드
변수는 클래스의 필드와 같은 역할이다. 선언된 변수나 메소드는 어디서든 접근해서 사용 가능하다. JSP는 HTML 기반이지만 JSP 태그만 간단히 쓸 때는 클래스를 작성할 때와 크게 다른 점은 없다. 표현식 <% %>에서 변수를 선언하는 것과 다르지 않지만 메소드를 작성할 수 있다는 점에서 다르다.
[ 표현식 : <%= %> ]
- 변수 또는 메소드의 결과값을 출력
- 자바 코드를 삽입하는 것보다 더 간단하게 출력 가능
- 변수나 메소드를 사용할 때 세미콜론(;)을 사용하지 않음
[ 스크립트릿 : <% %> ]
- 자바 코드를 삽입하기 위한 태그
- 기존 자바 언어를 동일하게 사용할 수 있음
[ 액션태그 : <jsp:action> </jsp:action> ]
- <jsp:include> : 다른 페이지의 실행 결과를 현재 페이지에 포함시켜줌
- <jsp:forward> : 페이지 간의 제어를 이동시켜줌
- <jsp:useBean> : 자바빈(java bean)을 페이지에서 사용할 수 있게 해줌
- <jsp:setProperty> : Property 값을 세팅할 때 사용
- <jsp:getProperty> : Property 값을 가져올 때 사용
- <jsp:param> : include, forward 안에서 사용되며, 인자를 추가할 때 사용
액션 태그를 사용할 때는 바디가 따로 있는 경우는 </jsp:action>으로 닫아줘야 하고, 바디가 따로 없는 경우에도 <jsp:action ~~ /> 형태로 닫아줘야 한다.
* <jsp:include> (지시자의 include 디렉티브와 액션태그 include의 차이)
지시자의 include 디렉티브는 위에서 설명했듯이 소스파일의 내용을 그대로 가져다 붙이는 방식이다. 따라서 다른 페이지를 include 하게 되면 결과물인 HTML 코드만 합쳐지는게 아니라 그냥 JSP 파일의 코드가 합쳐진다고 생각하면 된다. include된 페이지의 자원을 가져다쓸 수 있다는 의미이다.
include 디렉티브와 달리 액션태그의 include는 삽입을 요청한 파일의 코드를 가져오는 것이 아니라 해당 파일로 가서 로직을 수행한 뒤 다시 돌아와서 남은 로직을 마저 수행하는 방식이다. 코드를 가져오는게 아니라 해당 페이지로 가서 내용을 수행한다는 의미에서 file = "xx.jsp" 형식이 아닌 page = "xx.jsp" 형식으로 기술된다.
flush = "false" 는 <jsp:include>가 실행돼서 다른 페이지로 넘어가기 전에 출력 버퍼를 모두 클라이언트에게 보낸 후 넘어갈 것이지에 대한 여부를 결정한다. jsp는 HTML로 변환되기 때문에 순서대로 데이터를 전송하는게 아니라 버퍼에 모두 모았다가 한번에 전송해주기 때문이다.
대신 액션태그의 include를 사용하면 include 되는 파일에 파라미터를 전달할 수 있다. <jsp:param> 태그가 이 때 사용된다. 아래 코드와 같이 include 해주면서 파라미터를 넘겨주면 해당 파일에서는 이 값을 받아서 로직을 전개할 수 있다. 이 때 파라미터를 받아서 처리해주는 JSP 파일은 파라미터 없이 단독 실행할 경우 정상 작동이 어렵다. 그래서 사용자의 페이지 접근을 막기 위해 ".jspf" 확장자로 지정할 수 있고, 이 확장자는 다른 JSP에 삽입되기 위한 용도로 쓰이는 파일을 의미한다.
파라미터를 전달할 때 name값은 직접 써줘야 하지만 value 값은 표현식(<%=uid>) 형태로 변수 사용이 가능하다. include 할 파일 이름도 표현식으로 지정 가능하며 디렉티브와 달리 동적으로 사용할 수 있다.
'JAVA' 카테고리의 다른 글
JAVA 스터디 : 커넥션 풀(Connection pool) (0) | 2020.12.18 |
---|---|
JAVA 스터디 : EL (Expression Language) (0) | 2020.12.17 |
JAVA 스터디 : return (0) | 2020.12.10 |
JAVA 스터디 : AWT, Swing (0) | 2020.12.07 |
JAVA 스터디 : GUI (0) | 2020.12.04 |