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>
Author And Source
이 문제에 관하여(JSP서블릿 6일차), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@0829kuj/jsp서블릿-6일차저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)