[20230202_5교시]
서블릿 생명주기
- 첫 번째 요청일 경우, 서블릿 객체를 생성하고 init() 메소드를 호출한다.
- 이후 요청에 대해서는 서블릿 객체 생성, init()메소드는 호출하지 않는다. 딱 한번만 실행된다.
- 다음에 service() 메소드가 클라이언트 요청 방식에 따라 doGet() 또는 doPost() 메소드를 호출한다.
- 최종적으로 서블릿이 서비스되지 않았을 때 destroy() 메소드를 호출한다.
- destroy() 메소드는 보통 서버가 종료되었을 때, 서블릿의 내용이 변경되어 재 컴파일 될 때 호출된다.
서블릿 생명주기 확인하는 실습 life.do
저장 후 run -> 브라우저에서 새로고침
톰캣이 구동될 때 서블렛이 자동적으로 생성되는 게 아니라 요청이 있을 때 생성이 된다.
super.service(request, response); 를 주석처리하면 doGet이나 doPost는 호출되지 않고 하얀 화면이 뜬다.
상위에 있는 서비스를 호출해야만 사용자의 요청에 따라 요청이 Get인지, Post인지 확인 후 doGet() 또는 doPost()메서드를 실행한다.
overrrie하더라도 이건 지우면 안된다.
+ (참고사항) 서버가 종료되거나 서블릿이 수정이 돼서 다시 컴파일 해야 하는 경우에만 서블릿이 소멸되는데 그때 destroy 메서드가 호출된다.
[20230202_6교시]
get,post구분해서 실습
HTTP 요청 처리
- GET방식은 URL에 데이터를 포함시켜 요청하는 방법(캐싱 o, url에 정보 노출) 헤더에 포함해서 전송
- POST방식은 데이터를 노출하지 않고 요청하는 방법(캐싱 x, url에 정보 노출x) 바디에 포함해서 전송
form 태그의 action에 그냥 method.do라고 적으면 현재 파일이 있는 위치에서(http url)에서 경로까지는 고정이 되고 페이지에 해당하는 url구문만 바뀐다.
01_Servlet이라는 context path에 method.do를 주고 싶으면 아래와 같이 지정해줘야 한다.
지금 상태에서는 404오류가 발생한다. 요청을 처리해줄 servlet을 생성하지 않았기 때문!~
요청을 처리해줄 서블릿을 생성해주자.
서버 구동 클릭 후 브라우저 열고 새로고침 후 아래의 화면과 같은지 확인
개발자도구에서 보면 영어는 그냥 보내는데 한글이나 공백은 인코딩되서 퍼센트 인코딩된 상태로 url에 나타나게 된다.
request.getParameter("userName")은 사용자가 보내주는 정보를 받아오는 메소드에 매개값으로 키값을 준 것이다.
자바에서 문자데이터를 받을 때는 다 String으로 받아온다. 서버로 보내는 내용도 다 문자 데이터로 넘어간다.
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 |