액션태그 (표준액션태그 vs 커스텀액션태그)

최주영·2023년 7월 4일
0

JSTL

목록 보기
1/2

✅ 표준 액션 태그

사용법

  • 별도의 라이브러리 설치 없이 JSP 페이지에서 바로 사용 가능
  • 태그 앞에 jsp접두어가 붙음
  • 예시
 <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 표현식

  • java코드로 생성된 데이터를 페이지에 출력해주는 표현식
  • ${" "} 로 공용객체에 저장된 데이터를 페이지에 출력
  • request, session, application(ServletContext)을 setAttribute() 메소드로 저장한 데이터를 자동으로 탐색해서 key값을 기준으로 데이터를 가져옴
  • EL이 자동으로 getter를 호출하기 때문에 (형변환을 하지 않아도됨!)
원래는 ->  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

  • requestScope, sessionScope, applicationScope
// 내장객체에 중복키값이 있을 때, 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

  • param, paramValues
	<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>

✅ 커스텀 액션 태그

  • JSTL 이용하는 방법

1. JSTL 라이브러리 다운
tomcat.apache.org -> 좌측 메뉴바에 Taglibs 클릭
-> 4가지 JAR 파일 다운 (Impl, Spec, EL, Compat)
-> lib 파일에 4가지 jar파일 넣기

2. 지시자로 taglib 선언

  • jsp 파일 상단에 JSTL을 적용하기 위해서는 반드시 페이지에 지시자로 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속성에 있는 값을 페이지에 출력할 때 사용하는 태그

  • c:out 태그 속성
    (1) : value : 출력될 데이터, EL표현식, 리터럴을 사용
    (2) : default : 출력될 데이터가 없을 때 대체로 출력하는 값
    (3) : escapeXml : 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 태그 속성
    (1) : test -> 조건식 (true, false)
    (2) : var -> 조건식에 결과를 저장하는 변수

  • 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 태그

  • 방법(1) : 기본반복문활용 -> i을 순차적으로 출력하는 방법
  • 방법(2) : 리스트, 배열에 저장된 데이터를 출력
[속성]
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 태그 속성
    (1) : var : 분할된값이 저장되는 변수
    (2) : items : 분할할 대상이 되는 문자열
    (3) : delims : 기준이 되는 기호
  • c:forTokens 태그 예시
	<c:forTokens var="h" items="운동,여행,코딩,게임" delims=",">
		<p>${h }</p>  // 운동 여행 코딩 게임 순으로 출력 (개행있음)
	</c:forTokens>

c:import 태그 : 다른페이지를 불러와 내용을 변수에 저장하는 태그


profile
우측 상단 햇님모양 클릭하셔서 무조건 야간모드로 봐주세요!!

0개의 댓글