servlet jsp
taglibs와 DTO를 활용하여 jsp에서 servlet으로 데이터 넘기고 jsp로 받기
머리방울
2022. 7. 24. 20:25
오늘은 taglibs를 사용할 것이기 때문에 아래와 같이 복붙을 해준다.
1. jsp 파일을 만든다.
첫 줄에 한글깨짐방지 코드 넣기!!
<% request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8"); %>
<body> 부분부터 입력 시작!
<form action="order" method="post">
<div>
<h2>🍗🍗🍗치킨🍗🍗🍗</h2>
</div>
<div>
치킨 종류와 상관 없이 무조건 만원!<br>
</div>
<br>
<div>
<input type="radio" name="type" value="후라이드 치킨" checked>후라이드 치킨
<input type="radio" name="type" value="양념 치킨">양념 치킨
<input type="radio" name="type" value="간장 치킨">간장 치킨
</div>
<div>
<input type="radio" name="type" value="고추 바사삭">고추 바사삭
<input type="radio" name="type" value="뿌링클">뿌링클
<input type="radio" name="type" value="지코바 순살">지코바 순살
</div>
<br>
<div>
몇마리
<input type="number" name="cnt" value="1" min="1">
(value에 1을 넣은 이유는 기본값으로 뜨게 하기 위함, 숫자 변경 시 그 변경 내용이 value로 들어감)
</div>
<br>
<div>추가할게요(추가 시 1000원)</div>
<div>
<input type="checkbox" name="extra" value="반반 메뉴로 변경">반반 메뉴로 변경
<input type="checkbox" name="extra" value="생맥주 추가">생맥주 추가
<input type="checkbox" name="extra" value="콜라 추가">콜라 추가
</div>
<br>
<div>
요청사항
<textarea rows="5" cols="50" name="ask"></textarea>
</div>
<br>
<div>
<input type="submit" value="주문하러 가기">
</div>
2. orderDTO Class 만들기
DTO: Data Transfer Object 데이터를 전달해주는 객체
servlet에서 jsp로 데이터를 넘길 때 setAttribute("자료",자료) 이런식으로
하나하나 넘겼어야 했다. 실무에서는 방대한 자료를 하나씩 타이핑하기 힘들기에
Class를 만들고, servlet에서 객체 생성하여 보다 수월하게 데이터 보내고자 한다.
Java Resources에서 마우스오른쪽 new -> class를 만들어 파일 이름을 DTO로 만들기
1) 변수 설정
private String type;
private int cnt;
private String[] extra;
(extra 옵션은여러가지 선택할 수 있기에 배열로 만든다)
private String ask;
2) getter, setter, 생성자 만들기
3. servlet 화면으로 이동
1) form action과 이름 맞춰주기
@WebServlet("/order")
2) 한글깨짐 방지 코드넣기
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
3) DTO 객체 생성자 만들기
OrderDTO order = new OrderDTO();
4) jsp 데이터 받기
String[] extra = request.getParameterValues("extra");
int cnt= Integer.parseInt(request.getParameter("cnt"));
order.setType(request.getParameter("type"));
order.setExtra(extra);
order.setCnt(cnt);
order.setAsk(request.getParameter("ask"));
5) jsp로 데이터 보내기
order객체를 orderInfo라는 이름으로 보내겠다!
request.setAttribute("orderInfo", order);
6) jsp 파일 지정
RequestDispatcher dispatcher = request.getRequestDispatcher("delivery.jsp");
dispatcher.forward(request, response);
4. delivery.jsp로 이동
<form action="delivery" method="post">
1) order.jsp에서 받은 자료
<input type="hidden" value="${orderInfo.type }" name="type">
<input type="hidden" value="${orderInfo.cnt }" name="cnt">
<input type="hidden" value="${orderInfo.ask }" name="ask">
2) taglib을 이용하여 데이터 보여주기
extra는 우리가 배열처리를 하였다.
이를 문자열화 하려고 하니 몇개가 들어올 지 알 수 가 없으니
자바에서 사용하던 forEach문을 활용하여 데이터를 가져오고자 한다.
자바로 예를 들면
int arr[]={1,2,3,5,8,9}; - > forEach( int e : arr)
taglib을 활용하면
<c:forEach var="e" items="arr">
i) 상단에 taglib 코드를 추가한다
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
ii) var= "부를 이름" items =" 어느 자료를 사용할 것인지"
<c:forEach var="extra" items="${orderInfo.extra}">
<input type="hidden" value="${extra }" name="extra">
</c:forEach>
<div>
<h2>배달 정보</h2>
</div>
<div>
주문자
<input type="text" name="name">
</div>
<div>
연락처
<input type="text" placeholder="010-0000-0000 형태로 입력" name="tel">
</div>
<div>
배달 주소
<input type="text" name="addr">
</div>
<div>
<input type="submit" value="주문">
</div>
5. DeliveryDTO Class 만들기
1)변수 설정
private String name;
private String tel;
private String addr;
2) getter setter 생성자 만들기
6. servlet 만들기
1) form action과 이름 맞춰주기
@WebServlet("/delivery")
2)한글 깨짐방지 코드
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
3) order 객체 넣기
OrderDTO order = new OrderDTO();
4) 데이터 받아오기
String[] extra = request.getParameterValues("extra");
int cnt= Integer.parseInt(request.getParameter("cnt"));
order.setType(request.getParameter("type"));
order.setExtra(extra);
order.setCnt(cnt);
order.setAsk(request.getParameter("ask"));
5) 데이터 보내기
request.setAttribute("orderInfo", order);
6) delivery 객체 생성
DeliveryDTO delivery = new DeliveryDTO();
7) 데이터 받아오기
delivery.setName(request.getParameter("name"));
delivery.setTel(request.getParameter("tel"));
delivery.setAddr(request.getParameter("addr"));
8)데이터 보내기
request.setAttribute("deliveryInfo", delivery);
9) jsp로 보낼 파일 이름 설정
RequestDispatcher dispatcher = request.getRequestDispatcher("order_info.jsp");
dispatcher.forward(request, response);
7. jsp로 데이터 받기
<div>
<h2>주문서</h2>
</div>
<div>주문정보<br>
${orderInfo.type } <br>
${orderInfo.cnt }마리 <br>
추가사항
<c:forEach var="extra" items="${orderInfo.extra }">
${extra }
</c:forEach>
<br>
요청사항 ${orderInfo.ask }<br>
</div>
<br>
<div>배달배달<br>
주문자 ${deliveryInfo.name }<br>
연락처 ${deliveryInfo.tel }<br>
배달주소 ${deliveryInfo.addr }
</div>