[Servlet&JSP] Chap 13. Action Tag, EL, JSTL

김승현·2021년 12월 15일
0

Action Tag

  • JSP Action 태그는 XML 기술을 이용하여 기존의 JSP 문법을 확장하는 메커니즘을 제공하는 태그

  • 웹 브라우저에서 실행되는 것이 아니라, 웹 컨테이너에서 실행되고 결과만 브라우저로 보냄
    (JSP의 자바코드처럼)

  • XML

    • eXtensible Markup Language의 약자로써 기존 HTML을 확장한 형태의 언어로써 데이터를 교환하기 위한 사용자 정의 태그

    • 태그형태를 이용해서 데이터를 표현한 방식

    • 태그 이름이 key, 태그 사이에 있는 데이터가 value 형식

    • 기존 HTML은 정해진 태그 형태였다면 XML은 데이터를 표현하기 위하여 자유로운 태그형식을 사용하는 방법

    • ex) <welcome-file>index.html</welcome-file>
      -> HTML 태그에는 <welcome-file>이라는 의미가 가진 태그는 없지만 톰캣에서는 xml 방식을 사용하여
      <welcome-file> 이라는 태그 안에 있는 데이터를 가져와서 기본페이지로 활용하도록 시스템을 만들어 놓은것



표준 액션 태그

  • JSP 에서 기본으로 제공하는 액션 태그

jsp:include

  • 현재 페이지에 특정 페이지를 포함할 때 사용

jsp:forward

  • 현재 페이지 접근시 특정 페이지로 이동 시킴
  • (view.forward()와 동일)

jsp:param

  • jsp:include,jsp:forward의 하위요소로 사용되며, 해당 페이지에 전달할 값을 기록할 때 사용

jsp:usebean

  • Java Bean객체를 사용하기 위한 태그로, JSP에서 사용하는 VO,DTO,Entity와 동일 함

jsp:setProperty

  • Java 객체 사용 시 Setter와 동일한 역할

jsp:getProperty

  • Java 객체 사용 시 Getter와 동일한 역할


jsp:include

  • <%@ include file="파일명" %> 과 쓰임이 동일
  • <%@ include %> : jsp 파일이 java 파일로 변환될 때 삽입
  • jsp:include: jsp 파일이 java 파일로 바뀌고 컴파일이 완료 되어 런타임 시에 삽입
    ※ 런타임 : 실행되어 실제 코드가 호출 될때

👨‍🎓문법 & 예시

<jsp:include page=“파일 명" />
<jsp:include page=“./header.html”/>



jsp:forward

  • 하나의 JSP 페이지에서 다른 JSP 페이지로 요청 처리를 전달할 때 사용함
  • 전달하는 페이지에서 request,response 객체가 같이 전달되며, URL은 변경되지 않음
  • RequestDispatcher 객체, pageContext.forward 와 유사

👨‍🎓문법 & 예시

문법 : <jsp:forward page=“파일 명” />
예시 : 
<% if( str.equals(“A”)) { %>
<jsp:forward page=“./A_Class.jsp”/>
<% } else { %>
<jsp:forward page=“./B_Class.jsp”/>
<% } %>



jsp:useBean

  • java class를 참조하여 빈(Bean) 객체를 생성하고, setProperty와 getProperty를 통해 값을 저장, 조회할 수 있으며, 이미 같은 이름의 객체가 생성된 경우 기존의 객체를 참조 함

👨‍🎓문법 & 예시

문법 :
<jsp:useBean id=“객체명” class=“패키지명.클래스명” scope=“범위지정자” />
예시 :
<jsp:useBean id=“m” class=“test.member.model.vo.Member” scope=“request”>
<jsp:setProperty name=“m” property=“member_name” value=“김유신”/>
<jsp:getProperty name=“m” property=“member_age” />
</jsp:useBean>
<jsp:getProperty name=“m” property=“member_id” />



EL

  • Expression Language(표현언어)의 약자
  • 값을 표현하는데 사용되는 스크립트 언어

EL에서 제공하는 기능

  • JSP의 기본 객체(4가지)가 제공하는 영역의 속성 사용 가능

    • pageScope
    • reqeustScope
    • sessionScope
    • applicationScope
  • 집합객체 접근방법 제공

    • 수치,관계,논리연산자 제공
    • 자바클래스 메소드 호출 가능
    • EL에서 자체 기본객체 제공
  • 작성 방법 : ${scope.expr}

    • scope설정, expr 부분에 EL로 정의한 문법에 따라 값을 표시 하게 됨
    • scope 생략시 우선 순위 접근(page -> request -> session -> application)
    • Attribute, request의 파라미터, ServletContext의 초기화 파라미터 등에 접근 가능
    • .(dot)연산자를 사용하여 Attribute에 저장된 Map이나 Beans(VO) 내부의 값에 접근 가능
    • [] 연산자를 사용하여 배열이나 리스트 형태도 접근이 가능함



VO 처리

  • ELTestServlet.java
Member m = new Member(
	1,
	"mslove",
	"1234",
	"노땡수",
	20,
	"mslove@naver.com",
	"01012223333",
	"경기도 부천시 원미구",
	'남',
	"등산, 댄스",
	new Date(2213112312L),
	'N',
	"USER"
);
		
RequestDispatcher view =request.getRequestDispatcher("/views/el/elTest1.jsp");
request.setAttribute("member", m);
view.forward(request, response);


  • /views/el/elTest1.jsp
ID : ${requestScope.member.userId }<br>
PW : ${requestScope.member.userPwd }<br>
이름 : ${requestScope.member.userName }<br>
나이 : ${requestScope.member.age }<br>
폰번호 : ${requestScope.member.phone }<br>
주소 : ${member.address }<br>
주소2 : ${member["address"] }<br>
주소3 : ${requestScope["member"]["address"] }<br>
성별 : ${member.gender }<br>
이메일 : ${member.email }<br>
객체 값 : ${member } <br>



Map 처리

  • ELTestServlet.java
HashMap<String, String> map = new HashMap<String, String>();
map.put("id", "user00");
map.put("pw", "9999");
map.put("name", "홍갈동");
		
HttpSession session = request.getSession();
session.setAttribute("data", map);
response.sendRedirect("/views/el/elTest2.jsp");


  • /views/el/elTest2.jsp
ID : ${sessionScope.data.id }<br>
PW : ${sessionScope.data.pw }<br>
이름 : ${sessionScope.data.name }<br>



배열 처리

  • ELTestServlet.java
Member[] m = new Member[2];
m[0]= new Member("mslove11","1234","노땅수",20);
m[1]= new Member("mslove22","2222","노이수",30);
		
RequestDispatcher view = equest.getRequestDispatcher("/views/el/elTest3.jsp");
request.setAttribute("arr", m);
view.forward(request, response);


  • /views/el/elTest3.jsp
<h2>1번째 회원 정보</h2>
ID : ${requestScope.arr[0].userId }<br>
PW : ${requestScope.arr[0].userPwd}<br>
이름 : ${requestScope.arr[0].userName }<br>
나이 : ${requestScope.arr[0].age }<br>
	
<br>

<h2>2번째 회원 정보</h2>
ID : ${requestScope.arr[1].userId }<br>
PW : ${requestScope.arr[1].userPwd}<br>
이름 : ${requestScope.arr[1].userName }<br>
나이 : ${requestScope.arr[1].age }<br>



List 처리

  • ELTestServlet.java
ArrayList<Member> list = new ArrayList<Member>();
list.add(new Member("mslove11","1111","노일수",20));
list.add(new Member("mslove22","2222","노이수",30));
list.add(new Member("mslove33","3333","노삼수",40));
		
RequestDispatcher view = equest.getRequestDispatcher("/views/el/elTest4.jsp");
request.setAttribute("list", list);
view.forward(request, response);


  • /views/el/elTest4.jsp
<h2>1번째 회원 정보</h2>
ID : ${list[0].userId }<br>
PW : ${list[0].userPwd }<br>
이름 : ${list[0].userName }<br>
나이 : ${list[0].age }<br>
	
	
<h2>2번째 회원 정보</h2>
ID : ${list[1].userId }<br>
PW : ${list[1].userPwd }<br>
이름 : ${list[1].userName }<br>
나이 : ${list[1].age }<br>
	
<h2>3번째 회원 정보</h2>
ID : ${list[2].getUserId()}<br>
PW : ${list[2].getUserPwd() }<br>
이름 : ${list[2].getUserName() }<br>
나이 : ${list[2].getAge() }<br>



Map & List 처리

  • ELTestServlet.java
HashMap<String, ArrayList<Member>> map = new HashMap<String, ArrayList<Member>>();
		
ArrayList<Member> list1 = new ArrayList<Member>();
ArrayList<Member> list2 = new ArrayList<Member>();
		
list1.add(new Member("mslove11","1111","노일수",10));
list1.add(new Member("mslove22","2222","노이수",20));
		
list2.add(new Member("mslove33","3333","노삼수",30));
list2.add(new Member("mslove44","4444","노사수",40));
		
map.put("list1", list1);
map.put("list2", list2);
		
HttpSession session = request.getSession();
session.setAttribute("data", map);
		
response.sendRedirect("/views/el/elTest5.jsp");


  • /views/el/elTest5.jsp
<h2>1번째 회원정보</h2>
ID : ${sessionScope.data.list1[0].userId }<br>
PW : ${sessionScope.data.list1[0].userPwd }<br>
이름 : ${sessionScope.data.list1[0].userName }<br>
나이 : ${sessionScope.data.list1[0].age }<br>
	
<h2>2번째 회원정보</h2>
ID : ${sessionScope.data.list1[1].userId }<br>
PW : ${sessionScope.data.list1[1].userPwd }<br>
이름 : ${sessionScope.data.list1[1].userName }<br>
나이 : ${sessionScope.data.list1[1].age }<br>
	
<h2>3번째 회원정보</h2>
ID : ${sessionScope.data.list2[0].userId }<br>
PW : ${sessionScope.data.list2[0].userPwd }<br>
이름 : ${sessionScope.data.list2[0].userName }<br>
나이 : ${sessionScope.data.list2[0].age }<br>
	
<h2>4번째 회원정보</h2>
ID : ${sessionScope.data.list2[1].userId }<br>
PW : ${sessionScope.data.list2[1].userPwd }<br>
이름 : ${sessionScope.data.list2[1].userName }<br>
나이 : ${sessionScope.data.list2[1].age }<br>



EL로 연산자 사용

비교 표현식

  • eq : equal ( = )
  • ne : not equal ( <> )
  • lt : little ( < )
  • le : little or equal ( <= )
  • gt : greater ( > )
  • ge : greater or equal ( >= )

  • /views/el/elTest6.jsp
${2+5 } <br>
${4/5 } <br>
${5 div 6 } <br>
${2 <3 }<br>
${2 gt 3}<br>
${3.1 le 3.2 }<br>
${(5>3) ? 5:3 }<br>	



EL 내장 객체

  • pageScope
  • requestScope
  • sessionScope
  • applicationScope
  • header

  • /views/el/elTest7.jsp
${header["host"] }<br>
${header["user-agent"] }<br>
${header["Cookie"] }<br>



EL param과 param Values

  • pageScope
  • requestScope
  • sessionScope
  • applicationScope
  • header

  • /views/el/elTest8.jsp
<form action="/views/el/el_param.jsp" method="get">
	텍스트 작성 : <input type="text" name="text"><br>
	취미 : <br>
	<input type="checkbox" name="hobby" value="등산">등산
	<input type="checkbox" name="hobby" value="댄스">댄스
	<input type="checkbox" name="hobby" value="노래">노래
	<input type="submit" value="전송">
</form>

  • /views/el/el_param.jsp
텍스트 : ${param.text }<br>
취미 선택 값 : ${paramValues.hobby[0] }, 
        	${paramValues.hobby[1] }, 
		${paramValues.hobby[2] }<br>
	



EX 계산기 만들기


  • /views/el/elTest9.jsp
<form action="/el/cal.do" method="post">
	<input type="text" name="su1">
	<select name ="yun">
		<option value="+">+</option>
		<option value="-">-</option>
		<option value="*">*</option>
		<option value="/">/</option>
	</select>
	<input type="text" name="su2">
	<input type="submit" value="계산하기">
</form>

  • ELCalculatorServlet.java
int su1 = Integer.parseInt(request.getParameter("su1"));
int su2 = Integer.parseInt(request.getParameter("su2"));
char yun = request.getParameter("yun").charAt(0);
		
String result ="";
switch(yun) {
	case '+':result=String.valueOf((su1+su2)); break;
	case '-':result=String.valueOf((su1-su2)); break;
	case '*':result=String.valueOf((su1*su2)); break;
	case '/':result=String.valueOf((su1/(double)su2)); break;
}
		
RequestDispatcher view = request.getRequestDispatcher("/views/el/cal.jsp");
request.setAttribute("result", result);
view.forward(request, response);

  • /views/el/cal.jsp
${param.su1 } ${param.yun } ${param.su2 } = ${result }



JSTL

  • JSP에서 사용하는 커스텀 태그로, 공통으로 사용하는 코드의 집합을 사용하기 쉽게 태그화 하여 표준으로 제공하는 것을 말함
  • 주로 EL과 함께 사용 됨
    • EL을 통하여 스크립트릿을 사용하지 않고 데이터를 표현할 수 있지만 EL만으로는 모든걸 표현할 수 없음

JSTL 라이브러리 & 초기 설정 방법

  • JSTL을 사용하려면 라이브러리 등록을 해야 함

  • 설정 방법

    1. 라이브러리 다운

    2. WebContent/WEB-INF/lib 내에 파일을 등록

    3. jsp 파일에 사용 태그 종류에 맞게 선언

      • EX) <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

JSTL 태그 종류

Core Tags

  • 변수와 url, 조건문, 반복문 등의 로직과 관련된 JSTL 문법을 제공
  • 선언 : <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

Formatting Tags

  • 메시지 형식이나 숫자, 날짜 형식과 관련된 포맷 방식을 제공
  • 선언 : <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>

Function

  • trim,substring과 같은 여러 문자열 처리 함수를 제공
  • 선언 : <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>

XML Tags

  • 데이터의 XML 파싱 처리 등 XML 문서를 화면으로 읽어오는데 필요한 라이브러리
  • 선언 : <%@ taglib uri="http://java.sun.com/jsp/jstl/xml" prefix="x" %>

SQL Tags

  • 페이지 내에서 Database를 연동하고, 필요한 쿼리를 실행할 수 있는 라이브러리

  • 선언 : <%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>

  • SQL Tags는 Database를 직접 연동하는 것에는 용이하게 쓸 수 있으나, DataBase 트랜잭션을 별도로 묶어서 관리하는 MVC Model2 방식에는 맞지 않기 때문에 사용 지양




JSTL Core Tags

  • 종류 <c:???>
???의미
set변수를 만들어서 값을 저장하는 태그
out페이지에 값을 출력하는 태그
if조건문의 if와 비슷, 반드시 test 속성값으로 비교
choose조건문의 switch문과 비슷, 내부에 <c:when>, <c:otherwise> 태그와 같이 쓰임
forEach제어문 foreach 문과 비슷, 반복을 수행하는 태그
forTokensStringTokenizer객체와 비슷, token값을 기준으로 문자열을 분할하는 태그
url변수에 url값과 쿼리스트링 값을 저장하고 호출할 수 있게 하는 태그
redirect페이지를 재요청하는 태그

<c:set> 태그

  • <c:set> 태그는 변수를 선언하고 나서 그 변수에 초기값을 대입하는 기능의 태그

  • JSP의 setAttribute와 같은 역할

  • 자바에서 변수를 선언하는 방법과 유사

    ex) java 변수 선언 방식
    int num = 100;

    ex) <c:set> 변수 선언 방식
    <c:set var="num" value="100" />


<c:set> 속성

  • 모든 속성의 값 타입은 String형

    속성의미
    var="문자"값을 저장할 변수명
    value="값저장할 값
    target="객체명"저장할 객체 대상
    property="객체멤버변수명"저장할 객체의 멤버변수
    scope="범위"범위 (request,session,application)

<c:set> 사용법

  • 초기값은 반드시 기술해야 함
  • <c:set>으로 선언한 변수는 EL 식 안에서 사용할 수 있지만 JSP <% %> 같은 스크립트릿 요소에서는 사용할 수 없음
      <c:set var="num" value="100" />

      ${num}   -> EL 식 안에서 사용 가능
  • 스크립트릿에서 선언한 변수를 <c:set>의 value 속성에서 사용하는것은 가능
        <% int num1=10,num2=20; %>
        <c:set var="sum" value="<%= num1+num2 %>" />

        ${sum}

<c:set> 태그 scope 속성

  • <c:set>의 scope 속성을 이용하면 page, request, session, application 영역에 속성을 저장하는 것이 가능
  • 설정하지 않을 시 기본값: page
	 <c:set var="num1" value="10" scope="page"/>

	 <!-- scope값이 명시하지 않으면 pageScope -->
	 <c:set var="num2" value="30" />

	 <c:set var="num3" value="40" scope="request"/>
	 <c:set var="num4" value="50" scope="session"/>
		
	num1 : ${pageScope.num1 }<br>
	num2 : ${pageScope.num2 }<br>
	num3 : ${requestScope.num3 }<br>
	num4 : ${sessionScope.num4 }<br>

<c:remove> 태그

  • <c:set>을 이용해서 선언한 변수는 <c:remove> 태그를 이용하여 삭제 할 수 있음

    • <c:remove var="num1" scope="request">
  • scope를 지정하지 않으면 page,request,session,application 영역에 저장되어 있는 num1이라는 모든 속성을 찾아내 제거 함




<c:out> 태그

  • <c:out> 태그는 데이터를 출력할 때 사용하는 태그

<c:out> 태그 속성

속성의미
value="값"출력할 값을 지정하는 속성 (EL도 가능)
default="값"값이 빈값(null)이면 출력될 값을 지정하는 속성
escapeXml="false"태그형식의 문자를 태그로 출력하게 만드는 속성 (true는 문자 그대로 출력)
  • escape

    • <,>,& 특수 문자를 자동으로 이스케이프 시퀀스로 바꾸어 줌

      • < : <

      • > : &ft;

      • & : &


  • 작성 예시

	<!-- 변수 생성 -->
	<c:set var="num" value="100" scope="page" />
	
	
	<!-- 변수값 출력 -->
	값 : <c:out value="${pageScope.num }"/><br>
	값 : <c:out value="999"/><br>
	값 : <c:out value="${pageScope.num2 }" default="값이 없습니다"/>
	
	<hr>
	
	출력 : <c:out value="<h1>헬로우</h1>"/><br/>	<!-- 문자 그대로 출력 -->
	출력 : <c:out value="<h1>헬로우</h1>" escapeXml="true"/><br/>	<!-- 문자 그대로 출력 -->
	출력 : <c:out value="<h1>헬로우</h1>" escapeXml="false"/><br/>	<!-- HTML 형태로 출력 -->



<c:if> 태그

  • <c:if> 태그에서 조건식은 test라는 속성의 값으로 지정해야 함

  • 조건식은 반드시 EL 형식으로 기술

  • 작성 예시

	<c:if test="${num1>num2}">
	num1이 더 큽니다...
	</c:if>

<c:if> 속성

속성의미
test="값"(true/false)test값을 기준으로 실행여부 결정(조건절)
var="값"test결과 값을 저장하는 변수 속성
scope="범위"범위(request,session,application)
  • 주의할점
    • Java 에서 보내준 값이 단일문자(char)인 경우에는 숫자로 계산되기 때문에 숫자로 비교연산 처리 해야 함
    • 만약 문자가 아닌 문자로 비교 할 경우에는 문자열 형태로 변환해주면 됨
      • <c:if test="${sessionScope.member.gender eq 'M'}"> → 안됨 (비교가 안됨)
      • <c:if test="${sessionScope.member.gender eq 75}"> → 됨 (숫자로 비교)
      • <c:if test="${String.valueOf(sessionScope.member.gender) eq 'M'}"> → 됨 (문자열 처리)

작성 예시(jstl_basic.jsp)

<form action="./jstl_if.jsp" method="get">
	<input type="text" name="value">
	<input type="submit" value="전송">
</form>

작성 예시(jstl_if.jsp)

<h1>EL+JSTL 제어문 결과</h1>
<c:if test="${param.value%2==0 }" var="result1">
	<c:out value="짝수입니다."/><br>
		
</c:if>
	
<c:if test="${param.value%2==1 }" var="result2">
	<c:out value="홀수입니다."/><br>
</c:if>

<c:out value="첫번째 조건에 대한 결과값 : ${result1 }"/><br>
<c:out value="두번째 조건에 대한 결과값 : ${result2 }"/><br>



<c:choose> 태그

  • 자바 프로그램의 switch 문과 비슷한 역할을 하는 태그(실제로는 elseif와 가장 흡사)
  • <c:when>, <c:otherwise> 태그와 함께 사용되는데, 각 각 switch 문의
    case,default 절과 비슷한 역할을 함(내부 조건절로 인하여 if~elseif 와 비슷함)

작성 예시(jstl_basic.jsp)

<form action ="./jstl_choose.jsp" method="get">
	<select name="car">
		<option value="K3">K3</option>
		<option value="K5">K5</option>
		<option value="G">Genesis</option>
		<option value="V">벤츠</option>
	</select>
	<input type="submit" value="전송">
</form>

작성 예시(jstl_if.jsp)

<c:choose>
	<c:when test="${param.car.equals('K3') }">
		K3의 자동차 금액은 3,000만원 이하입니다.<br>
	</c:when>
	<c:when test="${param.car.equals('K5') }">
		K5의 자동차 금액은 4,000만원 이하입니다.<br>
	</c:when>

	<c:otherwise>
		비싼차<br>
	</c:otherwise>
</c:choose> 



<c:forEach> 태그

  • 자바의 for, for-in 문에 해당하는 기능을 제공함

    속성의미
    items반복할 객체 명(Collection 객체)
    begin반복이 시작할 요소 번호 (0...n) / 시작값은 0
    end반복문의 종료값
    step반복문의 증가값
    var현재 반복 횟수에 해당하는 변수의 이름
    varStatus반복 상태 값을 지닌 변수 / varStatus는 forEach의 상태를 알 수 있음
    • ${변수.current} : 현재의 인덱스
    • ${변수.index} : 0부터의 인덱스
    • ${변수.count} : 1부터의 카운트
    • ${변수.first} : 현재 루프가 처음인지 확인
    • ${변수.last} : 현재 루프가 마지막인지 확인
    • ${변수.begin} : forEach문의 시작 값
    • ${변수.end} : forEach문의 끝 값
    • ${변수.step} : forEach문의 증가 값

작성 예시(JSTLlistServlet.java)

ArrayList<Member> list = new ArrayList<Member>();
list.add(new Member("mslove","1234","노땡수",20));
list.add(new Member("user11","2222","홍일동",11));
list.add(new Member("user22","3333","홍이동",22));
list.add(new Member("user33","4444","홍삼동",33));
		
RequestDispatcher view = request.getRequestDispatcher("/views/JSTL/jstl_forEach.jsp");
request.setAttribute("list", list);
view.forward(request, response);

작성 예시(jstl_forEach.jsp)

<table border='1px'>
	<tr>
		<th>순번</th>
		<th>회원 ID</th>
		<th>회원 비밀번호</th>
		<th>회원 이름</th>
		<th>회원 나이</th>
	</tr>

	<c:forEach items="${requestScope.list }" var="m" varStatus="i">

		<c:choose>
			<c:when test="${i.first }">
				<tr style="background-color: skyblue;">
			</c:when>

			<c:when test="${i.last }">
				<tr style="background-color: grey;">
			</c:when>

			<c:otherwise>
				<tr>
			</c:otherwise>

		</c:choose>

			<td><c:out value="${i.count }"></c:out>
			<td><c:out value="${m.userId }"></c:out></td>
			<td><c:out value="${m.userPwd }"></c:out></td>
			<td><c:out value="${m.userName }"></c:out></td>
			<td><c:out value="${m.age }"></c:out></td>
		</tr>

	</c:forEach>

</table>



<c:forTokens> 태그

  • 문자열에 포함된 구분자를 통해 토큰을 분리해서 반복 처리를 함

  • items 속성에는 토큰을 포함하는 문자열 지정하고, delims 속성에는 토큰을 분리하는데 사용할 구획 문자를 기술 함

  • 속성은 forEach문의 속성과 동일하게 이용할 수 있고 delims 속성이 추가 됨


작성 예시(jsp_basic.jsp)

<h1>취미 작성해서 보내기 (구분자는 콤마(,)로 표현해주세요) ex. 댄스, 노래</h1>
<form action="./jstl_forTokens.jsp" method="get">
	<input type="text" name="hobby" placeholder="취미를 작성하세요(구분자는  , )" size='30'>
	<input type="submit" value="전송">
</form>

작성 예시(jstl_forTokens.jsp)

<c:forTokens items="${param.hobby }" delims=", " var="h" varStatus="i">
	${i.count}. ${h}<br>
</c:forTokens>



<c:url> 태그

  • url 경로를 생성하고, 해당 url의 param 속성을 선언하여 쿼리스트링을 정의할 수 있는 태그

  • 해당 태그를 통해 url 경로와 관련 쿼리스트링의 값을 미리 설정하여 이를 제어할 수 있음


작성 예시(jstl_forTokens.jsp)

<c:url var="url" value="/board/boardList.do">
	<c:param name="currentPage">${requestScope.currentPage }</c:param>
	<c:param name="boardNo">${requestScope.boardNo }</c:param>
</c:url>
	
<a href="${url }">목록</a><br>
profile
개발자로 매일 한 걸음

0개의 댓글