코딩 개발/Java

JSTL (Jsp Standard Tag Library)

호소세 2023. 5. 29. 10:20
728x90
반응형

JSTL 이란?

JavaServer Pages Standard Tag Library의 약자로 , JSP 에서 자주 사용되는 기능을 태그로 제공하는 라이브러리입니다.

JSTL을 사용하면 JSP 코드를 간결하고 직관적으로 작성할 수 있습니다.

 

JSTL 설정 방법

https://mvnrepository.com/artifact/javax.servlet/jstl/1.2

 

에 방문하여

jar 파일을 다운로들합니다.

그 다음 다운로드한 jar 파일을 Dynamic project 파일 안에 있는 

src\main\webapp\WEB-INF\lib 폴더 안에 넣어서 사용하면 됩니다. 아니면 Apache-tomcat 파일안에 lib에 넣어서 사용해도 됩니다.

 

예제

파일을 조금 많이 만들어야 하기 때문에 천천히 읽어보면서 이해하는 것이 중요하다고 생각됩니다. 아니면 DAO 파일은 생략하고 제작하겠습니다. 너무 많으면 집중이 흐려지기 때문에 그냥 메서드에 대해서만 설명하겠습니다.

 

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>EL과 JSTL</title>
</head>
<body>
<div>
<h4>EL과 JSTL : View 영역에 해당되는 jsp 기술</h4>
<%-- request 와 session 에 저장된 정보를 표현 --%>
<br>
<a href="Test01Servlet?id=java">EL Test1</a><br>
</div>
</body>
</html>

Test01Servlet 에 통신을 보내기 위해서 jsp 파일을 하나 생성합니다.

 

Test01Servlet.java

@WebServlet("/Test01Servlet")
public class Test01Servlet extends HttpServlet{
	private static final long serialVersionUID = 1L;
	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String id=request.getParameter("id");
		try {
			MemberVO vo=MemberDAO.getInstance().findMemberById(id);
			System.out.println(vo);
			if(vo!=null) {
				request.setAttribute("member", vo);
				HttpSession session=request.getSession();
				session.setAttribute("member", new MemberVO("mybatis","a","고슬링","LA"));
				getServletContext().setAttribute("member", new MemberVO("springmvc","a","이강인","수원"));
				request.getRequestDispatcher("step01-el.jsp").forward(request, response);
			}else {
				System.out.println("회원이 존재하지 않습니다");
			}
		} catch (ClassNotFoundException | SQLException e) {
			e.printStackTrace();
		}
	}
}

1. DAO에서 멤버 id 로 존재하는 멤버를 찾아오는 함수 작성

MemberVO vo=MemberDAO.getInstance().findMemberById(id);

2. 사실 존재 유무에 따른 조건문은 크게 중요하지 않고 여기서 중요하게 봐야할 것은 session, request, ServletContext에 저장되는 값을 중요하게 봐야합니다.

3개 다 "member"라는 이름으로 저장하고 있는데, 이것을 JSTL로 어떻게 찾아오는지가 가장 중요합니다.

3. 저장하고 step01-e.jsp로  값을 보내줍니다.

 

step01-e.jsp

<%@page import="org.kosta.model.MemberVO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>step01 el</title>
</head>
<body>
<div>
<%-- 별도의 import 와 object casting 필요없이 바로 접근해 출력  --%>
EL 로 컨트롤러 서블릿에서 공유한 회원 객체를 표현 :  
<%-- 
  별도의 영역을 표현하지 않으면 request -> session -> application(ServletContext) 순으로 찾아서
  출력  
 --%>
회원명 ${requestScope.member.name} 주소 ${requestScope.member.address} <br>
회원명 ${sessionScope.member.name} 주소 ${sessionScope.member.address} <br>
회원명 ${applicationScope.member.name} 주소 ${applicationScope.member.address} <br>
<%-- request 에 저장된 회원 정보가 출력  --%>
회원명 ${member.name} 주소 ${member.address} <br>
<hr>
기존 스크립틀릿으로 회원 객체 표현 : 
<%  MemberVO vo=(MemberVO)session.getAttribute("member"); %>
회원명 <%=vo.getName() %>  주소 <%=vo.getAddress() %>
</div>
</body>
</html>

1. 별도의 영역을 표현하지 않으면 request-> session -> application(ServletContext) 순으로 데이터를 찾아서 출력해줍니다.

아무것도 작성하지 않고 ${member.name} 만 작성하면 request 단계에 있는 "member" 의 데이터를 찾아온다는 말이죠.

현재, request에 저장된 member의 이름은 아이유이고 주소는 오리 입니다. 조금 있다 결과값을 보여드리겠습니다.

2. request에 있는 것을 받아올 때는

회원명 ${requestScope.member.name} 주소 ${requestScope.member.address}

이런식으로 가져오면 되고,

session에 있는 것을 받아올 때는

회원명 ${sessionScope.member.name} 주소 ${sessionScope.member.address}

ServletContext에서 받아올 때는

회원명 ${applicationScope.member.name} 주소 ${applicationScope.member.address}

이렇게 하면됩니다.

3. 기존에는 java 문법을 이용하여 객체를 선언하고 다운캐스팅을하면서 가져온 다음 화면에 나타냈다면, JSTL을 이용하면서 한줄로 마무리가 가능해졌습니다.

기존 문법(session 데이터 가져오기)

<%  MemberVO vo=(MemberVO)session.getAttribute("member"); %>
회원명 <%=vo.getName() %>  주소 <%=vo.getAddress() %>

결과

위의 jsp 파일의 결과 입니다.

 

소감

처음 JSTL을 봤을 때 이 기술은 진짜 천재가 만든 것이다 라는 생각을 했습니다. 어떻게 바로 알아서 저장되어 있는 값을 가져오는 것일까를 생각했습니다. 생각해보니 request, session, ServletContext에 대한 값들을 미리 설정해 놓고 차례대로 if문을 사용해서 있으면 가져오고 없으면 다음 것을 가져와라 라는 문장을 작성하면 될 것도? 같더라고요.

이렇게 세상을 편하게 만들어주는 사람들에게 존경을 표하고 싶고 저 또한 세상에 도움이 될 사람이 되고 싶습니다.

다음 시간에는 JSTL 문법 몇가지 알아보겠습니다.

반응형