Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

게으른 완벽주의자의 개발자 도전기

taglibs와 DTO를 활용하여 jsp에서 servlet으로 데이터 넘기고 jsp로 받기 본문

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>