Day 52 - JSP (EL, JSTL)
scope 객체의 순서가 존재
page -> request -> session -> application
redirect port를 호출하는 response.redirect()
forward requestDispatcher 객체
index.jsp에서 redirect로 요청한 page는 index.jsp로 주소를 전달한 후 redirect로 요청된 페이지가 실행된다.
sendRedirect는 요청받으면 새로 생성해서 뿌려주는 것이고
forward는 객체에 값을 담은 상태(pass by reference)로 호출되는 곳에 값을 뿌려준다
scope는 key value / name과 값으로 요청한다
name과 값이 둘다 잘 전달되면 request.getParameter()를 통해서 값을 잘 전달 받는다
name만 있고 값이 없다면 request.getParameter()를 통해해서 ""(비어있는) 값을 전달 받는다
name도 없고 값도 없는 경우는 일단 name이 없으면 매핑이 안되기 때문에 null을 받는다
scriptlet 방식은 scope의 객체를 scriplet으로 호출하고 타입에 맞춰서 casting을 해준 다음에 expression 문법을 통해서 표현하였다.
script는 구성요소에 따라 메모리의 사용 영역이 다르다.
declaration은 member field 처럼 선언되어 사용되기 때문에 요청시 초기화되지 않음
scriptlet은 local variable처럼 값이 선언되어 있다면 요청시 초기화가 됨
EL
EL을 ${name}사용하면 상당히 위의 과정을 줄이고 편하게 사용가능하다.
1. 같은 name을 갖고 있는 경우 page -> request -> session -> application 우선순위에 따라서 호출한다
2. 같은 name을 갖고 있는 경우 prefix를 통하여 명확하게 호출하는 방법은 request 객체인지 session 객체인지 명확하게 작성해주면 된다 ex) vo라는 name을 갖고 있는 경우 ${requestScope.vo} ${sessionScope.vo} requestScope와 sessionScope를 작성하여 사용
3. 전달받은 파라미터값 호출 ${param}사용하여 {param.command}
post 방식은 html의 body를 전달하기 때문에 request, response 인코딩을 설정해줘야 한다.
get 방식은 주소를 전달하기 때문에 설정하지 않아도 문제가 없다.
EL은 SCOPE를 자동으로 호출한다 그리고 중요한건 호출했을 때 키가 없다고 절대 null이 아니다. " "이다
${1+10}
${"A"=="A"}
${10 mod 3}
${10%3}
${"A" eq "A" } equal
${"A" ne "A" } non-equal
${empty""}
${empty null}
JSTL
taglib 라이브러리 올려서 사용
tomcat.apache.org/download-taglibs.cgi
Apache Tomcat® - Apache Taglibs Downloads
Welcome to the Apache Taglibs download page. This page provides download links for obtaining the latest version of the Apache Standard Taglib, as well as links to the archives of older releases. You must verify the integrity of the downloaded files. We pro
tomcat.apache.org
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
prefix= "c"는 문법에 관련
prefix= "fn"은 문자열과 관련