Spring_JSTL

song·2023년 10월 26일

Spring

목록 보기
6/19
post-thumbnail

JSTL

  • 표준 태그 라이브러리
  • JSP의 기본 태그들이 아닌, 확장 태그들임
  • 연산은 물론 java에서 하는 것이 좋긴 하나 이런 기능이 있다 정도 알고 있기

JSTL 사용

  • JSTL 사용하려면 taglib(tag library) 선언해야 함
  • page 언어와 인코딩소스를 제일 위에 놓고 그 밑에 taglib 작성하면 된다.
    1. c는 jstl의 코어 기능들을 끌어다 쓰겠다라는 뜻
      <%@ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %>
    2. fmt는 formmating 기능 -> 숫자, 날짜, 시간을 포맷팅하는 기능을 제공함
      <%@ taglib prefix = "fmt" uri = "http://java.sun.com/jsp/jstl/fmt" %>
    3. fn는 문자열 가공
      <%@ taglib prefix = "fn" uri = "http://java.sun.com/jsp/jstl/functions" %>
    4. sql은 DB데이터에 CRUD 기능 제공
      <%@ taglib prefix = "sql" uri = "http://java.sun.com/jsp/jstl/sql" %>

JSTL의 변수 선언

to라는 변수에 10이라는 값을 넣는 것.
<c:set var = "to" value = "10"/>
too라는 변수에 {10, 20, 30, 40} 값을 넣어서 배열로 만듬.
<c:set var = "too" value = "10,20,30,40"/>

JSTL의 출력

<%= to %>
=을 붙이면 된다.

JSTL의 반복문

<c:forEach var = "item" items = "${too}" varStatus="idx">
	${idx.index}번방: ${item} <br/>
</c:forEach>
arr개수 : ${fn:length(too)}개
  • .index는 0부터 세고
    .count는 1부터 센다.
  • fn:length는 방개수가 아닌 글자수를 출력해준다. (11개라고 나옴. )
    정말 방번호가 필요하다면 <c:set var = "too" value = "${fn:split(too, ',')}"> 로 , 마다 잘라서 저장해야 한다.
    too개수 : ${fn:length(too)}개
    too개수 : ${c:out value = "${too}"}개

JSTL의 조건문

<c:if test = "${not empty too}">
	<c:forEach var = "item" items = "${too}" varStatus = "status">
    	<h1>${status.count}번방 : ${item}</h1>
        <h1>${status.count}번방 : ${status.index}번째 = ${item}</h1>
    </c:forEach>
</c:if>

request받아 조건문

if문

<c:if test = "${param.msg != null}">
	msg = ${param.msg}
    <br>
    msg = <c:out value = "${param.msg}"/>
</c:if>
<input type = "text" value = "${param.msg}" />
  • param.msg로 값받아서 바로 사용할 수 있다.
    모델에 넣지 않아 모델을 무겁게 사용하지 않아도 된다.
    (msg는 url 파라미터명이다. )

switch case문

<c:set var = "age" value = "${param.age}"/>
  <c:choose>
      <c:when test = "${age >= 19}"> 성인 </c:when>
      <c:when test = "${age < 19}"> 미성년자 </c:when>
      <c:otherwise> 값이 유효하지 않습니다. <c:otherwise>
  </c:choose>

otherwise가 else같은거임.

url

  • <c:url />이 root context path를 자동으로 포함시키기 때문에 서버 소스를 수정하면 알아서 그 수정된 경로가 추가된다.
    <form action="/app/register/save" method="get">
    위 소스 대신 아래 소스로 작성.
    <form action="<c:url value = "/register/save" />" method="get">

    server에 들어있는 context path.

빽틱

  • document.getElementById("msg").innerHTML = `<i class="fa fa-exclamation-circle"> ${ '${msg}' }</i>`;
    위와같이 msg인자를 받아서 빽틱안에서 출력을 시도하면 동작 안 함
    왜냐하면 빽틱 내부에서 변수를 쓰기 위해 ${}를 썼지만 (es6 방식) EL방식은 서버에서 돌아가는거고, es6 방식은 브라우저에서 돌아가는데 서버가 먼저 동작하기 때문에 ${msg}라고 쓰면 이걸 서버측 EL 방식으로 인식한다. (${} 벗겨짐)
    그래서 ${} 내부에 있는 msg만 남아있게 되어 빽틱 안에서 msg가 일반 텍스트 취급을 받게 된다.
    한마디로 msg를 변수취급 하려면 ${} 한세트를 더 넣어주면 된다. => ${ ${msg} }
    하지만 또 이렇게 하면 안쪽 ${}도 EL로 보니까 따옴표로 감싸야 된다. -> ${ '${msg}' }

파라미터값 가져오기 (EL 방식)

  • 정보를 보내주는 파일의 name의 값을 가져온다. param.(name 이름)
  • <h1>id = ${param.id}</h1> => id = asdf 이렇게 출력됨.
  • <h1>sns = ${param.sns}</h1> => 만약 sns가 여러개 일 때 이렇게만 찍으면 첫번째 sns 파라미터값만 출력된다.
  • <h1>sns = ${paramValues.sns}</h1> => 이렇게 찍으면 주소값 출력된다.
  • <h1>sns = ${paramValues.sns[0]}</h1> => sns = facebook 이렇게 출력된다.

파라미터값 가져오기 (JSP 방식)

<% String id = request.getParameter("id"); %>
<h1>여기 : <%= id %></h1>
<% String snsArr[] = request.getParameterValues("sns"); %>
snsArr 개수 : <%= snsArr.length%> 개

한글값 보내고 받기

  • java에서 모델에 값 저장할 때
    String s = "한글";
    s = URLEncoder.encode(s);
    model.addAttribute("s", s);
  • jsp에서 모델값 가져올 때
    <%@ page import = "java.net.URLDecoder" %>
    위 소스를 위에서 import하고,
    ${URLDecoder.decode(param.s, "utf-8")}
    이렇게해서 값을 가져와서 사용할 수 있다.
  • EL방식이라서 param.을 붙여야 한다.
  • 한글은 그냥 가져오면 인식을 못해서 인코딩과 디코딩의 순서를 거쳐야 한다.

비어있는 값 체크

  • ${empty param.msg?"":msg}
    msg파라미터가 비어있는가?
  • ${not empty param.msg?msg:""}
    msg파라미터가 비어있지 않은가?
profile
계속 나아가기

0개의 댓글