01scope
java web app 의 4개의 영역(영역=scope) -교재 132p 참고
1) page: 하나의 jsp 페이지
2) request: 하나의 http 요청
3) session: 하나의 브라우저
4) application: 하나의 웹 어플리케이션
02page
page 영역
<%
pageContext.setAttribute("pageAttr1", "pageVal1");
%>
<%
String attr1 = (String) pageContext.getAttribute("pageAttr1");
%>
pageContext.~
request, response
같은 페이지라서 setAttribute 로 값을 넣고 getAttribute 로 값을 꺼낼 수 있다 (object 로 반환되므로 형변환)
03pageMain, pageSub
main
<%
pageContext.setAttribute("pageAttr2", "pageVal2");
%>
<hr>
<jsp:include page="03pageSub.jsp"></jsp:include>
<hr>
<%= pageContext.getAttribute("pageAttr2") %>
set 으로 pageAttr2 에 pageVal2 저장, sub 파일 갑자기 삽입, get 으로 pageAttr2 에 저장된 값 반환
sub
<%= pageContext.getAttribute("pageAttr2") %>
get 으로 pageAttr2 값 반환
→ sub 파일에서는 pageAttr2 값이 null 로 나옴. 다른 파일이기 때문에 전달 안됨
04applicartion,getAttribute
application
<%
application.setAttribute("appAttr1", "appVal1");
%>
이번에는 application.setAttribute
아무튼 appAttr1 에 appVal1 을 넣어주었다
getAttribute
<%= application.getAttribute("appAttr1") %>
appAttr1 에 저장된 값을 반환
→ 파일은 연결되어 있지 않음. 그래서 각 파일을 각각 따로 실행.
결과: 값이 잘 반환됨 (다른 파일임에도/아까 page 랑은 다르다
05scope
request, session, application 비교
<%
Integer reqCounter = (Integer) request.getAttribute("counter");
if (reqCounter == null) {
reqCounter = 0;
}
reqCounter++;
request.setAttribute("counter", reqCounter);
Integer sesCounter = (Integer) session.getAttribute("counter");
if (sesCounter == null) {
sesCounter = 0;
}
sesCounter++;
session.setAttribute("counter", sesCounter);
Integer appCounter = (Integer) application.getAttribute("counter");
if (appCounter == null) {
appCounter = 0;
}
appCounter++;
application.setAttribute("counter", appCounter);
%>
<ul>
<li>request counter : <%= request.getAttribute("counter") %></li>
<li>session counter : <%= session.getAttribute("counter") %></li>
<li>application counter : <%= application.getAttribute("counter") %></li>
</ul>
차례대로 request, session, application
실행하면 다음과 같이
새로고침을 하면 request 는 그대로, session 과 application 은 카운트가 증가한다
시크릿탭으로 접속해서 확인해보면, session 은 초기화, application 카운트 숫자는 그대로 유지
같은 와이파이를 공유한다면, 아이피주소로 들어가도 application 은 유지된다
결론: request 가 안전함
06member-list,signup-form,signup-process
member-list
<ul>
<%
List<String> members = (List<String>) application.getAttribute("members");
if (members != null) {
for (String member : members) {
%>
<li><%= member %></li>
<%
}
}
%>
</ul>
application.getAttribute 로 members 를 받고 members 가 null 이 아니면 리스트로 출력
signup-form 링크를 걸어서 이동할 수 있도록 함
signup-from
그냥 로그인 창, action 으로 signup-process 로 이동시켜줌
signup-process
<%
// application 영역에 파라미터로 받은 userName을 list에 추가하고
List<String> list = (List<String>) application.getAttribute("members");
if (list == null) {
list = new ArrayList<>();
application.setAttribute("members", list);
}
String userName = request.getParameter("userName");
if (userName != null) {
list.add(userName);
}
// member-list.jsp로 리디렉션
response.sendRedirect("06member-list.jsp");
%>
application.getAttribute 로 members 를 받아서 , null 이면 list 생성하여 application.setAttribute 로 members 에 list 넣어줌
로그인할때 입력했던 username 을 request.getParameter 로 받아서 null 이 아니면 list 에 추가
member-list 파일로 리디렉션
정리하면,
member 파일 실행하면 등록하기 링크로 signup-form 파일로 이동하여 이름 적고 등록, 전송하면 signup-process 에 의해 등록된 뒤 바로 member 파일로 다시 이동하는데, 이 때 등록한 이름이 리스트로 함께 뜬다
07add-book, book-form, book-list
add-book
<%
List<MyBook> books = (List<MyBook>) application.getAttribute("books");
if (books == null) {
books = new ArrayList<>();
application.setAttribute("books", books);
}
// request 파라미터 처리
String title = request.getParameter("title");
String priceString = request.getParameter("price");
priceString = priceString == null ? "0" : priceString;
int price = Integer.parseInt(priceString);
MyBook book = new MyBook(title, price);
//리스트에 추가
books.add(book);
// 리디렉션
response.sendRedirect("07book-list.jsp");
%>
book-form
<form action="07add-book.jsp" method="post">
<input type="text" name="title" placeholder="책 제목">
<br>
<input type="number" name="price" placeholder="가격">
<br>
<input type="submit" value="등록">
</form>
입력하면 add-book 파일로 보내주겠네
book-list
<h1>책 목록</h1>
<a href="07book-form.jsp">책 등록하기</a>
<ul>
<%
List<MyBook> books = (List<MyBook>) application.getAttribute("books");
if (books != null) {
for (MyBook book : books) {
%>
<li><%= book.getTitle() %> : <%= book.getPrice() %>원</li>
<%
}
}
%>
</ul>
<hr>
<h1>표현언어 (expression language - el)</h1>
<ul>
<li>${books[0].title } : ${books[0].price }원</li>
<li>${books[1].title } : ${books[1].price }원</li>
</ul>
book-form 파일로 링크 걸려있음
'course 2021 > JSP' 카테고리의 다른 글
JSP13 - 11el(2) (0) | 2021.11.20 |
---|---|
JSP12 - 11el (0) | 2021.11.19 |
JSP10 - 09cookie (0) | 2021.11.19 |
JSP09 - 08session (0) | 2021.11.18 |
JSP08 - 07redirect (0) | 2021.11.17 |