스프링의 정석/Ch. 02 Spring MVC

16. 서블릿과 JSP (4)

돌맹이떼굴떼굴 2023. 7. 19. 07:07

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 호출되는데 소요되는 시간이 나온다. 처음에는 필터가 객체가 생성되고 하는 시간으로 시간이 걸리지만, 다음에 다시 호출할 때는 시간 소요가 주는것 있다.