1) 태그 파일을 작성해서 만드는 방법
확장자.tag
<%@ taglib prefix=".." tagdir="경로" %>
2) 태그 클래스를 작성해서 만드는 방법
1) tag 지시자는 태그 파일에만 사용할 수 있는 지시자인데, 웹 컨테이너가 태그 파일을 처리할 때 필요한 여러가지 정보를 기술하는 역할을 합니다.
2) tag 지시자는 page 지시자와 마찬가지로 <%@으로 시작해서 %>로 끝나야 합니다. 그리고 <%@ 바로 다음에는 지시자의 종류를 표시하는 tag라는 이름이 와야 합니다.
3) 여러가지 정보를 이름="값" 또는 이름='값' 형태로 기술할 수 있습니다. 즉, 애트리뷰트 형태로 기술할 수 있습니다.
1) tag 지시자
<util:line/>

pageEncoding: 태그 인코딩 설정
import: 자바 패키지 추가
trimDirectiveWhitespaces: true
2) include 지시자
3) taglib 지시자
4) attribute 지시자
<%@ attribute name="속성명" %>
속성명으로 지역변수 생성
속성명으로 EL식 속성 추가
type: 자료형(기본값 - java.lang.String)
기본 자료형은 그냥 그대로 사용 X, 래퍼 클래스 형태로만 설정
(int -> java.lang.Integer)



5) variable 지시자
#ex02.jsp
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="util" tagdir="/WEB-INF/tags/utils" %>
<util:starline coolor="blue" size="30"/>





@variable: 변수

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

1) name-from-attribute
2) alias

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


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


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



ex01처럼 작성 xx
이렇게 하지말고 영역별로 나눠서 해야한다. ?
common은 공통적인 레이아웃 틀
그 틀을 이용해서 2차적인 레이아웃을 만들면된다.
메인쪽 레이아웃에 맞는 상단 하단 구성



<%@ tag body-content="..." %>
body-content-empty: 단일 태그로 정의하는 경우 ex) <c:set var="num" value="100"/>
scriptless: 태그 안쪽에 내용물이 있는 경우(여는 태그, 닫는 태그)
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추가된거 확인.
스크립트도 null이 아닐때 반복
속성 추가하면 알아서 경로 입력되서 자원 불러올수있도록...

board쪽에 가면 스타일시트와 자바스크립트가 동적으로 추가되어있다. ex01.jsp쪽엔 없음!
어차피 css확장자는 css이고 js파일 확장자는 js이다. boardController쪽에서 .css, .js제거해주고 경로만 입력해주도록하자

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

+common.tag
레이아웃마다 공통적인 부분 추가
자바스크립트도 레이아웃마다 공통적인 부분이 있을것이다..
교체될수있게 하면 더 유연하게 쓸 수 있을것이다.
속성 추가! commonCss, commonJs fragment추가해보자

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

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


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

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

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

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


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

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

문자열 결합..

제목이 없는 사이트일 경우 기본 주소 나옴 SITE_TITLE
기본 공통 레이아웃 구성 완료!