Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
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
Tags
more
Archives
Today
Total
관리 메뉴

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

servlet 파일 하나로 jsp 데이터 주고 받기(MVC) 본문

servlet jsp

servlet 파일 하나로 jsp 데이터 주고 받기(MVC)

머리방울 2022. 7. 24. 21:04

jsp에서 servlet으로 파일을 보낼 때는
jsp -> servlet -> jsp -> servlet ->jsp 이런식으로 파일을 여러개 만들었어야 했다.

servlet에 if문을 활용하여 파일 하나로 지정할 수 있도록 만들고자 한다.

앞에 사용했던 치킨 주문 데이터를 servlet 하나로 만들어 보자

1. servlet에 doProcess라는 새로운 클래스 만들기

1) *.do
자바에서 *는 전부(all)를 의미한다.
action= "asdf.do"
action= "bbb.do"

action= "aaaaa.do"
action= "bbbee.do"
즉, 앞에 어떤 단어가 나오든 뒤에 .do가 있다면 실행시키겠다는 의미이다.
(.do는 네이버가 쓰기에 대세를 따르는거라고 쌤이 그러셨음)
@WebServlet( " *.do " )

 

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doProcess(request, response);
}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doProcess(request, response);
}

 

doProcess라고  다시 메소드를 만든 이유는 doGet(), doPost()을 부르면 안에 doProcess가 실행되는데

안에 같은 내용이 실행되도록 할 때 둘 다 같은 내용을 넣으면 번거로우니

새로운 메소드를 만들어서 거기서 수정이나 내용을 추가할 수 있도록 하기 위함이다.

 

protected void doProcess(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {


1) 한글 인코딩
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");

2) form action = " " 값 가져오기

(이것도 복붙하여 사용하면 편함!)
String requestURI = request.getRequestURI();
String contextPath = request.getContextPath();
String command = requestURI.substring(contextPath.length());


3) page 변수 설정하여 jsp 이동 시 조건에 맞는 jsp로 이동하도록 함
String page ="";

4) if문 사용하기
if(command.equals("/order.do")) {

i) order객체 생성
OrderDTO order= new OrderDTO();


ii) 자료 받기
order.setType(request.getParameter("type"));
int cnt= Integer.parseInt(request.getParameter("cnt"));
order.setCnt(cnt);
String[] extra = request.getParameterValues("extra");
order.setExtra(extra);
order.setAsk(request.getParameter("ask"));


iii)자료 보내기
request.setAttribute("orderInfo", order);

iv) 해당 페이지 이동
page= "delivery.jsp";
}

5) else If로 조건 추가
else if(command.equals("/delivery.do")) {

i) 전에 받았던 데이터 추가하기

OrderDTO order= new OrderDTO();


order.setType(request.getParameter("type"));
int cnt= Integer.parseInt(request.getParameter("cnt"));
order.setCnt(cnt);
String[] extra = request.getParameterValues("extra");
order.setExtra(extra);
order.setAsk(request.getParameter("ask"));


request.setAttribute("orderInfo", order);


ii) delivery 객체 생성
deliveryDTO delivery = new deliveryDTO();


iii) 데이터 받기
delivery.setName(request.getParameter("name"));
delivery.setTel(request.getParameter("tel"));
delivery.setAddr(request.getParameter("addr"));


iv) 데이터 보내기
request.setAttribute("deliveryInfo", delivery);


v) 페이지 이동
page= "order_info.jsp";

}


RequestDispatcher dispatcher = request.getRequestDispatcher(page);
dispatcher.forward(request, response);
}