GitHub

https://github.com/Backcoder-June

BackCoder 기록 그리고 숙달

Back to the Servlet

[Servlet] HttpServlet 메소드, Request 와 Response

Backcoder 2022. 8. 5. 21:55

[ HttpServlet 메소드 ]

[ doGet( ) / doPost( ) ]
- 실질적인 로직 처리


- 매개변수 내장
doGet( HttpServletRequest req, HttpServletResponse resp )
=> HttpServletRequest / HttpServletResponse 객체를 매개변수로 받아서
실질적인 요청용 / 응답용 메소드를 사용

- doGet은 get방식으로 들어온 요청만,
doPost는 post방식 요청만 처리할 수 있다.


[ service( ) ]
- doGet/doPost 통합으로 사용할 수 있는건데
구분해서 사용해야 할 경우가 많기 때문에 get post 많이 사용

- get/post 도 섞어두기 가능
=> doPost(HttpServletRequest req, HttpServletResponse res)
{ doGet(req, resp); }
: 두 방식 다 받을 수 있다.


<< HttpServletReqeust 메소드 >>

[ request. setCharacterEncoding("utf-8"); ]
: 요청 읽어올 때 언어타입 정하기


=> doPost 방식일 때 필수로 세팅
( doGet - URL 로 읽어오는거라 필요 없음
/ doPost - URL과 독립적 )


[* request. getParameter( ) ]
: 클라이언트에서 사용자 입력값 받아오기

- 웹브라우저에서 사용자가 input 태그에 text 를 입력하거나,
selection태그에서 선택을 하는식으로 입력을 하면
=> 그 입력값은 각 태그의 value 값에 담긴다.

=> 사용자는 value 값을 서버에 보내며 어떤 "요청" 을 한다.

- 웹서버는 이 value 값과, 해당 태그의 name(변수명)이 담긴 "요청"을 받아와서
처리하고 응답해줘야 한다.

- 먼저 요청을 "받아와야" 하고, 이 역할을 하는게 HttpServletRequset 객체의
.getParameter( ) 메소드다.

[ 웹클라이언트 단 ]
<input name="
userAge">

입력란에 유저가 나이를(value값) 적어 서버에 보내면
=> 서버는
태그의 name 속성을 연결고리
=> 해당 태그의
value을 받아올 수 있다.

[ 서버 단 ]
int
age = request.getParameter("userAge");
: 사용자 요청에서 name 이 userAge인 태그의 value 값을 가져와라

이렇게 하면 클라이언트 단에서 유저의 입력값을
서버단의 변수 age 에 가져올 수 있는 것이다.


[ request.getParameterValues( ) ]
: 사용자 입력값 복수 개일 때 받아오기

<input type checkbox name="c">
- checkbox 같이 입력값(value)이 복수 개로 나올 때 사용
=> 배열로 리턴
String[ ] b = req.getParameterValues("c")


[ 파라미터(value값) URL에 직접 입력하기 ]
- 사용자 입력 => name값 value값 => URL에 파라미터로 들어감

http://localhost:8080/ login? hobby=book & age=20 & ...


: name=hobby인 태그에 value 값으로 book
name=age 인 태그에 value 값으로 20
을 담아서 login 이라는 url 주소에 보낸다.

이 구조를 이용해 직접 url로 value값을 줘서 보낼 수 있는 것.

< a hrf = " url " > 링크 걸 때,
parameter ( name / value값 )을 넣은 주소로 링크시킬 수 있다.

 


[ request.setAttribute( "key값", value ) ]

- 공유 데이터값 저장 

 

[ request.getAttribute( "key값" ) ]

- 공유 데이터값 가져오기 

 

[ request.getRequestDispatcher ( " url " ) ]
- Dispatcher 보내기 

[ request.getSession( ) ]

- Session 객체 생성하기 

 

 

 

[ request 클라이언트 로그 정보 ] 
- url : http://ip:port/컨텍스트: 파일명 
- uri : /컨텍스트: 파일명 

나한테 요청한 클라이언트 IP 주소 request.getRemoteAddr( );
나한테 요청한 파일명  request.getRequestURI( );
==

${pageContext.request.remoteAddr} 
${pageContext.request.requestURI} 

 

 




<< HttpServletResponse 메소드 >>

[ response.setContentType( ) ]
: 텍스트/이미지등의 응답 타입 정하기


response.setContentType("text/html; charset = UTF-8");

- 필수로 세팅
=> text utf-8 로 통일 ( 안해주면 한글 깨져서 나올 수 있다 )

response.setContentType("img/jpg");
- 이미지 타입 세팅


[ response.getWriter( ) ]
: 응답페이지에 글 쓰기

- 먼저, HTML 페이지에서는 사용자가 입력값과 함께 "요청"을 하면서


< form action=" url " >


그 입력값을 담아서 정해둔 url 로 날려보내버리는 action을 취한다.

- 그럼 그 url에서 기다리다가
해당 요청을 받아 내는게 바로 @WebServlet 의 역할이다. ( 이게 사실상 @getMapping )
@WebServlet( "/url" ) <= 여기서 맵핑해둔 url 이 바로 그 기다리고 있는 주소다.


- 서블릿은 이 빈 방같은 url에서 혼자 기다리고 있다가
action 으로 날라온 요청이 들어오면
요청과 함께 들어온 name / value 등의 정보들을 가지고 (requestParameter)
"로직" 을 처리한다.


이렇게 "로직"을 처리할 수 있는게 바로 서블릿의 역할

처리했으면 "응답"을 줘야한다.


이 응답은 기본적으로 서블릿이 기다리고 있던 그 url,
그 빈방에서 이루어진다.

이 빈방에 text 로 글씨를 써서 응답을 할 수 있게 해주는게 바로
getWriter( ) 메소드다

PrintWriter writer = response.getWriter( );
writer.println(" ");

- PrintWriter 객체에 담아서 사용한다.

(  웹에서는 줄 구분이 되지 않는다. "<br>" 태그를 사용 )

-객체 생성하면서 바로 사용
response.getWriter( ).print( );