-
Servlet - JSP MVC03 - JSTL and ELWeb/Servlet-JSP 2023. 6. 13. 22:48
1. JSTL이란?
JSTL은 - JSP Standard Tag Library
jsp에 프로그래밍적인 요소를 태그적인 요소로 바꿀 수 있도록 하는 도구이다.
기존의 <%%>등의 jsp에 코드적인 요소를 html태그적인 요소로 바꾸어 좀 더 유지보수하고,
사용하기 편하게 만드는 라이브러리이다.
먼저 jstl을 사용하기 위해서는 외부에서 라이브러리를 받아와야한다.
2. JSTL사용법
JSTL을 사용하기 위해서는 jsp페이지 상단에 아래와 같은 지시자를 포함시켜줘야한다.
<%@taglib prefix ="c" uri="http://java.sun.com/jsp/jstl/core" %>
"c"는 jstl 태그를 사용할 때 접두사로 사용하는 것이다. (다양한 태그들을 식별하기 위함이다.)
jstl의 태그는 크게 4가지로 분류되는데
1. 코어태그: for,if,변수 선언 등 기본적인 자바코드 지원
2. FMT: 포맷팅, 날짜, 통화 시간 등
3. sql,sml태그
4. FN: 여러 함수 제공 태그
이 중 코어태그에 대해 알아보자.
코어태그에서 사용할 수 있는 것들은 위와 같이 정의되어있다.
변수할당 (변수명,값) <c:set var="cnt" value="7" /> switch문 <c:choose> <c:when test="${cnt%2==0}"> //test == case 짝수입니다. </c:when> <c:when test="${cnt%2==0}"> 홀수입니다. </c:when> <c:otherwise> // switch의 default에 해당 일치하는 when절이 없는 경우에 실행 </c:otherwise> </c:choose> for문 <c:forEach var ="i" begin="1" end="5" step="1"> <font size ="${i}">야호~<br> var변수 i 시작 끝 스탭 지정 for문 배열 <% String[] str= {"사과","바나나","포도","귤"}; pageContext.setAttribute("str", str); %> c:forEach var ="f" items="${str}"> ${f}<br> </c:forEach> if문 <c:if test="${mem_inf !=null}"> //... </c:if>
3. EL이란
EL은 Expression Language의 약자로 데이터를 표현하기 위한 표현식이다.
EL또한 jstl과 같이 jsp내에 <%=%>를 대신하여 자바코드를 줄여주는 역할을 한다.
4. EL 사용법
4.1 기본 사용법
${표현식} - 기본적인 EL의 사용방법이다.
EL은 단순히 값만 표현할 수 있는게 아니라 EL안에서 계산도 가능하다.
EL안에 입력할 수 있는 데이터
EL안에서 사용가능한 연산자
4.2 EL의 기본객체
EL은 표현식 뿐아니라 앞서 계속 살펴보았던, 서버내의 임시저장소로 사용할 수 있는 4가지 공간
page,request,session,application에 저장된 값들에 접근할 수 있는 기본객체를 가지고 있다.
pageContext JSP의 page 기본 객체와 동일한 데이터 저장 영역에서 속성을 관리한다. pageScope JSP의 pageContext 기본 객체에 저장된 속성을 데이터 저장 영역에서 관리한다. requestScope JSP의 Request 기본 객체와 동일한 데이터 저장 영역에서 속성을 관리한다. sessionScope JSP의 Session 객체와 동일한 데이터 저장 영역에서 속성을 관리한다. applicationScope JSP의 application 객체와 동일한 데이터 저장 영역에서 속성을 관리한다. -출처: https://gxnzi.tistory.com/68
pageContext는 jsp에서 살펴본 것과 같이 page내의 임시저장소를 의미하는데, pageContext를 통해 jsp의 내장객체 (request,session,application)등을 얻어올 수 있다.
나머지 Scope들은 저장소를 구별하기 위한 접두사와 비슷하다고 생각하면 된다.
만약 Scope를 지정하지 않으면, EL은 PageScope에서 applicationScope까지 영역이 작은 저장소에서 큰 저장소를 순서로 탐색한다.
4.3 EL로 Data 가져오기 위한 DTO(VO) 작성법
- DTO를 작성할 시에 JavaBeans형태로 작성해야한다.
- 기본 생성자가 존재해야한다.
- 멤버변수 접근제어자는 private로 선언되어야한다.
- 멤버변수 접근 가능한 getter와 setter메서드가 존재하고 public으로 선언되어야 한다.
public class MemberVO { private int num; //private 멤버 private String id; private String pass; private String name; private int age; private String email; private String phone; public MemberVO(){} // 기본생성자 public MemberVO(int num, String id, String pass, String name, int age, String email, String phone) { this.num = num; this.id = id; this.pass = pass; this.name = name; this.age = age; this.email = email; this.phone = phone; } public MemberVO(String id, String pass, String name, int age, String email, String phone) { this.id = id; this.pass = pass; this.name = name; this.age = age; this.email = email; this.phone = phone; } @Override public String toString() { return "MemberVO [num=" + num + ", id=" + id + ", pass=" + pass + ", name=" + name + ", age=" + age + ", email=" + email + ", phone=" + phone + "]"; } public int getNum() { //getter들 return num; } public void setNum(int num) { this.num = num; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getPass() { return pass; } public void setPass(String pass) { this.pass = pass; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; }
MemberVO vo = new MemberVO(); vo.setAge(10); vo.setEmail("aaa@aass"); vo.setName("김펭귄"); request.setAttribute("vo",vo);
이를 토대로 위와 같은 vo를 만들었으면, jsp 페이지 내에서 아래와 같이 사용할 수 있다.
//html <tr> <td>${vo.num}</td> <td>${vo.age}</td> <td>${vo.email}</td> <td>${vo.name}</td> </tr> //위와 아래는 동일 <tr> <td>${vo.getNum()}</td> <td>${vo.getAge()}</td> <td>${vo.getEmail()}</td> <td>${vo.getName()}</td> </tr>
EL은 이와 같이 프로퍼티를 표현하기 위한 간단한 표현식을 제공해준다.
만약 위와 같은 규약을 지키지 않고 EL에 값을 불러오고 싶다면 getNum()과 같이 함수를 호출해서 사용해도 된다.
참고자료
나프1탄 (인프런) - 박매일
https://www.inflearn.com/course/%EB%82%98%ED%94%84-mvc-1
https://daesuni.github.io/jstl/
https://velog.io/@welchs1423/JSP-EL%EC%9D%B4%EB%9E%80
'Web > Servlet-JSP' 카테고리의 다른 글
Servlet-JSP MVC05 - JDBC to Mybatis (0) 2023.06.14 Servlet-JSP MVC05 - mybatis 설치 및 기본설정 (0) 2023.06.14 Servlet-JSP MVC03 (1) - forward and Redirect (0) 2023.06.13 Servlet-JSP MVC02(4) - Application,Session,Cookie (0) 2023.06.12 Servlet-JSP MVC02(3) - 내장객체 (0) 2023.06.12