11. JSTL(JSP Standard Tag Libaray)
c는 접두사로 jstl/core 라이브러리를 쓰는 것이다. fmt는 formatting으로 형식화 라이브러리 jstl/fmt를 사용하겠다는 것이다. 기본적으로 두 줄은 넣는다. 접두사가 있어야 c가 붙어있는 jstl tag(태그는 <>를 말한다.)를 사용할 수 있다. <c:set>, <c:if> 등 이 정의돼있는 JSTL이 Tag Libaray이다.
만약 JSP문서에서 if문을 쓰려면 위와 같이 써야한다. if문은 Java이고, msg=${param.msg}, "메세지가 없습니다." 는 HTML이다. 두 가지를 섞어 쓰려면 <%%>으로 나눠서 코드가 쪼개진다. 작업하다 보면 괄호는 빼먹기 쉬워 코드가 망가질 수 있다. 이를 보완하기 위해 생겨난 것이 JSTL이다.
<%=값%>을 간편히 한 것이 EL ${값}이고 자바 코드인 <%~%>을 없애려고 나온 것이 JSTL이다. EL, JSTL 둘다 <%%>을 쓰지 않기 위해 나왔다. EL은 간편하게 쓰기위해 나왔고, JSTL은 블럭 구성이 깨지기 쉬워 나오게 되었다.
EL는 lv를 사용하지 못하므로 저장소에 저장한다음에 값을 써야 한다. 9 line으로 Map에 key "to"에 대한 value로 10이 저장되어 있다. 저장소가 안적혀 있는데 원래는 scope = "page"가 생략되어 있다. 만약 값이 더 오래저장 되고 싶으면 scope = "application"을 사용하면 된다.
<value = "10,20,30,40,50,60,70"/>는 배열로 값이 존재한다. ${not empty arr} 즉 arr(배열)이 비어있지 않으면 실행한다. ${arr}값 {10,20,30 ,,, }이 for문을 돌면서 var="elem"(element)에 들어간다.
VarStatus는 count, index를 갖고 있고 count는 1부터 시작하고, index는 0부터 시작한다. 따라서 ${status.count}는 1부터 찍힌다.
QueryString 값으로 msg=asdf를 입력하면, 위와 같이 출력된다.
parameter가 존재하면 line 21, 22를 출력하는 코드이다. line 22의 <c:out> tag는 QueryString에 tag가 있으면 그대로 출력한다.
msg=${param.msg}는 <p> tag가 먹어 출력이 된다. 하지만 <c:out>은 <p>를 tag로 해석을 안하고 text로 인식해서 출력된다. script 공격을 막을 때 사용할 수 있다.
12. Filter
Servlet에서 중복되는 1. 전처리(로깅, 인코딩 등)를 분리하기 위해서 사용하는 것이 Filter이다. Servlet에 있던 전처리, 후처리를 제거하면 처리 작업만 남아 코드가 간결해진다. 작업 순서는 Filter의 1. 전처리 -> Servlet의 2. 처리 -> Filter의 2. 서블릿 호출 -> Filter의 3. 후처리 로 진행된다. 이 Filter는 나중에 배울 AOP와 관련이 많다.
Filter는 보통 1개인데, 2개가 존재할 수 있다. 필터 다음에 또다른 필터가 있으면 필터가 실행되고 아니면 서블릿이 호출된다.
PerformanceFilter는 수행시간 측정 프로그램이다. startTime에 현재시간을 저장하고 서블릿이 호출된 다음에 후처리 코드에서의 현재시간에서 startTime을 빼면 서블릿 호출에 소요된 시간을 알 수 있다. 이것을 모든 서블릿에 넣으려면 중복이 많아지기 때문에 PerformanceFiler를 사용하면 코드 중복을 줄이고 유지보수에 용이하다.
오른쪽 코드에 중복이 제거되어 간결해진다.
@WebFilter는 servlet 등록할 때와 마찬가지로 필터를 등록할 때 사용해야 한다. PerformanceFiler를 필터로 등록하고 필터를 적용할 대상을 (urlPatterns="/*")에 지정해야 한다. urlPatterns은 필터를 적용할 요청이다. 물론 특정 요청에만 사용할 수 있지만 "/*"는 모든 요청에 대해서 필터를 적용한다는 말이다.
url에 "http://localhost:8080/ch2/el.jsp"를 입력하면, console에 위와 같이 el.jsp가 호출되는데 소요되는 시간이 나온다. 처음에는 필터가 객체가 생성되고 하는 시간으로 시간이 걸리지만, 다음에 다시 호출할 때는 시간 소요가 확 주는것 을 볼 수 있다.
'스프링의 정석 > Ch. 02 Spring MVC' 카테고리의 다른 글
18. @RequestMapping (0) | 2023.07.20 |
---|---|
17. @RequestParam과 @ModelAttribute (0) | 2023.07.19 |
15. 서블릿과 JSP (3) (0) | 2023.07.15 |
14. 서블릿과 JSP (2) (0) | 2023.07.10 |
13. 서블릿과 JSP (1) (0) | 2023.07.09 |