taglib 디렉티브 태그
: 현재 JSP 페이지에 표현언어, JSTL, 사용자 정의 태그 등의 라이브러리를 설정하는 태그이다.
<%@ taglib uri = "경로" prefix "태그 식별자" %>
<%@ taglib uri = "http://java.sun.com/jsp/jstl/core" prefix = "c" %>
<body>
<c:out value = "JSTL Core 태그 라이브러리" />
</body>
위와 같은 형태로 사용하며, 별도의 JSTL을 위한 jar 파일을 webapp/WEB-INF/lib 폴더 안에 넣어줘야한다.
위의 코드의 <c:out은 out.println과 <%= %>와 같은 역할을 한다.
기존 표현식과의 차이점은 자바코드에 비해 가독성과 유지보수성이 좋아지고 MVC 패턴을 적용하기 좋은 형태가 된다.
JSTL 태그
: 유용한 JSP 태그의 모음으로써 반복문, 조건문, 논리적 구조 작업, XML 문서 조작, SQL 조작 수행등을 위한 태그를 지원한다.
반복문 사용하기
<%@ taglib uri = "http://java.sun.com/jsp/jstl/core" prefix = "c" %>
<body>
<c:forEach var = "k" begin = "1" end = "10" step = "1">
<c:out value = "${k}" />
</c:forEach>
</body>
위의 코드는 JSTL을 이용해 JSP에서 반복문을 구현한 것이다.
기존 java에서 쓰던 문법인 for(){}과 대응되며, for(초기식; 조건식; 증감식;)과 같은 형태를 하고있다.
이와같이 JSTL의 기능을 이용하여 java가 아닌 JSP 안에서 유용한 기능들을 구현할수 있다.
액션 태그
: 서버나 클라이언트에게 어떤 행동을 하도록 명령하는 태그이다.
액션 태그 | 형식 | 설명 |
forward | <jsp:forward ... /> | 다른 페이지로 이동과 같은 페이지 흐름을 제어한다. |
include | <jsp:include ... /> | 외부 페이지의 내용을 포함하거나 페이지를 모듈화한다. |
useBean | <jsp:useBean ... /> | JSP페이지에 자바빈즈를 설정한다. |
setProperty | <jsp:setProperty ... /> | 자바빈즈의 프로퍼티 값을 설정한다. |
getProperty | <jsp:getProperty ... /> | 자바빈즈의 프로퍼티 값을 얻어온다. |
param | <jsp:param ... /> | <jsp:forward>, <jsp:include>, <jsp:plugin> 태그에 인자를 추가한다. |
사용 형태는 <jsp:액션태그 ... />의 형태를 가지며 주로 사용되는 태그는 위의 6가지가 있다.
종료태그는 반드시 있어야 하며 <jsp:액션태그 ... /> 또는 <jsp:액션태그> </jsp:액션태그>의 형태로 쓴다.
forward
: 다른 페이지로 이동하는 태그이다.
<jsp:forward page = "파일명" />
이때 파일명은 이동할 페이지의 외부 파일명이고, 현재 JSP 파일과 같은 디렉터리에 있으면 파일명만 설정하고, 그렇지 않으면 전체 URL(또는 상대경로)을 설정해야한다.
forward는 페이지를 이동 할 때 출력 버퍼를 지우고 넘어가기 때문에 태그가 선언된 지점 이전의 HTML 코드는 손실되며, 현재 페이지가 이미 전달버퍼로 채워진 경우에는 전달이 중단될 때 까지의 해당 내용을 웹 서버에서 응답으로 보낸다.
그렇기 때문에 큰 출력의 페이지에서는 의도치 않은 내용을 보낼수 있으므로 주의해야 한다.
액션 태그를 사용하는 이유
액션 태그를 사용하는 이유는 스크립트 태그를 이용하여 JSP 페이지에서 직접적인 자바 코드를 사용하지 않기 위한 이유와 <%와 같은 스크립트 태그를 사용하면 코드를 접을수 없어 가독성이 떨어지기 때문이다.
inclue 액션 태그
: include 디렉티브 태그처럼 현재 JSP 페이지의 특정 영역에 외부 파일의 내용을 포함하는 태그이다.
include 액션 태그는 include 디렉티브 태그와 비슷해보이지만 몇가지 차이점이 있다.
구분 | include 액션 태그 | include 디렉티브 태그 |
처리 시간 | 요청 시 자원을 포함한다. | 번역 시 자원을 포함한다. |
기능 | 별도의 파일로 요청 처리 흐름을 이동한다. | 현재 페이지에 삽입한다. |
데이터 전달 방법 | request 기본 내장 객체나 param 액션 태그를 이용하여 파라미터를 전달한다. | 페이지 내의 변수를 선언한 후 변수에 값을 저장한다. |
용도 | 화면의 레이아웃의 일부분을 모듈화 할때 주로 사용한다. | 다수의 JSP 웹 페이지에서 공통으로 사용되는 코드나 저작권과 같은 문장을 포함하는 경우에 사용한다. |
기타 | 동적 페이지에 사용한다. | 정적 페이지에 사용한다. |
<jsp:include> 액션 태그는 현재 JSP 파일(1번 파일)에서 다른 JSP 파일(2번 파일)을 실행한 후, 그 결과(HTML 및 텍스트)를 가져와 현재 JSP 파일에 삽입하는 방식이다.
이 과정에서 1번 파일에서는 자바 코드가 실행되지 않고, 2번 파일의 자바 코드가 먼저 실행된 후 결과가 HTML 형태로 1번 파일에 포함된다.
즉, 2번 파일의 실행 결과를 가져오는 방식이므로 1번 파일에서는 2번 파일의 Java 코드를 직접 실행하지 않는다.
그에 반해 include 디렉티브 태그는 단순히 코드를 가져와서 삽입하는 것이라는 차이점이 있다.
param 액션 태그
: 현재 JSP 페이지에서 다른 페이지에 정보를 전달하는 태그이다.
<jsp:forward page = "파일명">
<jsp:param name = "매개변수명1" value = "매개변수값1" />
<jsp:param name = "매개변수명2" value = "매개변수값2" />
</jsp:forward>
param 액션 태그는 단독 사용이 불가능하며, forward나 include의 태그 내부에 사용된다.
또한 다른 페이지에 여러 개의 정보를 전송해야 할 때는 다중의 param 액션 태그를 적용할 수 있다.
1번 파일에서 2번 파일로 param을 이용해서 정보를 전달할때
1번 파일과 2번 파일 사이에 request라는 내장객체를 거치게 된다.
그렇기 때문에 1번 파일에서 param을 이용해 보낸 정보를 2번 파일에서 얻기 위해서는
request.getParameter("매개변수명") 의 형태로 정보를 꺼내올수 있다.
자바빈즈 액션 태그
: 객체생성(싱글톤)
자바빈즈는 자바의 싱글톤 형식의 객체생성과 유사한 기능이다.
자바빈즈를 통해 생성된 객체는 싱글톤과 동일하게 하나만 존재할수 있고,
<jsp:useBean id ="자바빈즈 식별이름" class = "자바빈즈 이름" scope = "범위" />
위의 형식으로 선언 및 초기화 시킬수 있다.
id는 참조변수, class는 생성할 객체 이름(풀네임) , scope는 이 자바빈즈가 유효한 범위를 설정하는것으로
범위에는 page(기본값), request(1번), session(여러번), application(프로그램 종료시까지)가 있으며
사용 목적에 맞게 사용하면 된다.
기존의 객체를 생성하려면
java.util.Date date1 = new java.util.Date(); 와 같이 풀네임으로 생성해줘야 하며
이 경우에는 싱글톤이 아닌 기존 자바의 일반 객체의 형태가 된다.
<jsp:useBean id = "date" class = "java.util.Date" /> useBean을 이용해 생성한 싱글톤 객체
useBean으로 생성한 객체에 접근할때는 getter setter 대신 getProperty, setProperty를 사용한다.
<jsp:setProperty name = "person" propery = "id" value = "20230824" />
<jsp:getProperty name = "자바빈즈 식별이름" property = "프로퍼티 이름" />
'프로그래밍 공부' 카테고리의 다른 글
2025.02.12 JSP 공부 (0) | 2025.02.12 |
---|---|
2025.02.11 JSP 공부 (0) | 2025.02.11 |
2025.02.07 JSP 공부 (0) | 2025.02.07 |
2025.02.06 JSP 공부 (0) | 2025.02.06 |
2025.02.05 java 공부 (0) | 2025.02.05 |