표현언어
1. Expression Language
2. binding 영역에 저장된 값을 나타낼 때 사용할 수 있는 언어이다.
3. JSP 표현식 <%=값%>을 대체할 수 있다.
4. 형식
${값}
5. biding 영역 EL 내장 객체
1) pageContext를 의미하는 pageScope 객체
2) request를 의미하는 resquestScope 객체
3) session을 의미하는 sessionScope 객체
4) application을 의미하는 applicaionScope 객체
<%--우선순위 확인하기 --%>
<div>${msg}</div>
<%-- 각영역의 속성 확인하기 --%>
<div>${pageScope.msg}</div>
<div>${requestScope.msg}</div>
<div>${sessionScope.msg}</div>
<div>${applicationScope.msg}</div>
<%-- 객체 사용하기 --%>
<%
// 객체를 만든 뒤 EL 사용이; 가능한 binding 영역에 넣는다.
Person person = new Person();
person.setName("홍길동");
person.setAge(30);
pageContext.setAttribute("person", person);
%>
<div>이름 : ${person.name}</div> <%-- EL은 person.name을 person.getName() 방식으로 호출해서 보여준다. --%>
<div>나이 : ${person.age}</div><%-- EL은 person.age를 person.getAge() 방식으로 호출해서 보여준다. --%>
<%-- Map 사용하기 --%>
<%
// Map을 만든뒤 EL 사용이 가능한 binding 영역에 넣는다.
Map<String, Object> book = new HashMap<>();
book.put("title", "소나기");
book.put("price", 10000);
pageContext.setAttribute("book", book); //"book" 이 올린 이름이다. ${book})
%>
<div>제목: ${book.title}</div>
<div>가격 :${book.price}</div>
EL 연산자
1. 산술연산
1) +
2) -
3) *
4) / 또는 div
5) % 또는 mod
2. 크기 비교
1) > , gt
2) < , lt
3) >= , ge
4) <= , le
5) == , eq
6) != , ne
3. 논리 연산
1) 논리 AND : && 또는 and
2) 논리 OR : || 또는 or
3) 논리 Not : ! 또는 not
4. 조건 연산
(조건식) ? true 일 때 : false일 때
1. 속성(Attribute)을 저장한 경우
request.setAttribute("name", "홍길동") --->>> ${name}
2. 파라미터(Parameter)를 저장한 경우
/ContextPath/URLMapping?name=홍길동 --->>> ${param.name}
Jstl이란
JSTL은 JavaServer Pages Standard Tag Library의 약어로, Java 코드를 바로 사용하지 않고 HTML 태그(<>) 형태로 직관적인 코딩을 지원하는 라이브러리입니다.
HTML 코드 내에 java 코드인 스크립틀릿 <%= student %>를 ${student}로, <%=if %>문을 <c:if>, <%=for%>문을 <c:forEach>로 대체하여 사용한다.
<c:set> 태그
1. 속성(Attribute)을 저장할 때 사용한다.
2. binding 영역을 지정할 수 있다. (디폴트는 pageContext 에 저장임)
영역 : 작성방법
1) pageScope : page
2) requestScope : request
3) sessionScope : session
4) application : application
3. 형식
<c:set var="속성명" value="값" scope="binding 영역" />
<%-- 속성 저장하기 --%>
<c:set var="age" value= "30"/> <%-- pageContext.setAttribute("age", 30) --%>
<c:set var="isAdult" value="${age >= 20}" />
<div>나이 : ${age}살 </div>
<div>${isAdult ?"성인" : "미성년자"}</div>
<%-- 앞으로 자주 사용할 c:set --%>
<c:set var= "contextPath" value="${pageContext.request.contextPath}" />
<div>${contextPath}</div>
<c:if>
<c:if>
1. if 문이다.
2. else 문이 없다.
3. 형식
<c:if test="조건식">
실행문
</c:if>
<c:set var="age" value= "30" />
<c:if test="${age >= 20}">
<div>성인</div>
</c:if>
<c:if test="${age < 20}">
<div>미성년자</div>
</c:if>
<c:set var="score" value="75" />
<c:if test="${100 >= score and score >= 90 }"> <c:set var= "grade" value= "A"/></c:if>
<c:if test="${90 >= score and score > 80 }"> <c:set var= "grade" value= "B"/></c:if>
<c:if test="${80 >= score and score > 70 }"> <c:set var= "grade" value= "C"/></c:if>
<c:if test="${70 >= score and score > 60 }"> <c:set var= "grade" value= "D"/></c:if>
<c:if test="${60 >= score }"> <c:set var= "grade" value= "F"/></c:if>
<div>${score}점, ${grade}학점</div>
<c:choose>
1. <C:if> 태그를 대체할 수 있다.
2. else if, else 문의 처리가 가능하다.
3. 형식
<c:choose>
<c:when test="조건식">
실행문
</c:when>
<c:when test="조건식">
실행문
</c:when>
<c:otherwise>
실행문
</c:otherwise>
</c:choose>
<c:set var="age" value="20"/>
<c:choose>
<c:when test="${age < 8}">
<c:set var="result" value="미취학아동"/></c:when>
<c:when test="${age < 14}">
<c:set var="result" value="초등학생"/></c:when>
<c:when test="${age < 17}">
<c:set var="result" value="중학생"/></c:when>
<c:when test="${age < 20}">
<c:set var="result" value="고등학생"/></c:when>
<c:otherwise>
<c:set var="result" value="성인"/>
</c:otherwise>
</c:choose>
<div>${age}살, ${result}</div>
<c:forEach>
1. 반복문을 처리한다.
2. 형식
1) 일반 for문
<c:forEach var="속성" begin="시작값" end="종료값" step="증가값">
${속성}
</c:forEach>
2) 향상 for문
<c:forEach var="요소" items="배열 or 리스트">
${요소}
</c:forEach>
jsp
<%-- 1 ~ 5 출력 --%>
<c:forEach var="n" begin="1" end="5" step="1">
<div>${n}</div>
</c:forEach>
<hr>
<%-- 5 ~ 1 출력 --%>
<c:forEach var="n" begin="1" end="5" step="1">
<div>${6 - n}</div>
</c:forEach>
<hr>
<%-- <c:forEach> 태그와 배열 --%>
<%
String[] seasons = {"봄", "여름", "가을", "겨울"};
pageContext.setAttribute("seasons", seasons);
%>
<c:forEach var="season" items="${seasons}" varStatus="vs">
<div>인덱스 : ${vs.index}</div>
<div>요소 : ${season}</div>
</c:forEach>
<hr>
<%-- <c:forEach> 태그와 리스트 --%>
<%
List<String> jobs = Arrays.asList("PM", "기획자", "개발자", "퍼블리셔");
pageContext.setAttribute("jobs", jobs);
%>
<c:forEach var="job" items="${jobs}" varStatus="vs">
<div>인덱스 : ${vs.index}</div>
<div>직업 : ${job}</div>
</c:forEach>
<%-- 임의의 BlogPost 3개를 List에 저장하고 화면에 출력하기 --%>
<%
List<BlogPost> list = Arrays.asList(
new BlogPost(1, "첫 블로그", 10, LocalDate.of(2023, 1, 1)),
new BlogPost(2, "두 블로그", 15, LocalDate.of(2023, 1, 2)),
new BlogPost(3, "세 블로그", 20, LocalDate.of(2023, 1, 3))
);
pageContext.setAttribute("list", list);
%>
<c:forEach var="blogPost" items="${list}">
<div class="blog">
<span class="blogPostNo">${blogPost.blogPostNo}</span>
<span class="title"><a href="">${blogPost.title}</a></span>
<span class="hit">${blogPost.hit}</span>
<span class="createdAt">${blogPost.createdAt}</span>
</div>
</c:forEach>
servlet
import java.time.LocalDate;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@NoArgsConstructor
@AllArgsConstructor
@Data
public class BlogPost {
private int blogPostNo;
private String title;
private int hit;
private LocalDate createdAT;
}
Lombok이란 Java의 라이브러리로 반복되는 메소드를 Annotation을 사용해서 자동으로 작성해주는 라이브러리다.
컴파일 과정에서 자동으로 개발자가 원하는 메소드를 생성/주입 방식으로 동작한다.
getter/seter/constructor 등을 제공한다.
@AllArgsConstructor , @Getter, @Setter 과 같이 사용한다.
롬복 설치
https://projectlombok.org/download
이클립스에 설치하는 것이다
윈도우의 cmd을 통해서 설치한다.
cd (lombok이 있는) 경로
java -jar lombok.jar //
설치파일 나온다
이클립스 실행파일 찾아서 거기에다 설치하면 된다.
자세한 것은 검색하면 자세하게 나온다.