JSP서블릿 6일차

한 일

  • JSTL
  • Bean, Prameter, If, Switch 사용
  • JSTL 반복문
  • JSTL로 객체 사용하기
  • JSTL 묵시적 객체 Implicit Objects
  • 리스트 객체의 forEach 반복문

JSTL

  • JSP 표준 태그 라이브러리. 여러 프로그램이 공통으로 사용하는 코드를 모아둔 집합.
  • 기본기호: ${}
    Expression <%= %>과 비슷한 역할이라고 생각하면 됨.
  • 여러 종류의 태그가 있으며 가장 많이 사용할 태그는 <c:if>, <c:forEach>등에 사용될 Core(c).
  • core tags : 변수 지원, URL관리, 흐름제어 등을 제공. (예 - if문 등)

JSTL 1.2 라이브러리 추가하기

  • 드라이버 넣기(JSTL 1.2 maven 검색 > .jar파일다운로드)
    1) 프로젝트에 : 각 프로젝트의 webcontent>WEB-INF>lib에 넣어줌
    2) 톰캣프로그램에 : C:\Program Files\Apache Software Foundation\Tomcat 9.0\lib 에 넣어줌
    => 자주쓸거면 톰캣에 넣는게 편함. 프로젝트 하나하나에 넣어줄필요없음.

JSTL의 사용

  • JSTL을 사용하고자 하는 JSP 혹은공통 JSP 파일상단(uft8설정 아래)에 다음과 같은 코드를 선언한다.
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    url주소의 마지막 자리인 core와 prefix="c"는 어떤 태그를 사용하는가에 따라 변경될 수 있음.

core tags의 명령어

  • <c:out value="출력할 문구"> : 값을 출력
<c:out value="JSTL 안녕!"/>

  • <c:set> : 변수명에 값을 할당
  • <c:if> : 조건에 해당하는 블럭과 사용될 scope설정
  • <c:choose> : switch와 유사
  • <c:when> : switch문의 case에 해당
  • <c:otherwise> : switch문의 default에 해당
  • <c:forEach> : 반복문. items 속성에 배열을 할당할 수 있다

JSTL로 변수 지정하기

  • 생성: <c:set var="변수명" value="값"></c:set>
  • 사용: ${변수명}

JSTL으로 Bean, Prameter, If, Switch 사용하기

  • Bean 사용
    <jsp:useBean id="객체명" class="" /> 으로 Bean객체를 만든 후
    ${변수명.메서드} 로 사용

beans/TestBean.class

public class TestBean {
	public String getInfo() {
		return "Bean에서 불려왔음";
	}
}

jstl.jsp

<jsp:useBean id="test" class="beans.TestBean" /> <!-- Bean객체 생성 -->
<p> getInfo메서드 : <c:out value="${test.info}" />

  • Prameter
    parameter 가져오기: ${param.속성이름}
<!-- parameter중 name속성의 값을 출력함(테스트는 url창에 ?name=값 으로 확인) -->
<p> 파라메타 : <c:out value="${param.name}" />


  • If
    else if문은 따로 없기때문에 if문을 중첩해 사용해야함
<!-- IF문 -->
<c:if test="${param.name == 'bob'}">
	헬로우 bob
</c:if>
<c:if test="${param.name != 'bob'}">
	bob 이 아니군요.
</c:if><br>

url에 입력된 parameter를 받아와 if문으로 확인
1) 첫번째 if문이 true일 때


2) 첫번째 if문은 false, 두번째 if문은 true일 때

  • Switch (Choose)
<!-- SWICH문 JSTL choose, when:케이스, otherwise: 디폴트 -->
<c:choose>
	<c:when test="${param.id == 1}">
		<b>아이디는 1이다.</b>
	</c:when>
	<c:when test="${param.id == 2}">
		<b>아이디는 2이다.</b>
	</c:when>
	<c:otherwise>
		<b>아이디는 1또는 2가 아니다.</b>
	</c:otherwise>
</c:choose>

forEach 반복문

<c:forEach var="변수" begin="변수의초기값" end="변수의최종값" step="뛰어넘을수or더할수">

<c:forEach var="i" begin="0" end="10" step="2">
	i의 값: <c:out value="${i}" /> <br>
</c:forEach>

JSTL로 객체 사용하기

PassObjects.servlet 의 doGet메서드

// 각각 다른 user객체(이름, id)들을 다른 scope로 전달
User user1 = new User("Bob", 1);
User user2 = new User("Mike", 2);
User user3 = new User("Sue", 3);

// 리퀘스트 스코프 (리퀘스트로 저장)
request.setAttribute("user1", user1);

// 세션 스코프 (user2를 세션로 저장)
HttpSession session = request.getSession();
session.setAttribute("user2", user2);

// 컨텍스트 스코프 (user3을 컨텍스트로 저장)
ServletContext context = getServletContext();
context.setAttribute("user3", user3);

recieveObjects.jsp

<p><c:out value="${user1.name}"></c:out></p>
<p><c:out value="${user2.name}"></c:out></p>
<p><c:out value="${user3.name}"></c:out></p>


각각 scope가 request, session, context이기때문에 값이 유지되는 시간이 다르다.

JSTL의 묵시적 객체 Implicit Objects

  • 묵시적 객체란 선언하지 않아도 미리 정의되어있는 객체를 뜻함

PassObjects.servlet 의 doGet메서드

Map<String, String> map = new HashMap<>();
map.put("fruit1", "apple");
map.put("fruit2", "orange");

// mapList라는 속성에 map의 key와 value를 묶어서 저장
request.setAttribute("mapList", map);

recieveObjects.jsp

<!-- map list => key값만 지정해주면 거기맞는 value를 출력해줌-->
<p><c:out value="${mapList.fruit1}"></c:out></p>
<p><c:out value="${mapList.fruit2}"></c:out></p>
<p><c:out value="${mapList['fruit1']}"></c:out></p>
<p><c:out value="${mapList['fruit2']}"></c:out></p>

리스트 객체의 forEach 반복문

공통
PassObjects.servlet 의 doGet메서드

List<User> list = new ArrayList<>();
list.add(new User("dog", 1));
list.add(new User("cat", 2));
list.add(new User("cow", 3));

session.setAttribute("list", list);
//		request.setAttribute("list", list);

request.getRequestDispatcher("/recieveObjects.jsp").forward(request, response);

1) id와 name값을 한 행에 출력
recieveObjects.jsp

<!-- array list (자주 쓰임. 이 개념이 제일 중요함.) -->
<!-- item을 하나씩 저장하는 변수가 var, item이 하나의 유저리스트  -->
<c:forEach var="item" items="${list}">
	${item.id} : ${item.name} <br>	<!-- 현재 선택된 item의 아이디:이름 을 출력 --> 
</c:forEach>

2) 테이블 형식으로 id와 name값을 출력
recieveObjects.jsp

<!-- 테이블 안에 입력 -->
<table border="1">
	<tr>
		<th>ID</th><th>이름</th>
	</tr>
	<c:forEach var="item" items="${list}">
	<tr>
		<td>${item.id}</td><td>${item.name}</td>
	</tr>
	</c:forEach>
</table>

객체 예제 한번에 보기

beans/User.class

public class User {
	private String name;
	private int id;
	
	public User(String name, int id) {
		super();
		this.name = name;
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
}

controller/PassObjects.servlet

@WebServlet("/pass")
public class PassObjects extends HttpServlet {
	private static final long serialVersionUID = 1L;
     
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 각각 다른 user객체(이름, id)들을 다른 scope로 전달
		User user1 = new User("Bob", 1);
		User user2 = new User("Mike", 2);
		User user3 = new User("Sue", 3);
		
		
		// 리퀘스트 스코프 (리퀘스트로 저장)
		request.setAttribute("user1", user1);
		
		// 세션 스코프 (user2를 세션로 저장)
		HttpSession session = request.getSession();
		session.setAttribute("user2", user2);

		// 컨텍스트 스코프 (user3을 컨텍스트로 저장)
		ServletContext context = getServletContext();
		context.setAttribute("user3", user3);
		
		// map list 보내기
		Map<String, String> map = new HashMap<>();
		map.put("fruit1", "apple");
		map.put("fruit2", "orange");
		
		request.setAttribute("mapList", map);
		
		// array list
		List<User> list = new ArrayList<>();
		list.add(new User("dog", 1));
		list.add(new User("cat", 2));
		list.add(new User("cow", 3));
		
		session.setAttribute("list", list);
		request.getRequestDispatcher("/recieveObjects.jsp").forward(request, response);
	}

}

recieveObjects.jsp

<!-- getset을 직접 작성할 필요 없이 변수명.속성명 으로 값을 가져올 수 있다 -->
<p><c:out value="${user1.name}"></c:out></p>
<p><c:out value="${user2.name}"></c:out></p>
<p><c:out value="${user3.name}"></c:out></p>
<br><br>
<!-- map list => key값만 지정해주면 거기맞는 value를 출력해줌-->
<p><c:out value="${mapList.fruit1}"></c:out></p>
<p><c:out value="${mapList.fruit2}"></c:out></p>
<p><c:out value="${mapList['fruit1']}"></c:out></p>
<p><c:out value="${mapList['fruit2']}"></c:out></p>
<br><br>
<!-- array list (자주 쓰임. 이 개념이 제일 중요함.) -->
<!-- item을 하나씩 저장하는 변수가 var, item이 하나의 유저리스트  -->
<c:forEach var="item" items="${list}">
	${item.id} : ${item.name} <br>	<!-- 현재 선택된 item의 아이디:이름 을 출력 --> 
</c:forEach>
<br><br>
<!-- 테이블 안에 입력 -->
<table border="1">
	<tr>
		<th>ID</th><th>이름</th>
	</tr>
	<c:forEach var="item" items="${list}">
	<tr>
		<td>${item.id}</td><td>${item.name}</td>
	</tr>
	</c:forEach>
	
</table>

좋은 웹페이지 즐겨찾기