본문 바로가기
Back/web

서블릿생명주기,GET,POST방식(enc)20230202_5~8교시

by 자바꿈나무00 2023. 2. 2.

[20230202_5교시]

저장 후 run-> 브라우저에서 F5, F12눌러서 확인
확인하기

 서블릿 생명주기

  • 첫 번째 요청일 경우, 서블릿 객체를 생성하고 init() 메소드를 호출한다.
    • 이후 요청에 대해서는 서블릿 객체 생성, init()메소드는 호출하지 않는다. 딱 한번만 실행된다.
  • 다음에 service() 메소드가 클라이언트 요청 방식에 따라 doGet() 또는 doPost() 메소드를 호출한다.
  • 최종적으로 서블릿이 서비스되지 않았을 때 destroy() 메소드를 호출한다.
    • destroy() 메소드는 보통 서버가 종료되었을 때, 서블릿의 내용이 변경되어 재 컴파일 될 때 호출된다.

 

서블릿 생명주기 확인하는 실습 life.do

 

생성자 빼고 다른 것들에는 오버라이딩을 구분하기 위해  @Override어노테이션을 추가하는 게 좋다.

저장 후 run -> 브라우저에서 새로고침

톰캣이 구동될 때 서블렛이 자동적으로 생성되는 게 아니라 요청이 있을 때 생성이 된다.

 

브라우저에서  Life.do의 View Details를 두번 클릭하면 콘솔에 이렇게 찍힌다.
이 부분을 주석처리하면 콘솔에 아까와 다르게 찍힌다.

super.service(request, response); 를 주석처리하면 doGet이나 doPost는 호출되지  않고 하얀 화면이 뜬다.

상위에 있는 서비스를 호출해야만 사용자의 요청에 따라 요청이 Get인지, Post인지 확인 후 doGet() 또는 doPost()메서드를 실행한다.

overrrie하더라도 이건 지우면 안된다.

 

+ (참고사항) 서버가 종료되거나 서블릿이 수정이 돼서 다시 컴파일 해야 하는 경우에만 서블릿이 소멸되는데 그때 destroy 메서드가 호출된다. 


[20230202_6교시]

get,post구분해서 실습

HTTP 요청 처리

  1. GET방식은 URL에 데이터를 포함시켜 요청하는 방법(캐싱 o, url에 정보 노출) 헤더에 포함해서 전송
  2. POST방식은 데이터를 노출하지 않고 요청하는 방법(캐싱 x, url에 정보 노출x) 바디에 포함해서 전송

form 태그의 action에 그냥 method.do라고 적으면 현재 파일이 있는 위치에서(http url)에서 경로까지는 고정이 되고 페이지에 해당하는 url구문만 바뀐다.

01_Servlet이라는 context path에 method.do를 주고 싶으면 아래와 같이 지정해줘야 한다.

지금 상태에서는 404오류가 발생한다. 요청을 처리해줄 servlet을 생성하지 않았기 때문!~

요청을 처리해줄 서블릿을 생성해주자.

서블렛 생성 후 필요없는 주석제거, 어노테이션 추가한 상태

서버 구동 클릭 후 브라우저 열고 새로고침 후 아래의 화면과 같은지 확인

 

 

제출된 내용을 url에서도 확인이 가능한 상태이다.

개발자도구에서 보면 영어는 그냥 보내는데 한글이나 공백은 인코딩되서 퍼센트 인코딩된 상태로 url에 나타나게 된다.

request.getParameter("userName")은 사용자가 보내주는 정보를 받아오는 메소드에 매개값으로 키값을 준 것이다.

자바에서  문자데이터를 받을 때는 다 String으로 받아온다. 서버로 보내는 내용도 다 문자 데이터로 넘어간다.

alt + shift +L눌러서 지역변수 받아오기
출력해보고 제대로 정보를 받아오는지 확인하기

server구동시키고 브라우저 열고 새로고침 후 정보 넣고 전송버튼 클릭했을 때 사용자가 입력한 정보가 이클립스의 콘솔에 찍히는지 확인하기. 

가린 것은 이름값

이것은 서버에 사용자가 보내는 정보를 받아온 것이다.

사용자가 보내는 데이터들은 request객체 안에서 key와 value형태로 담겨있다.

getParameter()를 가지고 클라이언트에서 보내는 사용자의 name속성을 가지고 value값을 읽어올 수 있다.

이런 식으로 아래와 같이 다른 값들도 가져오도록 코드를 작성하면 아래와 같다.

(음식 여러 개 선택하기)여러 개의 값을 받아오기 위해 위의 코드를 이렇게도 바꿔서 처리할 수 있다.

 

  • 정리하면 사용자가 보낸 데이터들은 request 객체 안에 키(name 속성의 값), 값(value 속성의 값) 형태로 담겨있다.
  • request.getParameter("name 속성의 값") : 해당 name 속성의 값을 가지는 요소의 value값을 문자열로 읽어온다.
  • 체크박스처럼 하나의 name속성에 여러 값이 존재하는 경우 getParameterValues("name 속성의 값") 메소드를 사용한다.
  • 해당 name 속성을 가지는 요소들의 value 값들을 문자열의 배열로 읽어온다. 

[7교시(8교시 영상x)]

응답 화면 작성하기 실습

이름값 가림

개인 정보 입력 후 입력값이 잘 출력되는지 확인하기

음식 관련 출력 부분 코드 변경하면 입력 값들을 출력할 때 음식 여러 개를 선택할 수 있다.

GET 방식 ->POST 방식으로 변경시 출력되는 한글이 깨지고 데이터가 url에 포함되지 않는 것을 확인해보면 된다.

개발자도구에서 확인하면 아래와 같이 From Data(body)라고 하는 곳에 정보를 담아서 보내기 때문에 url에 제출 정보가 노출되지 않는다.

한글이 깨지는 현상은 표시한 부분의 인코딩을 처리하는 코드를 넣어주면 해결된다.

POST 방식으로 넘겨받는 데이터가 영어  또는 숫자가 아닌 경우에는 request.setCharacterEncoding("UTF-8");를 추가해서 파라미터 값을 가져오기 전에 인코딩을 설정해야 한다.

'Back > web' 카테고리의 다른 글

2023.02.09_1~8교시  (0) 2023.02.09
2023.02.07_EL,  (0) 2023.02.07
JSP_20230203_1~4교시  (0) 2023.02.05
웹 프로젝트 생성  (0) 2023.02.02
웹 통신 개요  (0) 2023.01.31