티스토리 뷰
JSP를 사용하여 하나의 프로젝트를 하면 알게모르게 수많은 Tag Library를 사용하게 된다.
Tag Library란? 자바 코드를 캡슐화 하여 JSP에서 간단하게 사용할 수 있게 해주는것을 말한다.
이런 수많은 Tag Library들을 사용을 함에도 불구하고 분명 아쉽고 부족한 기능들은 있다. 이럴때는 내가 직접 만들어서 사용하면 된다. 어렵지 않다. 자주 쓰일것 같은 공통기능 같은 것들은 한번 만들어 보도록 하자.
일단 큰 그림을 보도록 하자.
jsp가 렌더링되다가 위와 같은 <ct:label> 이라는 tag를 만났다. (ct 라는건 custom tag의 약자로 테스트를 위해 임의로 만든 tag 명이다.) 그럼 이건 jsp 파일에 정의된 ct tag가 가르키는 /WEB-INF/tld/customtag.tld 파일을 바라보게 된다. 이 tld 파일(tag library description)은 Tag Library를 정의하는 파일이라고 보면 된다. custom tag를 사용하기 위해서는 이 tld 파일을 필수로 만들어 줘야한다. ct:label 이라는 녀석을 처리해주는곳이 어디인지, 속성은 무엇인지 등에 대한 정의가 있다고 보면 된다.
sample.common.tag.LabelTag.java
public class LabelTag extends TagSupport {
... 중략 ...
@Override
public int doEndTag() throws JspException {
try {
String code = this.code;
String codeProperty = LabelUtil.getLabelProperty(code);
pageContext.getOut().write(codeProperty);
} catch(Exception e) {
log.error(e.getMessage(), e);
throw new JspTagException(e.getMessage());
}
return EVAL_PAGE;
}
}
customtag.tld 파일에서 가르키는 이 LabelTag 클래스는 반드시 TagSupport를 extends 해야 한다. 그리고 실질적인 작업을 지시하는 곳은 doEndTag() 라는 메소드이다. 이곳에서 속성으로 받은 값을 가지고 와서 원하는 작업을 처리해줘야한다. 필자는 이 메소드 내에서 jsp로부터 label code 값을 받아와 미리 정의된 LabelUtil을 통해 해당 code에 해당하는 값을 보여주는것을 구현했다.
이곳에서 가장 중요한 것은 pageContext 라는 것이다. pageContext는 JSP의 기본 객체로 별도로 선언하지 않아도 사용할 수 있다. LabelTag라는걸 호출한 jsp에 대한 정보를 가지고 있는 context라고 생각하면 된다. custom tag를 만들때 아주 유용하게 사용될 객체이다. pageContext에 대한 자세한 설명은 하기 블로그를 참조하길 바란다.
끝!
'Lang > Servlet&JSP' 카테고리의 다른 글
파일 업로드시 upload.parseRequest(request)가 null이 나오는 오류 조치 (2) | 2021.05.18 |
---|---|
the import javax servlet http cannot be resolved 오류 조치 (0) | 2021.05.04 |
Invalid character found in method name .. HTTP method names must be tokens 오류 조치 (0) | 2021.04.09 |
Cannot change version of project facet Dynamic Web Module to 3.0 오류 해결하기 (0) | 2020.07.30 |
JSP에서 Spring application.properties value 가지고 오기 (0) | 2020.06.23 |