2024. 10. 5. 15:58ㆍJSP
서로 다른 페이지 간에 데이터의 이동을 시켜볼 것이다.
JSP (JavaServer Pages)
JSP란 Java코드를 기반으로 하여 HTML 과 함께 동적 웹페이지를 생성하는 웹프로그래밍 언어이다.
JSP가 실행되면 자바 서블릿(servlet)으로 변환되며 웹 어플리케이션 서버에서 동작 되면서
필요한 기능을 수행하고 그렇게 생성된 데이터를 웹페이지와 함께 클라이어트로 응답한다.
JSP 내장객체 (request / response)
request
서버에서 어떤 정보를 요청하는 것. 요청 정보는 request 객체가 관리한다.
response
웹 브라우저의 요청에 응답하는 것. response객체는 응답(response)의 정보를 가지고 있는 객체이다.
<style>
table {
border-collapse: collapse;
border: 2px solid black;
}
td, th {
padding: 10px;
border: 1px solid grey;
}
thead {
backgroud-color: #dadada;
}
</style>
<body>
<h1>request 와 response 의 내장객체</h1>
<hr>
<h3>스트립틀릿 내부에서는 객체를 별도로 생성하지 않아도 request, reponse에 접근할 수 있다</h3>
<h3>request 와 response 는 JSP의 내장객체에 해당한다 (별도 생성이 필요없음)</h3>
<table>
<thead>
<tr>
<th colspan="3">request 주요메서드</th>
</tr>
<tr>
<td>형식</td>
<td>기능</td>
<td>예시</td>
</tr>
</thead>
<tbody>
<tr>
<td>request.getMethod()</td>
<td>클라이언트가 보낸 요청의 메서드를 문자열로 반환</td>
<td><%=request.getMethod() %></td>
</tr>
<tr>
<td>request.getLocalAddr()</td>
<td>클라이언트가 보낸 요청의 대상 주소(서버 주소)를 문자열로 반환</td>
<td><%=request.getLocalAddr() %></td>
</tr>
<tr>
<td>request.getRemoteAddr()</td>
<td>요청을 보낸 클라이언트의 주소를 문자열로 반환</td>
<td><%=request.getRemoteAddr() %></td>
</tr>
<tr>
<td>request.setAttribute(String name, Object o)</td>
<td>request 내장 객체에 자바 객체를 저장한다</td>
<td><% request.setAttribute("today", new java.util.Date()); %></td>
</tr>
<tr>
<td>request.getAttribute(String name)</td>
<td>request에 저장된 내장 객체를 이름으로 불러와서 Object로 반환한다</td>
<td><%= request.getAttribute("today") %></td>
</tr>
<tr>
<td>request.getCookies</td>
<td>요청에 담긴 쿠키를 배열 형태로 반환한다. null을 반환할 수도 있다</td>
<td><%= request.getCookies() %></td>
</tr>
<tr>
<td>request.getContentType()</td>
<td>request에 담긴 contentType 을 문자열로 반환</td>
<td><%=request.getContentType() %></td>
</tr>
<tr>
<td>request.getReuestURL()</td>
<td>클라이언트가 요청한 주소를 반환</td>
<td><%=request.getRequestURL() %></td>
</tr>
<tr>
<td>request.getProtocol()</td>
<td>요청 프로토콜을 반환한다. http 혹은 https</td>
<td><%=request.getProtocol() %></td>
</tr>
<tr>
<td>request.getServerName()</td>
<td>요청 서버주소를 반환한다. 글자주소를 우선적으로 제공하고, 없으면 IP 반환</td>
<td><%=request.getServerName() %></td>
</tr>
<tr>
<td>request.getServerPort()</td>
<td>요청 서버의 포트번호를 반환한다. 범위는 0 ~65535</td>
<td><%=request.getServerPort() %></td>
</tr>
<tr>
<td>request.getContextPath()</td>
<td>요청받은 자원의 최상위 폴더경로를 문자열로 반환한다<br>
이 경로는 JSP 프로젝트의 webapp(WebContent) 폴더에 해당하는 경로이다
</td>
<td><%=request.getContextPath() %></td>
</tr>
<tr>
<td>request.getRequestURI()</td>
<td>요청받은 자원 고유 식별자를 문자열로 반환한다.
서버안의 주소만 나온다.
전체주소가 아님</td>
<td><%=request.getRequestURI() %></td>
</tr>
<tr>
<td>request.getParameter(String name)</td>
<td>요청에 담긴 클라이언트의 파라미터를 문자열로 반환한다.<br>
클라이언트의 입력값이므로, 서버에서 set하는 메서드는 없다
</td>
<td><%=request.getParameter("guest") %></td>
</tr>
<tr>
<td>request.getQueryString()</td>
<td>주소에서 URL을 제외한 쿼리스트링을 문자열로 반환한다.</td>
<td><%=request.getQueryString() %></td>
</tbody>
</table>
<form>
<p><input name="guest" placeholder="손님 이름 입력" required></p>
<p><input type="submit" value="제출"></p>
</form>
</body>
</html>
2개의 페이지를 이용한 데이터 입/출력
JSP 스크립트 태그 : JSP 페이지에서 자바코드를 사용하고 싶을 때 사용하는 문법
지시자(directive) | <%@ %> | import, include 등을 설정 |
선언문 (declaration) | <%! %> | 변수나 메서드를 정의 |
스크립틀릿 (scriptlet) | <% %> | 모든 Java코드를 사용할 수 있음 |
표현식 (expression) | <%= %> | 변수나 메서드 리턴값 등의 결과값을 문자열 형태로 출력 |
[form.jsp 의 역할] : 사용자로 부터 데이터 입력을 받아온다.
데이터 입력을 받기 위해서는 form을 사용하고, form은 action을 이용하여 result.jsp 페이지로 전송한다.
<title>form.jsp</title>
</head>
<body>
<form action="result.jsp">
<p><input type="text" name="name" placeholder="이름" required autofocus></p>
<p><input type="number" name="age" min="0" max="100" placeholder="나이" required></p>
<p><input type="submit"></p>
</form>
</body>
</html>
[ result.jsp 의 역할 ] : form.jsp 가 보내온 데이터를 받아서 출력한다
받아온 데이터는 스크립틀릿 (<% %>) 을 이용하여
request.getParameter(" form 에서 사용한 name ") 을 통해 해당 데이터를 불러올 수 있다.
출력은 스크립틀릿 내부에서도 가능하지만,
표현식(<%= %>) 으로 출력하는 것이 일반적이다.
<title>result.jsp</title>
</head>
<body>
<%
String name = request.getParameter("name");
String age = request.getParameter("age");
String msg = "";
if(name != null) {
String adult = Integer.parseInt(age) >= 20 ? "성인" : "미성년자";
msg = String.format("%s님의 나이는 %s살이고, %s입니다", name, age, adult);
}
%>
<h3><%=msg %></h3>
<a href="form.jsp"><button>재입력</button></a>
</body>
</html>
사용자의 입력을 받아서 리스트에 추가하여 사용하기
1. form 을 이용하여 사용자의 입력을 받는다.
2. 현재 페이지에서 바로 받아서 리스트에 담는다.
3. 해당 리스트의 각각을 dto 라는 이름으로 객체를 담는다.
4. dto. 의 형태로 원하는값을 출력한다. ( 이때, 온점은 '~의' 라는 의미이다)
<body>
<h1>사용자의 입력값을 리스트에 추가하고 화면에 출력</h1>
<hr>
<!-- form 에 action 이 없으면, [현재주소]로 새로운 요청을 보낸다 -->
<form>
<p>
<select name="category" required>
<option value="">=== 카테고리 ===</option>
<option value="족발/보쌈">족발/보쌈</option>
<option value="찜/탕/찌개">찜/탕/찌개</option>
<option value="돈까스/회/일식">돈까스/회/일식</option>
<option value="피자">피자</option>
<option value="고기/구이">고기/구이</option>
<option value="야식">야식</option>
<option value="양식">양식</option>
<option value="치킨">치킨</option>
<option value="중식">중식</option>
</select>
</p>
<p><input type="text" name = "storeName" placeholder="식당이름" required></p>
<p><input type="text" name = "menuName" placeholder="메뉴이름" required></p>
<p><input type="number" name = "menuPrice" placeholder="주문금액" min="0" step="100" required></p>
<p><input type="submit"></p>
</form>
<%@ page import="java.util.ArrayList , food.FoodDTO" %>
<%! // 선언부 : 멤버필드 및 멤버 메서드를 정의
private ArrayList<FoodDTO> list = new ArrayList<>();
%>
<% // 스크립틀릿의 내부코드 == service() 함수 내부의 내용
// 지역 변수는 함수가 호출될 때마다 새로 만들어진다 -> 값이 유지되지 않는다
// 리스트를 멤버 필드로 생성해두면, 객체가 소멸하기 전까지(= 서버가 재시작하기 전까지) 값이 유지된다
// (= 선언부를 이용하자!)
// 4개의 파라미터를 전달받는다
String category = request.getParameter("category"); // <select name="category">
String storeName = request.getParameter("storeName"); // <input name="storeName">
String menuName = request.getParameter("menuName"); // <input name="menuName">
String menuPrice = request.getParameter("menuPrice"); // ★ 파라미터를 받을때에는 웬만하면 String 으로 받고, set(Integer.parseInt)
// 전달받은 파라미터를 변수에 저장한다
if(category != null) {
FoodDTO dto = new FoodDTO();
dto.setCategory(category);
dto.setStoreName(storeName);
dto.setMenuName(menuName);
dto.setMenuPrice(Integer.parseInt(menuPrice));
// 리스트에 추가하기
list.add(dto);
// 리스트 정렬하기
// list.sort((a, b) -> a.getCategory().compareTo(b.getCategory())); // 등록 후 카테고리 별로 정렬하고 화면에 출력
list.sort((a, b) -> a.getMenuPrice() - b.getMenuPrice()); // 등록 후 가격 별로 정렬하고 화면에 출력
}
%>
<table border="1" cellpadding="10" cellspacing="0">
<tr bgcolor="#dadada">
<th>카테고리</th>
<th>식당이름</th>
<th>메뉴이름</th>
<th>메뉴가격</th>
</tr>
<%for(FoodDTO dto : list) { %>
<tr>
<td><%=dto.getCategory() %></td>
<td><%=dto.getStoreName() %></td>
<td><%=dto.getMenuName() %></td>
<td><%=dto.getMenuPrice() %></td>
</tr>
<% } %>
</table>
</body>
</html>
내장객체를 알고나니 request, response에 대한 개념이 조금씩 잡히는 것 같다.
이것도 계속 하다보면 눈에 익겠지...
'JSP' 카테고리의 다른 글
[JSP] 게시판 (1) (0) | 2024.10.07 |
---|---|
[JSP] 회원 기능 (2) (0) | 2024.10.07 |
[JSP] 회원 기능 (1) (0) | 2024.10.05 |
[JSP] Login Session (1) | 2024.10.05 |
[JSP] JSP 실전 (1) | 2024.10.05 |