@ 주제 

JSTL 이란 

 

@ 목적 

JSTL을 이해하고 사용하기 위함 

 

@ 내용

JSP는 자신만의 태그를 추가할 수 있는 기능을 제공하고 있는데요.

 

<jsp:include>나 <jsp:usebean>과 같은 커스텀 태그처럼

 

연산이나 조건문이나 반복문인 if문, for문, DB를 편하게 처리할 수 있는것이 JSTL입니다.

 

 

▼ 태그 종류

 

(1) Core  (prefix : c)

 

→ 일반 프로그래밍에서 제공하는 것과 유사한 변수선언

 

→ 실행 흐름의 제어 기능을 제공

 

→ 페이지 이동 기술 제공

 

URI → http://java.sun.com/jsp/jstl/core

 

 

 

(2) Formatting (prefix : fmt)

 

→ 숫자, 날짜, 시간을 포매팅하는 기능을 제공

 

→ 국제화, 다국어 지원 기능 제공

 

URI → http://java.sun.com/jsp/jstl/fmt

 

 

 

(3) DataBase (prefix : sql)

 

→ DB의 데이터를 입력 / 수정 / 삭제 / 조회 하는 기능을 제공

 

URI → http://java.sun.com/jsp/jstl/sql

 

 

 

(4) XML (prefix : x)

 

→ XML문서를 처리할 때 필요한 기능 제공

 

URI → http://java.sun.com/jsp/jstl/xml

 

 

 

(5) Function (prefix : fn)

 

→ 문자열을 제공하는 함수 제공

 

URI → http://java.sun.com/jsp/jstl/functions

 

 

 

하나씩 따로 정리해보겠습니다.

 

'기능 정리' 카테고리의 다른 글

Same-Origin Policy  (0) 2020.08.12
util 태그 라이브러리의 사용  (0) 2020.08.11
JSTL Function (prefix : fn) 정리합니다.  (0) 2020.08.11
JSTL: fmt 사용법  (0) 2020.08.11
Json 정리  (0) 2020.08.11

@ 주제 

JSTL function 정리 

 

@ 목적 

JSTL function 정리 

 

@ 내용 

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

-JSTL functions은 문자열이나 컬렉션의 가공/변환/분석을 위해 사용하는 함수다. 단독으로는 쓸 수 없고 반드시 EL 표현식과 조합해야 한다.

 

contains

boolean contains( String sting, String substring ): string이 substring을 포함하면 true값을  반환한다.

boolean containsIgnoreCase( String string, String substring ): 대소문자에 관계없이, string이 substring을 포함하면 true 반환.

${fn:contains("helloworld", "world")} // true

${fn:containsIgnoreCase("hello world!", "WoRLd")} // true

 

startsWith, endsWith

boolean startsWith( String string, String prefix ): string이 prefix로 시작하면 true

boolean endsWith( String string, String suffix ): string이 suffix로 끝나면 true

${fn:startsWith("hello world!", "ld!")} // false

${fn:endsWith("hello world!", "ld!")} // true

 

escapeXml

String escapeXml( String string ): string에서 XML, HTML의 < >& ' " 문자들을 각각 &lt; &gt; &amp; &#039; &#034;1로 변환한다.

누가 개발자 도구를 또는 다른 것을 이용하여  태그를 입력하더라도 그 태그들을 문자로 바꾸기 때문에 태그로 인식안하기 때문에 제3자가 임의로 코드를 넣지 못하게할 수 있음

웬만하면 EL 값을 넣을 때는 사용하는 것이 보안에 좋다.

 

<c:out value="${fn:escapeXml('<script>function(){코드들 .. }</script>')}"/> // &lt;script&gt;function(){}&lt;script&gt;이렇게 문자형식으로 바꿔버림

 

indexOf

int indexOf( String string, String substring ): string에서 substring의 첫 위치에 해당하는 인덱스를 반환한다.

${fn:indexOf("abcdefg", "f")} // 5

 

 

split, join

String[] split( String string, String separator ): string 내의 문자열을 separator를 기준으로 잘려진 문자열들을 배열 형태로 반환한다.

String join( String[], String separator ): 배열 원소들을 모두 연결해 반환한다. 이때 각 원소 사이에 separator를 구분자로 사용한다.

<c:set var="texts" value="${fn:split('Hi My name is waldo', ' ')}"/>

<c:out value="${fn:join(texts, '-')}"/> // Hi-My-name-is-waldo

참고로 EL에선 배열 리터럴2만으로는 배열 생성-초기화가 불가능하다. fn:split으로 기존 문자열을 쪼개거나 액션태그인 jsp:useBean을 사용해야 한다.

아니면 컨트롤러에서 만들어주던가...

 

length

int length( Object  item ): item이 배열이나 컬렉션이면 원소의 개수를, 문자열이면 문자의 길이를 반환한다.

<c:set var="texts" value="${fn:split('Hi My name is waldo', ' ')}"/>

${fn:length(texts)} // 5

${fn:length("123456")} // 6

 

replace

String replace( String string, String before, String after ): string 내에 있는 before를 after로 모두 바꿔서 반환한다.

${fn:replace("hi hello", "hello", "hi")} // hi hi

 

// replace 함수는 HTML에서 공백과 줄바꿈을 표현할 때 사용할 수 있다.

${fn:replace("hell            o          o       ~", " ", " ")} // hell            o          o       ~

 

<% pageContext.setAttribute("enter","\n"); %>

${fn:replace(info.text, enter, '<br/>') // 엔터처리

 

<% pageContext.setAttribute("enter","\n"); %>

${fn:replace(fn:replace(fn:escapeXml(info.content_txt), enter, '<br/>') , ' ', ' ')} // 엔터와 공백 처리

 

substring

String substring( String string, int begin, int end ): string에서 인덱스가 begin과 end 사이에 해당하는 문자열을 반환.

String substringAfter( String string, String substring ): string에서 substring이 나타나는 이후의 부분에 있는 문자열을 반환한다.

String substringBefore( String string, String substring ): string에서 substring이 나타나기 이전의 부분에 있는 문자열을 반환한다.

${fn:substring(text, 3, 19)} // My name is waldo

${fn:substringAfter(text, "Hi ")} // My name is waldo

${fn:substringBefore(text, "waldo")} // Hi My name is

 

toLowerCase, toUpperCase

String toLowerCase( String string ): string을 모두 소문자로 변환.

String toUpperCase( String string ): string을 모두 대문자로 변환.

<c:set var="text" value="Hi My name is jinhee"/>

${fn:toLowerCase(text)} // hi my name is jinhee

${fn:toUpperCase(text)} // HI MY NAME IS JINHEE

 

 

trim

String trim( String string ): string 앞뒤의 공백을 제거한다.

<c:set var="text" value="          blank spcae          "/>

${fn:length(text)}  // 31

<c:set var="text" value="${fn:trim(text)}"/>

${fn:length(text)}  // 11

 

'기능 정리' 카테고리의 다른 글

Same-Origin Policy  (0) 2020.08.12
util 태그 라이브러리의 사용  (0) 2020.08.11
JSTL 이란  (0) 2020.08.11
JSTL: fmt 사용법  (0) 2020.08.11
Json 정리  (0) 2020.08.11

@ 주제 

 

JSTL: fmt 사용법

 

@ 목적 

JSTL: fmt 사용법을 알아본다 

 

@ 내용 

JSTL: fmt

국제화 및 지역화 태그로 다국어 문서를 처리할 때 유용하고, 날짜와 숫자 형식을 다룰 때 사용된다. I18N - 국제화(Internationalization) 태그라고도 한다.

기능: 지역, 메시지 형식, 숫자 및 날짜형식

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

 

requestEncoding

request.setCharacterEncoding() 역할이 같다.

<fmt:requestEncoding [value="charsetName"]/>

 

setLocale

다국어를 지원하는 페이지를 만들때 ResourceBundle로 불러오는 properties 파일들과 연계하여 사용한다.

<fmt:setLocale value="locale"   [variant="variant"] [scope="{page|request|session|application}"]/>

<pre>

<%=response.getLocale()%> <!-- ko_KR -->

 

<fmt:setLocale value="ko"/>

<%=response.getLocale()%> <!-- ko -->

<fmt:setLocale value="ja"/>

<%=response.getLocale()%> <!-- ja -->

<fmt:setLocale value="en"/>

<%=response.getLocale()%> <!-- en -->

</pre>

 

 

bundle

properties 확장자를 사용하는 자원 파일을 읽어오는 역할을 한다.

<fmt:bundle basename="basename" [prefix="prefix"]>

     body content

</fmt:bundle>

basename 속성에 지정된 properties 파일을 찾아서 locale에 따라 읽어들인다.  

 

properties 파일은 보통 WEB-INF/classes 아래에 위치하며 디렉토리의 깊이에 따라서 패키지형식의 이름을 취한다. TestBundle.properties 파일이com/itexpert/test/msg 디렉토리에 있다면 basename="com.itexpert.test.msg.TestBundle"  이라고 지정하면 된다.

 

locale이 ko라면 TestBundle_ko.properties 파일을 읽어오게 되며, locale이 맞지 않는 경우에는 TestBundle.properties처럼 코드가 붙지 않은 파일을 읽어온다.

 

prefix 속성은 key 명칭이 공통적인 부분을 지정해서 body에서 표현되는 key를 단축시킨다. import 에서 패키지 명을 지정하면 클래스명만 쓸 수 있는 것과 같이 생각할 수  있다.

 

 

setBundle

페이지 전체에서 사용할 수 있는 번들을 지정한다. var 속성에 명시한 변수를 <fmt:message/>태그에서 basename 속성으로 대체할 수 있다.

 

<fmt:setBundle  basename="basename"

        [var="varName"]

        [scope="{page|request|session|application}"]/>

 

 

message

프로퍼티즈에  사용할 값들을 적어 놓은 뒤  여러 페이지에서 사용하고자 할때  사용하면 좋아유

여러 페이지에 사용되는 값들을 하나의 파일을 수정하므로 모두 적용할 수 있으니

다양한 곳에서 사용되는 같은 값들은  프로퍼티즈에  작성한 후 사용하면 편합니다.

 

 

<fmt:setLocale value="en"/>

<fmt:setBundle basename="com.tutorialspoint.Example" var="lang"/>

<fmt:message key="count.one" bundle="${lang}"/><br/>

<fmt:message key="count.two" bundle="${lang}"/><br/>

<fmt:message key="count.three" bundle="${lang}"/><br/>

해당 번들에 작성되어있는 count.one 의 값을 가져온다 .  

formatNumber

parseNumber

formatDate

parseDate

setTimeZone, timeZone

 

'기능 정리' 카테고리의 다른 글

Same-Origin Policy  (0) 2020.08.12
util 태그 라이브러리의 사용  (0) 2020.08.11
JSTL 이란  (0) 2020.08.11
JSTL Function (prefix : fn) 정리합니다.  (0) 2020.08.11
Json 정리  (0) 2020.08.11

@ 주제

JSTL Core 정리 

 

@ 목적 

JSTL Core에 대해 알아본다 

 

@ 내용 

(1) Core  (prefix : c)

 

→ 일반 프로그래밍에서 제공하는 것과 유사한 변수선언

 

→ 실행 흐름의 제어 기능을 제공

 

→ 페이지 이동 기술 제공

 

URI → http://java.sun.com/jsp/jstl/core

 

 

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

 

EL사용을 위함 :<%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR" isELIgnored="false"%>

페이지를 인코딩하는 부분 마지막에 isELIgnored="false" 를 추가하면 EL을 사용할 수 있게 됩니다.

1. <C:set>

사용범위에 맞는 위치에 선언해주세요~

자바의 int num = 100; 을 <c:set var="num" value="100"> 로 쓸 수 있습니다. 선언한 값은 ${num} 으로 해당 페이지 내에서 사용가능합니다.

 

2. <c:out>

 

system.out.println(" 안녕하세요 ");을 간단하게 <c:out value=" 안녕하세요 "> 표현가능 이 태그는 특수문자를 그대로 출력합니다.

 

3. <c:remove>

 

한 영역의 변수명을 지우는 코드입니다. 만약에 영역을 생략할 경우 모든 영역의 변수가 삭제됩니다.

 

Attribute에서 정리했다 시피 (page → request → session → application) 순서의 영역을 가집니다.

 

 

 

4. <c:if>

 

자바의 if - else 문과 동일하지만 JSTL에서는 else문이 없습니다. 여기서 scope값을 생략하면 기본으로 page영역이 지정됩니다.

else 처리를 하고 싶거든 5번 참조~~

 

5. <c:choose> / <c:when> / <c:otherwise> <- 이게 else 처리를 가능케함

 

자바의 switch 구문과 if-else 구문을 혼합한 형태로 다수의 조건문을 걸고 싶을때 사용합니다.

 

6. <c:forEach>

 

자바에서는 for문으로 불리던게 JSTL에서는 forEach로 변경되었습니다. 배열이나 컬렉션, Map에 저장되어 있는 값들을 순서대로 처리 할때 사용되며, <c:forEach var=" i" begin=" 1 " end=" 10 " step=" 1 "> ${ i } </c:forEach>로 i가 1부터 10까지 1씩 증가한다는 구문을 쉽게 만들 수 있습니다.

<c:forEach items="${Member (리스트 또는 내가 출력하고자하는 값을 담은 변수)  }" var="item" varStatus="st">    

    만약 Member는 vo 이며 name 이라는 getter setter 을 가지고 있다면

    ${item.name} 로 Member.getName()을 출력할 수 있다 .

</c:forEach>

 

7. <c:forTokens>

 

자바의 StringTokenizer 를 JSTL를 사용하면 아주 간편하게 사용할 수 있습니다.

 

<c:forTokens var="abc" items="안녕/하세요/hunit블로그/입니다" delims="/" >이렇게 코드를 작성할 수 있겠죠.

 

 

8. <c:catch>

 

try{

     자바에서는 여기에 행동    

    } catch (Exception err){

            에러내용 표시

     }

  <c:catch var= "abc ">

      JSTL에서는 여기에 행동

  </c:catch>

      태그 밖에 ${abc}를 사용하여 에러내용

자바의 Try-catch 구문과 같음. 단 <c:catch>태그는 에러내용을 ${abc}로 빼내서 처리해줘야 합니다.

 

 

9. <c:redirect>는 아래와 같이 파라미터 값을 지정된 url로 보냅니다.

 

<c:redirect url="baordList.jsp">

 

<c:param name="abc" value="안녕하세요" />

 

</c:redirect>

 

 

10. <c:import>는 <jsp:include>와 비슷합니다.

 

 

 

11. <c: url>은 <c:set>과 비슷하며 GET방식으로 파라미터를 전달합니다.

 

 

 

+ Recent posts