0928 web Filter Action-tag

onnbi·2022년 10월 16일
0

web

목록 보기
6/8
post-thumbnail

Filter

클라이언트와 서버 사이에서 request와 response 객체를 먼저 받아
사전작업 / 사후작업

웹 브라우저가 필요한 서블릿 호출 > 필터가 대신 호출되어 전달받은 정보 수정 > 서블릿에게 전달 (일종의 경유지 역할)

  • init() : 컨테이너가 필터를 호출할 때 해당 메서드가 호출되어 필터 객체를 생성, 초기화
  • doFilter() : 필터 수행 시 구동, 작업을 수행한 뒤 chain을 통해 가공값을 목적지로 전송
  • destroy() : 웹 컨테이너에 의해 호출되어 역할이 끝난 필터를 소멸시킨다

servlet에서 filter 적용

public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {

    // 서블릿 가기 전
    request.setCharacterEncoding("utf-8");
    System.out.println("필터 인코딩 완료");
    chain.doFilter(request, response);
    System.out.println("서블릿 수행 완료");
    // 서블릿 다녀온 후
  
}

spring에서 filter 적용

web.xml : 배포서술자

welcome-file 아래 다음과 같은 인코딩 필터를 추가하여 모든 서블릿에 적용 가능

  <filter>
  	<filter-name>EncodingFilter</filter-name>
  	<filter-class>common.EncodingFilter</filter-class>
  </filter>
  <filter-mapping>
  	<filter-name>EncodingFilter</filter-name>
  	<url-pattern>*.do</url-pattern>
  </filter-mapping>

Action Tag

XML 기술을 이용하여 기존의 JSP 문법을 확장하는 메커니즘 제공

  • 표준 액션 태그
  • 커스텀 액션 태그 (별도의 라이브러리 설치 필요)

표준 액션 태그

jsp:include : 현재 페이지에 특정 페이지를 포함할 때 사용

  • <jsp:include page="./header.jsp"/>

jsp:forward : 하나의 JSP페이지에서 다른 JSP페이지로 요청 전달할 때 사용 (URL 변경 없음)

  • <jsp:forward page="파일명">

jsp:param : include/forward의 하위요소, 해당페이지에 전달할 값을 기록할 때 사용

jsp:useBean : class를 참조하여 빈 객체 생성, setProperty와 getProperty로 값을 저장 조회

jsp:setProperty : java 객체 사용 시, setter

jsp:getProperty : java 객체 사용 시, getter

EL

Expression Language

JSP에 쓰이는 JAVA코드를 간결하게 사용하는 방법으로 화면에 표현하고자 하는 코드를 ${value} 형식으로 표현하여 작성

ex ) <%= request.getParameter("name")%> > ${param.name}

기본형 가져오기

request.setAttribute("name", "랏데");
request.setAttribute("age", 3);
request.setAttribute("addr", "서울");
    <td>${name }</td>
    <td>${age }</td>
    <td>${addr }</td>

Member m 변수 가져오기

    <li>이름 : ${m.name }</li> <!-- 직접 접근이 아닌 getter -->
    <li>나이 : ${m.age }</li>
    <li>주소 : ${m.addr }</li>

데이터가 null일 경우 결과 출력하지 않음

배열, 리스트 가져오기★★★

	<h2>배열사용방법</h2>
	<p>${numArr[0] }</p>
	<p>${numArr[1] }</p>

	<h2>리스트 사용방법</h2>
	<p>${numList[0] }</p>
	<p>${numList[1] }</p>

	<h2>리스트 사용방법2</h2>
	<p>${memberList[0].name }</p>
	<p>${memberList[0].age }</p>
	<p>${memberList[0].addr }</p>
	<p>${memberList[1].name }</p>
	<p>${memberList[1].age }</p>
	<p>${memberList[1].addr }</p>

동일하게 대괄호[]로 가져온다

내장객체 가져오기 request / session

	<h1>request data</h1>
	<p>${m.name }</p>
	<p>${m.age }</p>
	<p>${m.addr }</p>
	<h1>session data</h1>
	<p>${sessionScope.m.name }</p>
	<p>${sessionScope.m.age }</p>
	<p>${sessionScope.m.addr }</p>

request의 사용빈도가 가장 높으므로, session에 붙이는 게 일반적이다

표현식

<table>
  <tr>
    <td>${num1 != num2 }</td>
    <td>${num1 ne num2 }</td>
  </tr>
  <tr>
    <td>${num1 == num2 }</td>
    <td>${str eq "abc"}</td>
  </tr>
  <tr>
    <td>\${str == null }</td>
    <td>${empty str }</td>
  </tr>
  <tr>
    <td>\${str == null }</td>
    <td>${empty str }</td>
  </tr>
  <tr>
    <td>\${str1 == null }</td>
    <td>${empty str }</td>
  </tr>
</table>

<%--
  >		> gt(greater)
  <		> lt(little)
  >=		> ge(greater or equal)
  <=		> le(little or equal)
  == 		> eq(equal)
  !=		> ne(not equal)
--%>

JSTL

JSP Standard Tag Library

JSP에서 사용하는 커스텀 태그로 공통으로 사용하는 코드의 집합을 사용하기 쉽게 태그화하여 표준으로 제공한 것

  1. 라이브러리 등록
    jstl-1.2.jar
  2. 선언
    <%@ taglib uri=http://java.sun.com/jsp/jstl/core” prefiex=“c” %>
  3. 사용
    <c:out value="${welcome}"/>

태그 종류

  • Core Tags ★
  • Formatting Tags
  • Function Tags
  • XML Tags
  • SQL Tags

JSTL Core Tags

<c:set>

변수선언

	<h3>1. 변수선언(기본변수 선언으로 해당 페이지에서만 사용 가능)</h3>
	<c:set var="newVar1" value="1" />
	<c:set var="newVar2" value="안녕하세요" />
	<p>request : ${requestScope.newVar1 }</p>
	<p>session : ${sessionScope.newVar1 }</p>
	<p>page : ${pageScope.newVar1 } </p>

결과 >
request :
session :
page : 1

{newVar1 } 범위가 page이기 때문에 작은 쪽이라 생략해도 나오지만, ${pageScope.newVar2 } request를 생략하기 때문에 쓰는 게 정석

	<h3>2. 변수선언 (범위 지정)</h3>
	<c:set var="num1" value="10" scope="request"/>
	<c:set var="num1" value="100" scope="session"/>
	<p>request : ${num1 }</p>
	<p>session : ${sessionScope.num1 }</p>

<c:remove>

변수삭제

	<c:remove var="num1" scope="session"/>
	<p>request : ${num1 }</p>
	<p>session : ${sessionScope.num1 }</p>

session으로 지정했던 num1 값만 삭제

<c:out>

	<h3>core를 이용한 출력</h3>
	<p>EL : ${num1 }</p>
	<p>core : <c:out value="${num1 }"/></p>
	<p>EL : ${sessionScope.num1 }</p>
	<p>core : <c:out value="${sessionScope.num1 }" default="값이 없음"/></p>

	<c:set var="test" value="<b>진한글씨</b>" />
	<p>EL : ${pageScope.test} </p>
	<p>core1 : <c:out value="${pageScope.test }" escapeXml="true"/></p>
	<p>core2 : <c:out value="${pageScope.test }" escapeXml="false"/></p>

<c:if>

	<c:if test="${num%2 eq 0 }">
		<h3>짝수</h3>
	</c:if>
	<c:if test="${num%2 eq 1 }">
		<h3>홀수</h3>
	</c:if>

<c:choose>

	<c:if test="${num%2 eq 0 }">
		<h3>짝수</h3>
	</c:if>
	<c:if test="${num%2 eq 1 }">
		<h3>홀수</h3>
	</c:if>
	
	<c:choose>
		<c:when test="${num%5 == 0 }">
			<h1>5의 배수입니다</h1>
		</c:when>
		<c:when test="${num%3 == 0 }">
			<h1>3의 배수입니다</h1>
		</c:when>
		<c:when test="${num%4 == 0 }">
			<h1>4의 배수입니다</h1>
		</c:when>
		<c:otherwise>
			<h1>5의 배수가 아닙니다</h1>
		</c:otherwise>
	</c:choose>

<c:forEach>

배열순회

	<table border="1">
		<tr>
			<th>순서</th><th>이름</th><th>나이</th><th>주소</th>
		</tr>
		<c:forEach items="${memberList }" var="m" varStatus="i">
		<tr>
			<td>${i.count }</td>
			<td>${m.name }</td>
			<td>${m.age }</td>
			<td>${m.addr }</td>
		</tr>
		</c:forEach>
	</table>

반복회차 가진 반복문

	<%--
		for(int i=0;i<10;i++)
	 --%>
	 <ul>
	 	<c:forEach begin="0" step="1" end="9" varStatus="i">
	 		<li>${i.index }번째 index 출력 반복문</li>
	 	</c:forEach>
	 </ul>
	 <ul>
	 	<c:forEach begin="0" step="1" end="9" varStatus="i">
	 		<li>${i.count }번째 count 출력 반복문</li>
	 	</c:forEach>
	 </ul>
profile
aelatte coding journal

0개의 댓글