JSP Action Tag
XML 기술을 이용하여 기존의 JSP 문법을 확장하는 매커니즘을 제공하는 태그 웹 브라우저에서 실행되는 것이 아니라 웹 컨테이터에서 실행되고 결과만 브라우저로 보냄
표준 액션 태그
JSP:include
<%@ include file="파일명" %> 과 쓰임은 도일하나
jsp파일이 java파일로 변환될 때 사입되는 <%@ include %>와는 달리 jsp 파일이 java파일로 바뀌고 컴파일이 완료되어 런타임 시 삽입
header.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<header style="height:200px; background:red;">
<h1>헤더부분 입니다.</h1>
</header>
</body>
</html>
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<jsp:include page="header.jsp"/>
<h1> 컨텐츠 부분입니다.</h1>
</body>
</html>
jsp:forward
하나의 JSP페이지에서 다른 JSP페이지로 요청 처리를 전달할 때 사용 전달하는 페이지에서 request, response객체가 같이전달되며 URL은 변경되지 않음
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- index.jsp로 포워딩처리 -->
<jsp:forward page="index.jsp"/>
</body>
</html>
EL
JSP 2.0버전에서 추가됨
<%= %>, out.print()와 같이 JSP에 쓰이는 Java코드를 간결하게 사용하는 방법으로 화면에 표현하고자 하는 코드를 %{value} 형식으로 표현하여 작성
form.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="indexGo.jsp" method="get">
이름 : <input type="text" name="name"> <br>
나이 : <input type="text" name="age"> <br>
성별 : <input type="text" name="gender"> <br>
<input type="submit" value="전송">
</form>
</body>
</html>
indexGo.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%--
원래 jsp 스트립틀릿 이용해서 파라미터값 가져올려면
request.getParameter("name") 이런식으로 받아왔어야했는데 EL에서는 param.네임명
으로 값 가져올수 있다.
--%>
<h1>이름 : ${ param.name }</h1>
<h2>나이 : ${ param.age }</h2>
<h3>성별 : ${ param.gender }</h3>
</body>
</html>
JSTL
JSP에서 사용하는 커스텀 태그 공통으로 사용하는 코드의 집합을 사용하기 쉽게 태그화 하여 표준으로 제공한 것을 말함
jstl-1.2jar파일 설치후 이클립스 프로젝트 내 WEB-INF/lib 내에 등록하고 사용하고자 하는 jsp파일에 선언을해서 사용해야한다.
JSTL 라이브러리 등록
https://mvnrepository.com/artifact/javax.servlet/jstl/1.2
위 링크로 들어가
아래의 JSTL 1.2.jar 파일다운로드한다
혹은 아래파일 다운로드 한다.
그다음에 프로젝트의 WEB-INF/lib/... 에다가 라이브러리 붙여넣기한다.
이러면 JSTL 사전준비는끝!
JSTL 태그 종류
Core Tags : 변수와 url, 조건문, 반복문 등의 로직과 관련된 JSTL문법 제공
<%@ taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c” %>
Formatting : 메세지 형식이나 숫자, 날짜 형식과 관련된 포맷 방식 제공
<%@ taglib uri=“http://java.sun.com/jsp/jstl/fmt” prefix=“fmt” %>
Function : trim, substring과 같은 여러 문자열 처리 함수 제공
그외
XML Tags, SQL Tags 의 두가지 가 존재하는데 많이안쓰여서 패스하였다.
Core Tags
jsp파일의 상단에 아래처럼 입력
아래의 taglib를 입력해야 jstl 라이브러리 사용가능
prefix 는 접두사를의미 보편적으로 CoreTags는 c 접두사를 사용함
c:set
변수를 선언하고 나서 그 변수에 초기 값 대입
자바의 변수라고 생각하면된다. 하지만 c:set은 항상 초기값 입력해줘야함.
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<c:set var="name" value="홍길동"/>
<c:set var="age" value="66"/>
이름 : ${ name } <br>
나이 : ${ age }
</body>
</html>
c:set scope 속성
scope속성을 이용하면 page영역 뿐만 아니라 request, session,application 영역에 속성 저장 가능 (미 설정 시 기본 값은 apge)
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%--
아래방식은 서블릿은
request.setAttribute();
session.setAttribute();
랑 비슷한 맥락임
--%>
<c:set var="name" value="김가나" scope="request"/>
<c:set var="gender" value="남" scope="session"/>
이름 : ${ name } <br>
성별 : ${ gender }
</body>
</html>
c:set 이용해 배열설정하기
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<c:set var="colorArr" scope="request">
red, yellow, green, silver, pink
</c:set>
색상 : ${ colorArr }
</body>
</html>
배열은 forEach할때 사용할예정
c:remove
<c:set>으로 선언한 변수는 page, request, session, application영역에 속성으로 저장되기 때문에 삭제해야 할 필요가 있을 때 사용
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<c:set var="name" value="홍길동" scope="page"/>
<c:set var="name" value="김길동" scope="request"/>
<c:set var="name" value="이길동" scope="session"/>
<c:set var="name" value="나길동" scope="application"/>
<%-- session의 name삭제 --%>
<c:remove var="name" scope="session"/>
page : ${pageScope.name } <br>
request : ${requestScope.name } <br>
session : ${sessionScope.name } <br>
application : ${applicationScope.name } <br>
<br><br>
<%-- scope 지정하지않고 remove 작성시 "name" 속성 전체삭제됨 --%>
<c:remove var="name"/>
page : ${pageScope.name } <br>
request : ${requestScope.name } <br>
session : ${sessionScope.name } <br>
application : ${applicationScope.name } <br>
</body>
</html>
c:out
데이터 출력할 때 사용하는 태그로 <, >, & 특수 문자를 자동으로 이스케이프 시퀀스로 바꿔줌
출력할 데이터에 포함된 특수문자를 태그의 일부로 인식시키고 싶을 땐 escapeXml이라는 속성을 추가하고 false값 지정
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<c:out value="<h2>안녕하세요</h2>"></c:out>
<c:out value="<h2>안녕하세요</h2>" escapeXml="false"></c:out>
</body>
</html>
c:if
자바 프로그램의 if문과 비슷한 역할을 하는 태그로 조건식은 test라는 속성 값으로 지정(이 때 조건식은 반드시 EL형식으로 기술)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<c:if test="${1 > 2}">
<h1>1은 2보다 큽니다.</h1>
</c:if>
<c:if test="${1 < 2}">
<h1>1은 2보다 작습니다.</h1>
</c:if>
</body>
</html>
c:choose
자바 프로그램의 switch문과 비슷한 역할을 하는 태그로
<c:when>, <c:otherwise> 태그와 함께 사용되는데, 각각 switch문의 case, default절과 비슷한 역할
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<c:set var="num" value="1"/>
<c:choose>
<c:when test="${ num == 1 }">
<h1>1입니다.</h1>
</c:when>
<c:when test="${ num == 2 }">
<h1>2입니다.</h1>
</c:when>
<c:when test="${ num == 3 }">
<h1>3입니다.</h1>
</c:when>
<c:otherwise>
<h1>일치하는 숫자가 없습니다.</h1>
</c:otherwise>
</c:choose>
</body>
</html>
num변수의 값이 1일시
num변수의 값이 2일시
num변수의 값이 3일시
num변수의 값이 4일시
c:foreach
자바의 for, for-in문에 해당하는 기능 제공
속성
items | 반복할 객체 명 |
begin | 반복이 시작할 요소 번호 |
end | 반복이 끝나는 요소 번호 |
step | 반복할 횟수 번호 |
var | 현재 반복 횟수에 해당하는 변수 이름 |
varStatus | 현재 반복에 해당하는 객체 요소 |
varStatus
current | 현재 반복 횟수 | 상태 값 명.current |
index | 반복 라운드의 제로기반 인덱스 | 상태 값 명.index |
count | 반복 라운드의 1기반 인덱스 | 상태 값 명.count |
first | 현재 라운드가 반복을 통한 첫 번째임을 의미 | 상태 값 명.first |
last | 현재 라운드가 반복을 통한 마지막 번째임을 의미 | 상태 값 명.last |
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<c:set var="sName">
홍길동, 김길동, 이길동, 사길동, 오길동
</c:set>
<ul>
<c:forEach var="name" items="${ sName }" varStatus="nameSt">
<li>${ nameSt.count } 번 ${name } 학생</li>
</c:forEach>
</ul>
</body>
</html>
'프로그래밍 > JSP' 카테고리의 다른 글
JSP - 미니 프로젝트(6. 공지사항 글수정, 글삭제, 목록 검색) (0) | 2021.08.31 |
---|---|
JSP - 미니프로젝트(5. 공지사항 목록, 글쓰기,글 상세, ) (0) | 2021.08.30 |
JSP - 미니 프로젝트(5. 정보수정) (0) | 2021.08.23 |
JSP - 미니 프로젝트(4. 회원가입) (1) | 2021.08.23 |
JSP - 미니 프로젝트(3. 로그아웃) (0) | 2021.08.23 |