JSP에서 <%%>를 사용하여 자바를 사용할 수 있지만 이 방식으로 사용 시 JSP가 매우 더러워질 수 있다.
본래 JSP의 목적에 맞게 VIEW로만 활용하여 깔끔한 코드를 유지해야 하는 것이 맞기 때문에 EL 표기법을 사용하여 깔끔한 코드를 유지할 수 있다.
EL의 표기법은 ${ }을 사용하면 된다 // Jquery 표기법과 헷갈리지 말자! = $(' ')
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@page import="com.VO.UserBoardVO"%>
<%@ page contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%
UserBoardVO bvo = new UserBoardVO();
bvo.setNum(11);
bvo.setId("Tim");
bvo.setTitle("게시판 테스트");
bvo.setContent("내용 테스트");
pageContext.setAttribute("bvo", bvo);
//request객체
pageContext.setAttribute("msg", "World");
//아래의 EL을 사용하면 아래의 EL 값을 변경할 필요없이 값을 바꿈 = 타이핑이 줄어들음
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title here</title>
</head>
<body>
<!-- EL expression Language, 화면에 표시 -->
<div>
<%
out.println("Hello");
UserBoardVO b = (UserBoardVO)pageContext.getAttribute("bvo");
%>
</div>
<div>제목: <%=b.getTitle() %></div> <!-- 일반 컨텍스트 사용하여 표시 -->
<div>내용: ${bvo.content} </div>
<!-- private으로 설정해서 get같은거 써야 정상이지만 그냥 객체 이름인 bvo써서 .content만 쓰면 해결됨 -->
<!-- 편의성 만땅 -->
</div>
</body>
</html>
위의 코드처럼 일반적으로는 attribute를 받고 <%=b.getTitle%>과 같이 사용하는 것도 가능하지만 코드의 가독성이 떨어진다.
따라서 EL 표기법을 사용하여 ${bvo.content}로 간편하게 사용하여 표기할 수 있다.
- private으로 설정했지만 get등의 표기법을 생략하고 .content로 바로 표기 가능.
리스트 형식을 for을 사용하여 EL 표기법으로 사용하려면 아래와 같이 사용한다.
일단 for 루프를 EL표기법만으로는 표기할 수 없기에 taglib을 사용할 수 있게 만들어주는 라이브러리를 설치해야한다.
https://mvnrepository.com/artifact/javax.servlet/jstl/1.2
위의 링크에 가서 jar 파일을 다운받은 후에, 작업하는 프로젝트의 main\webapp\WEB-INF\lib 폴더안에 저장한다.
저장 후에 JSP상단에서 아래의 코드를 입력
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
c는 core함수만 이용하겠다는 의미이고 url은 url을 참조하여 이용하겠다는 의미?
for문을 사용하는 방법은 두가지가 있다.
1. forEach를 사용하고 var에 b라는 변수를 대입하여 items안에 있는 list2라는 값을 출력
<c:forEach var="b" items="${list2}">
<!-- items는 list2의 객체를 다룬다는 말이고 -->
<!-- var는 변수를 빼내서 어떤 이름으로 저장할 건지 설정-->
<div>${b.title}</div>
</c:forEach>
2. begin, 즉 0번부터 end, list2의 사이즈까지 status라는 변수를 사용하여 status.index로 출력
<c:forEach begin="0" end="${list2.size()}" varStatus="status">
<div>
${list2[status.index].title }
</div>
</c:forEach>
EL형식으로 Map의 객체를 출력하려면 아래와 같이 출력한다
c:forEach에서 변수를 m으로 주고 map을 EL로 지정하여 출력한다.
각각의 key value를 더블 EL 표기법을 사용하여 더블for 을 사용하여 값을 출력한다.
<%
List list = new ArrayList();
list.add(1);
list.add(2);
Map map = new HashMap();
map.put("num", list);
request.setAttribute("map", map);
%>
<div>
<c:forEach var="m" items="${map}">
<c:forEach var="s" items="${m.value}">
<!-- 태그로 더블 for문 만들기 -->
${s}
</c:forEach>
</c:forEach>
</div>
이 때 setAttribute로 값을 배정하는 것 대신에 아래와 같이 태그 안에 지역을 지정해주면 코드를 생략할 수 있다.
<c:set var="map" value="<%=map%>" scope="page"> </c:set> <!-- </c:set>을 줄여서 /로 사용, body가 없기때문에 이렇게 사용 가능 -->
map이라는 변수에 map의 값을 배정하고 scope지역은 page로 지정해서 이 페이지 안에서만 map의 값을 사용 가능
최종활용
아래 service에서 request영역으로 list라는 List 객체를 전달하였으면
public String getPath() {
String m = getP();
if(m == null) {
NewsDAO dao = new NewsDAO();
List<NewsVO> list = dao.getnewsList();
request.setAttribute("list", list);
return "/mainPage.jsp";
}
return null;
}
이 list의 값을 출력하기 위해 스크립트립인 <%%>을 사용하는 것이 아닌 아래와 같이 사용
<ul class="newsTitle">
<c:set var="list" value="${requestScope.list}"/>
<c:forEach var="vo" items="${list}">
<li><a href='${vo.link }' target='_blank'>${vo.title}</a></li>
</c:forEach>
</ul>
c:set을 사용하여 서비스 클래스에서 request영역으로 보내준 ilst를 value = "${requestScope.list }"로 받아오고
list의 변수이름으로 할당받아 c:forEach 태그로 반복문 사용.
자바의 문법을 제외함으로써 뭔가 더욱 HTML스러워지고 깔끔해졌다.
'국비과정 > 자바스크립트 (JSP & Servlet 포함)' 카테고리의 다른 글
파이썬 (1054, "Unknown column 'nan' in 'field list'") (0) | 2022.03.19 |
---|---|
JS 마우스 이벤트 관련 (0) | 2022.03.18 |
자바스크립트 이벤트 종류 (0) | 2022.03.09 |
ajax 이해 안될 때 이걸 참조하자 (0) | 2022.03.08 |
Java Script의 let과 constants, template literal(backtick 사용) (0) | 2022.03.07 |