[JSP] request & response

2024. 10. 5. 15:58JSP

서로 다른 페이지 간에 데이터의 이동을 시켜볼 것이다.

 


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