headfirst 9장 jstl 사용하기: 막강한 커스텀 태그
1. JSTL(JSP 표준 태그 라이브러리) 을 설치 방법
// JSTL을 사용하기 위해서는 jstl.jar 와 standard.jar 파일이 필요하다.
톰캣에제 파일에 있는
webapps/jsp-examples/WEB-INF/lib/jstl,jar
webapps/jsp-examples/lib/standard,jar
를 사용하고자 하는 어플리케이션의 WEB-INF/lib 에 그냥 복사하면 된다.
2. JSTL은 jsp에서 스크립팅을 사용하지 않고 간단하게 로직을 구현할수 있게 도와준다.
3. HTML 태그를 브라우저에서 변환하지말고 그대로 택스틀로 출력하고 싶을때
태그를 사용하자
// HTML은 XHTML로 취급되고, 이는 바꾸어 말하면 XML이 되죠
// 그래서 HTML 문자들도 똑같이 영향을 받는다.
// escapeXml 은 디폴트 true 이고 false일 경우에 html은 브라우저에 해석되어 버린다.
3. 은 EL, 스크립팅과 다르게 null에 대해서 default 값을 넣을수 있다.
// null 인 경우 guest가 출력된다.
guest
// 이런식으로도 가능하다.
4. JSTL의 태그를 사용하면, 배열과 컬렉션 데이터를 루프로 돌리는 작업을 간단히 처리 할수 있다.
스크립팅일때
태그 사용시
| ${movie} | |
| ${movieLoopCount.count} |
// varStatus는 부가속성으로 루핑 카운터를 셀수있다.
// begin, end, step 등 부가적인 속성도 있다 찾아봐라
5. JSTP로 조건문 사용하기 태그를 사용하라
6. 태그는 else문이 없어서 많이 불편하다.
7. 태그와 , 태그로 if – else 를 만들 수 있다.
넌 퍼포먼스를 골랐어
넌 세이프티를 골랐어
넌 메인테넌스를 골랐어
넌 위에 3개중 일치하는 것을 고르지 않았어.
// 태그에 가 반드시 있을 필요는 없다.
8. 태그는 오직 빈의 프로퍼티 설정 밖에 할 수가 없다.
9. 빈의 프로퍼티 설정, 맵에 값 하나더 추가, request생전 범위에 속성 추가 등을 지원하는 태그
// session 생존 범위에 userLevel이라는 이름으 속성에 Cowboy라는 값을 넣어라
// session 생존범위에 userLevel이 없다면 자동 생성
// 만약 value가 null 이라면 Fido에 기존에 어떤 값이 들어 있든 상관 없이 삭제된다.
sheriff, bartender, cowgirl
10. 태그는 빈 프로퍼티와 맵 값 두가지 경우에만 동작한다.
리스트나 배열에 값을 추가 하기 위해서 사용 할수 없다.
태그의 target, property, value의 쓰임
// target은 null 이 될면 안된다.
// target이 맵인 경우 property는 키이름이 된다.
// target이 빈인 경우 property는 프로퍼티 이름이 된다.
${foo.name} // 몸체 안에는 문자열 또는 표현식이 들어 갈수 있다.
// target속성에는 객체(Object) 가 들어가야 한다.
11. 핵심 정리
하나. 태그에 var 와 target을 동시에 사용할 수 없다.
둘. scope는 옵션이다. 디폴트는 page생존범위이다.
EL과 다르게 page생존 범위만 찾고, request session 등 더 깊게 찾지 않는다.
셋. value가 널이면 var에 있는 속성이 제거된다.
넷. var 이름으로 속성이 없으면, 자동적으로 만든다. 하지만 value가 널이 아닐 때만 그렇다.
다섯. target표현식 이 널이면 컨테이너에서 예외사항을 던진다
여섯. target에는 실제 객체를 표현하는 표현식이 들어가야 한다. 빈이나 맵의 id이름을 나타내는 문자열을 기입하면 동작하지 않는다. 즉 target은 빈이나 맵의 속성명이 아니라 속성 객체가 들어가야 한다.
일곱. target 표현식이 빈이나 맵이 아니면 컨테이너는 예외를 던진다
여덟. target 표현식이 빈이고, 해당 빈에 property에 명기된 이름으로 된 프로퍼티가 없다면 컨테이너는 예외사항을 던진다. EL표현식 ${bean.notAProperty} 또한 예외 사항을 던진다.
12. // 속성을 제거하는데 사용된다.
// var속성에는 문자열이 들어간다. 여기에 표현식을 넣으면 안된다.
// scope는 옵션이다. page가 기본이다.
13. jstl태그
// 와 비슷하게 행동하지만. 훨씬 막강하다.
// include 지시자와 는 현재 컨테이너 안의 있는 자원만 포함 가능하다
// 하지만 jstl태그는 외부 자원도 포함이 가능하다.
14. 으로 로 포함할 페이지에 파라미터를 넘길 수 있다.
메인페이지
포함될 페이지(Header.jsp)

${param.subTitle}
15. jsp에서 URL 재 작성하기(브라우저에서 쿠기 사용 안할 때 세션 먹이기)
서블릿에서 URL 재작성
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws Exception
{
response.setContentType(“text/html”);
PrintWriter out = response.getWriter();
HttpSession session = request.getSession();
out.println(“”);
out.println(“click“);
// url 뒤에 세션 id를 추가한다.
out.println(“”);
}
jsp에서 URL 재작성
<a href=" >click here
// value에 들어 있는 상대 경로에 jsessionid를 추가한다. (쿠키를 사용 할수 없을때)
16. URL 인코딩 디코딩이 왜 사용되냐? p 500
get메소드만 해당하는가??
URL로 날린 문자열이 불완전 할때 이것을 변환해서 날린다?
17. 태그는 url을 재작성하지만, url 인코딩을 하진 않는다.
the url using params is : ${inputURL}
결과
the url using params is : myAppinputCommnets.jsp?first=Crouching pixels&last=Hidden Cursor
// 질의어로 넘어가는 파라미터는 인코딩 되어야만 한다. 공백 문자는 “+” 변환해서 넘겨야 한다.
18. 태그로 url 인코딩 하기.
결과
the url using params is : myAppinputCommnets.jsp?first=Crouching+pixels&last=Hidden+Cursor
18. 오류페이지 설정하는 방법
하나. 오류페이지 만들기 (errorPage.jsp)
// 컨테이너에게 내가 에러페이지 라고 알려준다.
둘. 예외 사항 발생하는 페이지(“badPage.jsp”)
// 이 페이지에서 오류가 나면 errorPage.jsp로 자동 이동한다.
// 하지만 이런 방식으로 에러 페이지를 표시한다면 jsp 페이지마다 다 이런 짜증나는 설정을 노가다로 해줘야 한다.
19. DD에 오류페이지를 설정 할수 있다.
모두 다 적용되는(디폴트) 오류 페이지 선언
// 아래와 같이 선언하면 jsp뿐만 아니라 웹 어플리케이션에 있는 모든 페이지에 적요된다. 개별 jsp에서 page 지시자 errorPage 속성을 명시하면 이 값을 재정의 할수 있다.
java.lang.throwable
/errorPage.jsp
특정 예외사항에 대한 오류 페이지 선언
java.lang.ArithmeticException
/arithmeticErrorPage.jsp
// 아리메틱 예외가 발생하면 동작하는 오류페이지 설정
Http상태 코드에 따라 다르게 오류페이지 선언
404
/notFoundPage.jsp
// 404 에러일 경우에만 동작하는 에러페이지
// 태그의 경로는 웹 어플리케이션 루트 / 컨텍스트로부터 시작해야 한다.
// 반드시 처음이 / 로 시작해야 한다.
20. 오류페이지는 예외사항을 처리하지만 이도 엄연히 jsp 이다. 하지만 다른 jsp 와 달리 컨테이너에게 부여받은 내장 객체가 하나 더 있다 exception이다.
${pageContext.exception} // error jsp 페이지만 java처럼 exception객체에 접근할수 있다.
21. JSP페이지에서 직접 예외를 잡고 싶을 때 (java의 try – catch 처럼) 태그를 사용하면 된다.
aaaaaaa
bbbbbb
22. 사용 했지만 이 페이지는 error 페이지가 아니므로 exception 접근하는데에 문제가 발생하는데….
aaaaaaa
//page 생존범위에 myException이라는 이름의 속성을 만들고
// 예외가 발행하면 이 속성에 exception 객체를 저장한다.
bbbbbb
${myException.message}
23. TLD파일은 커스텀태그와 EL함수에서 사용된다.
24. 커스텀 라이브러리를 위한 TLD파일
25. TLD파일에 커스템 라이브러리를 사용하기 위한 설정들이 기입된다.
p 511
26. 커스텀 태크 핸들러 = 커스텀 태그에서 호룰하는 클래스
// 커스텀 테그가 호출한 클래스는 SimpleTagSupport 클래스를 상속받는다
// doTag() 매소드를 제정의 해야 한다. jsp 가 태그를 실행하면 , 컨테이너는 toTag()메소드를 호출한다.
// 태그에서 실행되는 클래스는 멤버 변수 멤버 메소드를 가질수 있으며 자바빈 규약을 따라야 한다.
27. 커스텀 태그도 클래스를 호출하는 것은 EL 펑션과 같으나 EL펑션은 속성이 없는 public static 메소드만 호출할수 있다. 따라서 커스텀 태그가 뭔가 좀더 강력한 기능의 클래스 메소드 호출이 가능하다.
28. 컨테이너는 tld에 있는 와 taglib 지시자의 uri 값을 비교합니다.
uri가 실제 태그 핸들러가 있는 위치를 나타낼 필요는 없다.
그냥 태그를 구별하기 위한 고유의 이름을 설정하기 위한 것이 uri이다.
[출처] HeadFirst Servlet_jsp 9장 : JSTL 사용과 커스텀 태그|작성자 kimgas2000

16 Replies to “JSP : headfirst 9장 jstl 사용하기: 막강한 커스텀 태그”