사용법
<jsp:include page="/views/common/header.jsp">
<jsp:param name="title" value="메인화면"/> <!-- 위 jsp파일에 파라미터값 넘겨줌 -->
</jsp:include>
<jsp:forward page="/views/board.jsp"/>
<!-- jsp로 컨트롤러 역할까지 한다면 forward 사용함 includeTest.jsp들어왔을때 해당경로로 화면이동 -->
EL 표현식
원래는 -> String name = (형변환)request.setAttribute("키값");
예제 1
// 리터럴값 출력방법 (밑 문구 그대로 화면에 출력됨)
<p><%="오랜만에 수업 너무재미있다" %></p>
<p>${"우와 신기하다"}</p>
<p>나이는 ${19}</p>
예제 2
<%
request.setAttribute("name","유병승");
session.setAttribute("age", 19);
application.setAttribute("test","기본데이터");
String email="yoo@yoo.com";
%>
<h3>${name}</h3> // 유병승
<h3>${age }</h3> // 19
<h3>${test }</h3> // 기본데이터
<h3>${email }</h3> <!-- 지역변수는 출력불가능 -->
예제 3
<%
request.setAttribute("su",19);
request.setAttribute("su2",30);
request.setAttribute("su3",30);
request.setAttribute("testData","admin");
%>
// 산술연산 가능 ex)하나만
<h4> ${su*su2} </h4> // 570
// 비교연산 가능 ex)하나만
<p> ${su < su2 } ${su lt su2 }</p> // lt와 < 같음
// gt와 > 같음 // le와 <= 같음 // ge와 >= 같음
// 동등비교 가능
<p> ${su==su2} ${su3 eq su2 } </p> // eq와 == 같음
// el표현식안에서 문자열동등표현식은 equals가 아닌 ==로 표현해도됨
// ne(not equlas)와 != 같음
// 삼항연산자 사용 가능
<input type="checkbox" ${su>10?"checked":""}> // su가 10보다크면 체크박스는 체크되있음
// 메소드 호출 가능
<p>${testData.length()}</p> // 따로 널포인터오류가 안남 (공란으로 처리하기때문에)
<p>${testData.contains("a")?"있다":"없다"}</p>
// 논리연산
&& -> and
|| -> or
// pageContext.request.contextPath -> 상대경로
<a href="${pageContext.request.contextPath }/dataTest.do">데이터 처리실습</a>
예제 4
//저장된 객체 탐색 (Snack 클래스는 이미 만들어졌다고 가정)
Snack s = Snack.builder().type("초콜렛").name("M&N").price(1000).weight(50).build();
Snack s2 = Snack.builder().type("사탕").name("츄파츕스").price(300).weight(10).build();
Snack s3 = Snack.builder().type("젤리").name("하리보").price(2000).weight(60).build();
request.setAttribute("s", s);
request.setAttribute("s2", s2);
request.setAttribute("s3", s3);
request.setAttribute("snacks", List.of(s,s2,s3)); // 리스트로 넣기
request.setAttribute("map", Map.of("s",s,"s2",s2)); // 맵으로 넣기
// 리스트로 저장된 객체 출력
<p>${snacks.get(0).type} ${snacks.get(1).name}</p> // 스낵리스트의 0번째값의 타입과 1번째값의 이름 출력
// 맵으로 저장된 객체 출력
<p>${map.s2.price}</p> // 300
// 밑 3가지는 비슷한 표현이다
<p>${empty snacks} ${not empty snacks }</p> // empty 예약어를 통해 비어있는지 확인가능
<p>${snacks.isEmpty() }</p>
<p>${snacks.size()>0}</p>
예제 5
// 내장객체에 중복키값이 있을 때, EL에서 작은범위부터 큰범위로 탐색함
request-> session -> servletContext 순으로 // 세개 다 공통의 키값이 있으면, 제일작은범위인 request가 출력
// 중복된 키값이 있을 때 특정영역에서 데이터를 찾고싶으면 EL제공하는 내장객체를 이용
<h4>${requestScope.snack }</h4>
<h4>${sessionScope.snack }</h4>
<h4>${applicationScope.snack }</h4>
<h4>${requestScope.snacks.get(0).name}</h4>
예제 6
<h3>파라미터값을 el로 출력하기</h3>
<form action="${pageContext.request.contextPath }/dataTest.do">
<input type="text" name="userId">
<input type="password" name="password">
<input type="submit" value="제출">
<input type="checkbox" name="hobby" value="운동">운동
<input type="checkbox" name="hobby" value="독서">독서
<input type="checkbox" name="hobby" value="코딩">코딩
<input type="checkbox" name="hobby" value="영화">영화
<input type="checkbox" name="hobby" value="등산">등산
<input type="submit" value="제출">
</form>
<h3>${param.userId } ${param.password }</h3> // param객체 이용
// 파라미터값이 다수값인 경우 paramValues를 이용
<h3>${paramValues.hobby[0] }</h3>
<h3>${paramValues.hobby[1] }</h3>
<h3>${paramValues.hobby[2] }</h3>
<h3>${paramValues.hobby}</h3>
예제 7
<h2>컨텍스트에 대한 정보</h2>
<h3>${pageContext.request.contextPath }</h3>
<h3>${pageContext.request.requestURI }</h3>
<h3>${pageContext.request.requestURL }</h3>
<h2>Cookie 정보 출력하기</h2>
<h3>cookie : ${cookie }</h3>
<h3>cookie : ${cookie.JSESSIONID.name}</h3>
<h3>cookie : ${cookie.JSESSIONID.value}</h3>
<h3>Header정보 출력하기</h3>
<h3>${header }</h3>
<h3>${header["user-agent"]}</h3>
<h3>${header.host}</h3>
1. JSTL 라이브러리 다운
tomcat.apache.org -> 좌측 메뉴바에 Taglibs 클릭
-> 4가지 JAR 파일 다운 (Impl, Spec, EL, Compat)
-> lib 파일에 4가지 jar파일 넣기
2. 지시자로 taglib 선언
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
✅ 코어태그 활용하기
c:out 태그
: value속성에 있는 값을 페이지에 출력할 때 사용하는 태그
출력 방법에는 총 3가지가 있음
<c:out value="우와 코어태그로 출력"/> // 코어태그로 문구 출력
<%-- ${"$태그로 출력"}
<%="그냥 출력"%>
코어태그로 출력하는것이 가장 보안에 뛰어남 !!!
c:set 태그
: 내장객체영역에 데이터를 key:value 형식으로 저장할 때 사용하는 태그
c:set 태그 속성
(1) : var : key값(변수명임)
(2) : value : key에 저장될 값, EL표현식, 리터럴사용
(3) : scope : 변수가 선언될 내장객체를 지정, request, session, application
c:out 태그
와 c:set 태그
예시
// 변수 선언하기
<c:set var="path" value="${pageContext.request.contextPath}"/> // ${path} -> 상대주소나옴
<c:set var="comment" value="점심 맛잇게 먹었나요?"/> // comment라는 변수 생성
<p>${comment}</p> // 점심 맛잇게 먹었나요? 출력
<c:set var="path" value="${pageContext.request.contextPath}"/>
<p>절대경로 : ${path}</p> // 해당 상대경로 출력
<c:set var="test" value="requestData" scope="request"/>
<c:set var="test" value="sessionData" scope="session"/>
<c:set var="test" value="applicationData" scope="application"/>
<p>${test }</p> // 이름이 3개가 동일하기때문에, 제일작은범위인 request에서 출력됨
// 출력하기
<p><c:out value="점심은 뭐드셨나요?"/></p>
<p><c:out value="${path }"/></p> // EL표현식으로 출력가능
<c:set value="있는값" var="test11"/> // 변수명 = test11 값 : "있는값"
<p><c:out value="${test11 }" default="없음"/> // 해당 값이 없으면 default값이 나옴
c:url 태그
<c:url var="cesearch" value="http://search.naver.com/search.naver">
<c:param name="query" value="김찬은"/> // 해당네이버페이지에서 파라미터값 넘겨줌
</c:url>
<a href="<c:out value='${cesearch }'/>">검색</a> // 검색누르면 네이버페이지에서 김찬은이 검색한 화면이나옴
✅ 코어태그로 제어문 활용
c:if 태그
c:if 태그
예시 <%
List<String> names=List.of("유병승","조장흠","김찬은","허성현","홍승우");
request.setAttribute("names", names);
%>
<c:if test="${empty names}">
<p>이름이 저장되지 않습니다</p>
</c:if>
<c:if test="${not empty names}"> // c:if 문에는 else문이 따로없음
<p>이름이 저장되었습니다</p>
</c:if>
c:choose 태그
:자바에서 스위치문을 사용하는것과 비슷
c:choose 태그
예시 <c:choose>
<c:when test="${su>10 }">
<p>10보다 크다</p>
</c:when>
<c:when test="${su>5 }">
<p>5보다 크다</p>
</c:when>
<c:otherwise>
<p>그냥 수다</p>
</c:otherwise>
</c:choose>
✅ 코어태그로 반복문 활용
c:forEach 태그
[속성]
begin : 시작번호
end : 끝번호
step : 간격
var : 변경되는 값을 저장하는 변수
items : 배열,리스트
varStatus : 반복문의 정보를 가지고 있는 객체(index, 반복횟수,시작,끝 정보제공)
c:choose 태그
예시 // 기본반복문 실행
<c:forEach begin="1" end="10" step="1" var="i"> // 1~10 출력
<p><c:out value="${i }"/></p>
</c:forEach>
// 리스트, 배열에 저장된 데이터 반복
<c:forEach var="name" items="${names }" varStatus="vs">
<li>${vs.index} ${vs.count} ${name }</li>
// vs.index 해당 값들의 인덱스번호를 알 수 있음
// vs.count 해당 값들의 번호를 알 수 있음
// vs.first : 첫번째 값이면 true 아니면 false
// vs.last : 마지막 값이면 true 아니면 false
</c:forEach >
<c:if test="${not empty snacks}"> // snacks 리스트가 비어있지않을 때
<c:forEach var="s" items="${snacks}" varStatus="vs">
<tr>
<td><c:out value="${s.type }"/></td>
<td><c:out value="${s.name }"/></td>
<td><c:out value="${s.price }"/></td>
<td><c:out value="${s.weight }"/></td>
<td><c:out value="0"/></td>
</tr>
</c:forEach>
c:forTokens 태그
c:forTokens 태그
속성c:forTokens 태그
예시 <c:forTokens var="h" items="운동,여행,코딩,게임" delims=",">
<p>${h }</p> // 운동 여행 코딩 게임 순으로 출력 (개행있음)
</c:forTokens>
c:import 태그
: 다른페이지를 불러와 내용을 변수에 저장하는 태그