2-16 서블릿과 JSP (4)

서현우·2022년 5월 12일
0

스프링의정석

목록 보기
16/85

JSTL(JSP Standard Tag Library)

<c:set>, <c:if> ...
<%= 값 %> => EL ${ }
<$ ~ %> => JSTL

jstl.jsp

<%@ page contentType="text/html;charset=utf-8"%>
<%@ taglib prefix="c"   uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<html>
<head>
	<title>JSTL</title>
</head>
<body>
<!-- EL은 lv사용 X => 저장소에 저장 -->
<!-- Scope="page"가 생략 -->
<!-- value값을 to에 저장 -->
<c:set var="to"   value="10"/>
<!-- value값을 배열arr에 저장-->
<c:set var="arr"  value="10,20,30,40,50,60,70"/> 
<!-- forEach -->
<!-- 1부터 to(10)까지를 i에 넣어서 출력 -->
<c:forEach var="i" begin="1" end="${to}">
	${i}
</c:forEach>
<br>

<!-- test가 true이면(배열arr이 비어있지 않으면) -->
<c:if test="${not empty arr}">
	<!-- 배열arr의 값을 하나씩 꺼내서 elem에 저장. -->
	<!-- status : count는 1부터 시작, index는 0부터 시작. -->
	<c:forEach var="elem" items="${arr}" varStatus="status">
		${status.count}. arr[${status.index}]=${elem}<BR>
	</c:forEach>
</c:if>	
<!-- test가 true이면 -->
<c:if test="${param.msg != null}">
	<!-- msg출력 -->
	msg=${param.msg} 
	<!-- out은 태그가 있으면 태그를 그대로 보여줌 -->
	<!-- Script공격 방어에 유리 -->
	msg=<c:out value="${param.msg}"/>
</c:if>
<br>

<c:if test="${param.msg == null}">메시지가 없습니다.<br></c:if>
<c:set var="age" value="${param.age}"/>

<!-- if/else if/else	 -->
<c:choose>
	<c:when test="${age >= 19}">성인입니다.</c:when>
	<c:when test="${0 <= age && age < 19}">성인이 아닙니다.</c:when>
	<c:otherwise>값이 유효하지 않습니다.</c:otherwise>
</c:choose>
<br>

<!-- format -->
<c:set var="now" value="<%=new java.util.Date() %>"/>
Server time is <fmt:formatDate value="${now}" type="both" pattern="yyyy/MM/dd HH:mm:ss"/>	
</body>
</html>

Filter

공통적인 요청 전처리와 응답 후처리에 사용. 로깅, 인코딩(변환) 등.
중복코드 분리.
DispatcherServlet, AOP와 비슷.

처리 순서 1

필터 1개로 처리

--> 1. 요청을 받으면 Filter에서 전처리 
--> 2. 서블릿 호출
--> 3. 서블릿에서 처리 
--> 4. Filter에서 후처리를 하고 응답

처리 순서 2

필터 2개로 처리

--> 1. 요청을 받으면 Filter1에서 전처리
--> 2. Filter2 호출
--> 3. Filter2에서 전처리
--> 4. 서블릿 호출
--> 5. 서블릿에서 처리
--> 6. Filter2에서 후처리
--> 7. Filter1에서 후처리를 하고 응답

PerformanceFilter.java

실행 시간을 구하는 예제

package com.fastcampus.ch2;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;


//@WebFilter : 클래스를 필터로 적용.
//(urlPatterns="/*") : 필터를 적용할 요청의 패턴 지정.(모든 요청에 필터를 적용)
@WebFilter(urlPatterns="/*")
public class PerformanceFilter implements Filter {
	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		// 초기화 작업
	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		// 1. 전처리 작업으로 할 것(없어도 됨)
		long startTime = System.currentTimeMillis();

		// 2. 서블릿 또는 다음 필터를 호출(고정)
		chain.doFilter(request, response); 
		
		// 3. 후처리 작업으로 할 것(없어도 됨)
		System.out.print("["+((HttpServletRequest)request).getRequestURI()+"]");
		System.out.println(" 소요시간="+(System.currentTimeMillis()-startTime)+"ms");
	}

	@Override
	public void destroy() {
		// 정리 작업
	}

}
profile
안녕하세요!!

0개의 댓글