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>