<c:out value="JSTL 안녕!"/>
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}" />
<!-- parameter중 name속성의 값을 출력함(테스트는 url창에 ?name=값 으로 확인) -->
<p> 파라메타 : <c:out value="${param.name}" />
<!-- 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일 때
<!-- 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>
<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>
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이기때문에 값이 유지되는 시간이 다르다.
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>
공통
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>