Java 기반 클라우드 융합 개발자 과정 - KH 정보교육원/7월

22.07.21 - [ WAS ] doPost(), doGet(), forward(), setAttribute()

giggs 2022. 7. 29. 11:08

 

-- Index --

 

doPost() / doGet() java / html 분리 작업하기(이론) java / html 분리 작업하기(실습)
요청방식에 맞게 처리 servlet 과 jsp 로 분리해서 작업 forward // getAttribute("key")

 

 

 


 

 

 

1.doPost() / doGet()

 

  • 메세지 요청 방식은 <form  method = " " >
  • < form >태그의 method 속성 값 ( get 또는 post )

 

 

 

 


 

 

1-1 doPost ()

  • 요청 방식에 상관없이 처리해주던 service() 메서드와 달리
  • 요청 방식이 post 일 때만 처리해주는 메서드 ( get방식 요청은 처리 안 해준다 )

 

 

 

 

 


 

 

  • get방식으로 요청시 나오는 에러 메시지 확인 ( get방식 요청 안해주는 것 확인 )

 

 

 


 

 

 

 

1-2 doGet()

  • 요청 방식이 get 일때만 처리해주는 메서드 ( post방식 요청은 처리 안 해준다 )

 

 

 

 

 

 

 

doPost와 doGet 메서드 안에서는

service() 메서드와 같이 java코드들 사용하면 된다.

앞으로는 service() 말고

doPost() 와 doGet()을 이용해서

요청 방식에 맞게 처리되도록 하겠다.

 

 

 

 


 

 

 

 

 

2. java 쪽 front 쪽 분리해서 작업하기 - 이론

 

  • java코드는 백엔드 개발자가  - html 쪽은 프런트 개발자가 작업하는데
  • 하나의 파일 안에 모든 것이 같이 있다.
  • 협업할 때도 안 좋고 분리하는 작업이 필요하다 느꼈다.
  • 분리하는 작업 해보자

 

 

 

 

 

 

 

# java 쪽 담당하는 servlet이 클라이언트가 입력한 정보를 얻어낸다.

 

 

 

 

# fornt 쪽 담당하는 jsp가 일을 하려고 봤더니 java 쪽에서 얻어온 데이터가 필요하다.

  • 데이터가 servlet 쪽에만 있으니까 문제가 된다.
  • 데이터를 넘기는 작업이 필요하다. ( 다른 파일로 분리하다 보니 )

 

 

 

# servlet 쪽 데이터를 어떻게 얻어오지?

  1. Servlet 안에 존재하는 어떤 객체를 이용 ( req객체 )
  2. 그 객체에다가 data를 쭉 담아놓고 객체를 jsp에게 전달
  3. jsp에서는 받은 객체 안에 data를 얻어서 작업 진행

 

 

 

 

 

 

 

 

넘겨주는 객체가 무엇인가? 누구인가? --> request 객체!

넘겨주는 작업을 forwarding 이라고 한다.

 

 

 

 


 

 

 

2-1 흐름 체크 ( MVC 패턴의 기반 )

 

 

 

 

클라이언트는 일단 servlet으로 요청을 보낸다 (java쪽)

servlet request 객체에 입력받은 data담아서 jsp쪽으로 전달

jsp는 전달받은 데이터로 화면을 만들어서 클라이언트에게 보여주기.

 

 

Model -> data를 모델이라 부르게 될 것이다.

View -> jsp

Controller -> servlet ( class )

 

얘네들을 가지고 정형화된 패턴에 맞춰서 작업을 하는 게MVC패턴

 

 

 

 

 


 

 

 

 

3. java  front 쪽 분리해서 작업하기 - 실습

 

 

 

 

# 자바 쪽 ( Servlet 담당 ) 

 

3-1. 클라이언트 입력 data 얻기

  • 클라이언트(브라우저)에게 입력받은 data(문자열 덩어리)를 -
  • java에서 사용할 수 있게 값 얻어와서 변수에 담아주기 - .getParameter

 


 

3-2. java 쪽 작업이 끝나면 req객체에 data 담기.

  • req.setAttribute("key" , value);

 

 


 

3-3. req 객체를 화면 쪽 담당하는 애에게  떠넘기기

  • forward
  • RequestDispatcher 
  • req.getRequestDispatcher("다음타자").forward(req, resp);

 

 

 

 

 


 

 

 

# 화면쪽 ( jsp 담당 

 

 

3-4. 넘겨받은 객체에서 data 꺼내기

  • forwarding 작업으로 넘어온 req객체 - key값을 이용해서 data  꺼내기
  • request.getAttribute(" key ");

 

 

 


 

#Checkpoint

  • 화면 쪽에서 처음 요청하는 데이터는 값을 얻을 때 - getParameter() 로 얻기
  • 서버 쪽에서 이동하면서 객체에 담아준 데이터 값을 얻을 때 - getAttribute()로 얻기

 

 

 

#Chekcpoint

  • getAttribure의 리턴 타입은 object 타입이다.
  • 오브젝트 타입 -> 스트링 타입으로 변환 필요

 

 

 

#Chekcpoint

  • 형 변환 - 상속 여부로 판단
  • 상속관계에서는 ( ) 명시적 형 변환 사용 가능
  • 형제 레벨이나 관련 없는 곳에서는 parse 사용

 

 

 

 


 

 

 

지금은 간단하게 해서 그렇지만

 

java코드가 길어지거나

 ( jsp 파일 위쪽에 <% 메서드,임포트,클래스등 많아짐 %> )

 

style 적용할 것이 많아지거나 하면 

( =서블릿에  getWrite().print(“<style> ~~<많아짐 )

 

구분이 안되고 복잡해진다.

 

그래서 서블릿(java) 화면(jsp) 나눠서 만드는것!

 

자바작업쉬운 servlet과 + 화면작업쉬운 jsp

장점만 뽑아서 작업을 편리하고 협업도 가능하게 만들고 싶다

forwarding 해서 사용하는 것!

 

 

 

 


 

 

 

 

@My Question 

 

 

 

 

미애도 철수한테 일시킬 수 있다.

 

url에 따라서 각각 담당이 있는 것은 맞다.

근데! 요청이 왔는데 담당자 혼자 다해야 되는 것은 없다.

서블릿 서블릿 jsp jsp 서블릿 마음대로 떠넘기기 가능

forwarding 은 여러 개의 서블릿과 jsp 사이를 자유롭게 왔다 갔다 가능

 

서버내에서 request를 위임할 때 사용하는 것이 forwarding !