커스텀 액션

예지성준·2024년 6월 17일
0

커스텀 액션

1. 커스텀 액션을 만드는 방법

1) 태그 파일을 작성해서 만드는 방법

확장자.tag

<%@ taglib prefix=".." tagdir="경로" %>

2) 태그 클래스를 작성해서 만드는 방법

2. 태그파일을 이용해서 커스텀 액션 만들기

1) tag 지시자는 태그 파일에만 사용할 수 있는 지시자인데, 웹 컨테이너가 태그 파일을 처리할 때 필요한 여러가지 정보를 기술하는 역할을 합니다.

2) tag 지시자는 page 지시자와 마찬가지로 <%@으로 시작해서 %>로 끝나야 합니다. 그리고 <%@ 바로 다음에는 지시자의 종류를 표시하는 tag라는 이름이 와야 합니다.

3) 여러가지 정보를 이름="값" 또는 이름='값' 형태로 기술할 수 있습니다. 즉, 애트리뷰트 형태로 기술할 수 있습니다.

3. 태그 파일에서 사용할 수 있는 지시어

1) tag 지시자

  • page 지시자와 유사, 태그의 정보 정의
  • body-content
    • empty - 단일 태그 형태로 사용하는 경우
      ex) <util:line/>
    • scriptless
      • 여는 태그, 닫는 태그, 안쪽 내용물에 자바 코드 사용 불가
      • EL식 사용 가능, 다른 태그 사용 가능
    • tagdependent
      • 여는 태그, 닫는 태그, 태그 안쪽 내용물은 모두 문자로 해석(자바 코드, EL식, 다른 태그 모두 사용 불가/ 해석이 그냥 문자로 해석)

  • pageEncoding: 태그 인코딩 설정

  • import: 자바 패키지 추가

  • trimDirectiveWhitespaces: true

    • 태그 앞 뒤 공백을 제거하고 출력

2) include 지시자

  • <%@ include file="파일 경로" %>

3) taglib 지시자

  • 태그 파일 내에서도 다른 태그 라이브러리 기능 사용 가능

4) attribute 지시자

  • <%@ attribute name="속성명" %>

  • 속성명으로 지역변수 생성

  • 속성명으로 EL식 속성 추가

  • type: 자료형(기본값 - java.lang.String)
    기본 자료형은 그냥 그대로 사용 X, 래퍼 클래스 형태로만 설정
    (int -> java.lang.Integer)

  • required
    • false(기본값): 없어도 될때
    • true: 필수/ 설정하지 않는 경우 경고 표기

5) variable 지시자

4. 한글을 포함하는 태그 파일

5. 애트리뷰트(속성)를 지원하는 태그 파일

6. 태그 파일의 내장 변수

7. 동적 애트리뷰트를 지원하는 태그 파일

  • dynamic-attributes
  • 추가된 속성은 page범위 속성
  • Map<String, String> ...
#ex02.jsp
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="util" tagdir="/WEB-INF/tags/utils" %>
<util:starline coolor="blue" size="30"/>

8. 커스텀 액션의 본체를 처리하는 태그 파일

  • body-content: scriptless | tagdependent
    <jsp:doBody/> 태그 안쪽 내용물 출력


9. 변수를 지원하는 커스텀 액션

@variable: 변수

1) name-given: 속석명 - EL식 변수
2) variable-class: EL식 변수의 자료형, 문자(java.lang.String - 기본값)
3) scope

  • NESTED: 여는 태그, 닫는태그형식, 태그 내부에서 EL식 변수 접근
  • AT_BEGIN: 여는 태그 바로 아래쪽에서 접근
  • AT_END: 주로 단일 태그에서 많이 사용하고, 닫는 태그 아래쪽에서 접근 가능

10. 커스텀 액션의 본체 안에서 변수를 사용하는 예

1) name-from-attribute

2) alias

  • 변수명 속성의 필수조건
    • name속성이 [var]이며 그 값은 name-from-attribute의 값
    • 반드시 java.lang.String 타입이여햐 하고,
    • required 여야 한다
    • rtexprvalue는 flase -> 변수 값으로 EL 속성, 자바 코드 지정 불가
      ex) value="${num} (x), value="<%=new Date()%>" (X)

<c:forEach var="item" items="${}">

${item}

</c:forEach>

11. 커스텀 액션 태그를 이용하여 레이아웃 구성하기

  • 바뀌지 않는 상단 하단 구성하기!

모든 영역에 헤더와 푸터 구현하기에는 너무 비효율적이다!
doBody로 바뀔 메인 내용만 불러오고 헤더 푸터는 공통 정의해두자


필요시 상단 하단(헤더와 푸터) 구성이 바뀔수도 있다.
유동적으로 바뀔수 있게 fragment라는 속성을 사용해서 부분치환이 되도록 해보자

속성 형태로 바뀔 수 있는 치환 명령 적용하기


ex01처럼 작성 xx
이렇게 하지말고 영역별로 나눠서 해야한다. ?

common은 공통적인 레이아웃 틀
그 틀을 이용해서 2차적인 레이아웃을 만들면된다.
메인쪽 레이아웃에 맞는 상단 하단 구성


<%@ tag body-content="..." %>

body-content-empty: 단일 태그로 정의하는 경우 ex) <c:set var="num" value="100"/>

scriptless: 태그 안쪽에 내용물이 있는 경우(여는 태그, 닫는 태그)

  • 자바코드 사용 불가, EL식 사용 가능, 다른 태그 사용 가능

tagdependent: 태그 안쪽에 내용물이 있는 경우(여는 태그, 닫는 태그)

  • 내용물을 문자열로만 인식

✅스타일 속성을 위해 css랑 js 추가

css 주소 고정!

스크립트도 주소 고정!

공통적인 css, js 폴더 경로는 동일하니까 하나씩 경로 입력X -> EL태그 이용해서 url경로대입(contextpath는 자동으로 붙음)

항상 사용하는것은 공통 레이아웃쪽에 고정 완료된것 확인 완료

🎀template -> board -> list.jsp

쟈란

스타일은
List<\String>, String[]
Set<\String>
형태로 추가할 수 있다.

속성명 addCss -> 반복 -> 태그 추가
속성명 addScript -> 반복 -> 태그 추가

🎀BoardListController.java

🎀common.tag에서 연동하면 된다.

값이 있을때만 반복되도록,
속성이 추가되면 추가된대로 바뀐다

EL식을 사용하면 속성을 불러올수있다.

css추가된거 확인.

  • 색을 지정했는데도 바뀌지 않는다?? -> 304(캐시됨) 오류 확인해보기

스크립트도 null이 아닐때 반복
속성 추가하면 알아서 경로 입력되서 자원 불러올수있도록...

board쪽에 가면 스타일시트와 자바스크립트가 동적으로 추가되어있다. ex01.jsp쪽엔 없음!

어차피 css확장자는 css이고 js파일 확장자는 js이다. boardController쪽에서 .css, .js제거해주고 경로만 입력해주도록하자

대신 common.tag에서 동적 경로 뒤에 확장자 추가해주자
🔽

+common.tag
레이아웃마다 공통적인 부분 추가
자바스크립트도 레이아웃마다 공통적인 부분이 있을것이다..

교체될수있게 하면 더 유연하게 쓸 수 있을것이다.

속성 추가! commonCss, commonJs fragment추가해보자

공통적인 부분 교체될 수 있도록 invoke도 코드에 추가해주자

🎀main.tag부분에만 정의되는 공통적인 부분 정의

  • tag 라이브러리 추가
  • 재활용 될 수 있는 부분은 변수형태로 쓰는게 좋다.


🎀common.tag
제목 타이틀도 페이지마다 바뀌게 할 수 있다.

속성으로 입력한 값으로 대체 될 수 있게 구성해준다.

페이지마다 달라야하니 🎀main.tag에도 타이틀 속성 지정해주자

🎀list.jsp에서 title 알맞게 지정

사이트의 주 제목은 메시지 코드를 사용해서 관리할것임
common쪽은 공통적인 메시지를 넣고있다...
resources -> messages ->
🎀common.properties

🎀common.tag
properties에 적용한 하위쪽은 모두messages.commons쪽으로 온다

문자열 결합..

제목이 없는 사이트일 경우 기본 주소 나옴 SITE_TITLE

기본 공통 레이아웃 구성 완료!

profile
꽁꽁 얼어붙은 한강 위로 😺

0개의 댓글