Servlet, JSP

Servlet

chojdsj 2023. 7. 3. 00:00
728x90

 

 

Servlet 이란?

 

- 웹 서비스를 위한 자바 클래스( 자바를 이용하여 웹을 만들기 위해 필요한 기술)

- 웹 프로그래밍에서 클라이언트의 요청(Request)을 처리하고, 그 결과를 다시 클라이언트에게
응답(Response)하는 Servlet 클래스의 구현 규칙을 지킨 자바 프로그래밍 기술

 

 

 

 

Servlet 특징

 

 

- 클라이언트의 요청에 대해 동적으로 작동하는 웹 애플리케이션 컴포넌트
-> 클라이언트 요청에 대한 서버 응답 시 미리 만들어둔 화면(정적)이 아닌
요청을 받을때 마다 알맞은 화면을 만들어(동적)응답함.

- HTML을 사용하여 요청에 응답

- java thread를 이용하여 동작.(요청마다 별도 thread가 생성됨)

- servlet에 작성한 html 코드 변경 시 재컴파일 해야 하는 단점이 있음

- 서블릿 코드를 작성할 클래스는 반드시 javax.servlet.http.HttpServlet 클래스를 상속받아 메소드를 구현해야 함

 

 

 

 

Servlet Container

 

- 서버에 만들어진 서블릿이 스스로 작동하는 것이 아니라, 서블릿을 관리해주는 것이 필요한데,
이러한 역할을 하는 것이 바로 서블릿 컨테이너라고 한다.

- 배포를 위한 포트연결, 웹 서버 통신을 위한 소켓, 입/출력 스트림을 생성하는 역할을 함.

- 서블릿 : 어떤 역할을 수행하는 정의서
  서블릿 컨테이너 : 정의된 서블릿을 보고 수행

- 클라이언트이 요청을 받을 때 마다 새로운 자바 스레드를 만들어 요청을 처리하고 응답을 해줌

 

 

 

 

 

Server Container의 역할

 

 

1. 웹 서버와의 통신 지원
-> 서블릿과 웹 서버가 손쉽게 통신할 수 있게 함

2. 서블릿 생명주기 관리
-> 서블릿 클래스를 로딩하여 인스턴스화 하고, 초기화 메소드를 호출하고, 요청이 들어오면
적절한 서블릿 메소드 호출. 서블릿이 생명을 다 한 순간에는 적절하게 가비지 컬렉션을 진행하여 편의 제공

3. 멀티쓰레드 지원 및 관리
-> 서블릿 컨테이너는 요청이 올 때마다 새로운 자바 스레드를 생성하는데
http 서비스 메소드를 실행하고 나면 스레드는 자동으로 사라짐 

4. 선언적인 보안관리
-> 일반적으로 보안관리는 xml배포 서술자(DD(web.xml)) 에다가 기록하므로 보안에
관련된 내용을 서블릿 또는 자바 클래스에 구현하지 않아도 됨

 

 

 

 

메소드별 오버라이딩

 


- 웹 클라이언트의 요청 방식이 GET방식으로 요청해오면 doGet( ) 메소드로 응답,
  웹 클라이언트의 요청 방식이 POST 방식으로 요청해오면 doPost( ) 메소드로 응답.


-> 반드시 doGet( ) 메소드와 doPost( ) 메소드는 Overriding을 해주어야 함.




Get 방식과 Post 방식의 비교/차이


1) Get 방식 : (데이터를) 가져오다, 얻어오다

- URL에 변수(데이터)를 포함시켜 요청
-> 보안 유지를 안하기 때문에 로그인 같은 경우는 get방식으로 하면 부적합

- 전송하는 길이 제한( 보내는 길이가 너무 길면 초과데이터는 절단됨 )

- 데이터를 HTTP Header에 포함하여 전송

- 캐싱 가능( ex) 즐겨찾기, 북마크)
-> 한번 접근 후, 또 요청할 시 빠르게 접근하기 위해 데이터를 저장시켜 놓는것




2) Post 방식 : (데이터를) 붙이다

- 데이터를 서버로 제출하여 추가 또는 수정하기 위해 데이터를 전송하는 방식

- URL에 변수를 노출하지 않고 요청 데이터를 HTTP Body에 포함하여 전송

- 헤더필드 중 Body의 데이터를 설명하는 Content-Type이라는 헤더필드가 들어가고
어떤 데이터 타입인지 명시해주어야 함

- HTTP Body를 통해서 데이터를 전달하는데 이때, 문자 인코딩은 서버의 기본 문자 인코딩을 따름
-> 문자 인코딩 처리 필요



- 전송하는 길이 제한 없음
-> Body에 데이터가 들어가기 때문에 길이에 제한이 없음

- 캐싱 할 수 없음
-> URL에 데이터가 노출되지 않으므로 즐겨찾기나 캐싱 불가능
하지만 쿼리스트링(문자열)데이터, 라디오 버튼, 텍스트 박스와 같은 객체들의 값도 전송 가능

 

Parameter

 

- 요청 시 전달된 input 태그의 값 

 

- getParameter( )는 전달된 input 태그의 name이 하나일 때만 가능

 

- 같은 name이 여러개면 String[ ]로 반환하는 getParameterValues( )사용

 

 

form

 

- form태그 : 내부에 작성된 input태그의 값을 서버 또는 페이지로 제출(전달)하는 역할

* 이 때, 어떤 input태그에 작성된 값이 제출 된것인지 알 수 있도록 input태그에 name 속성을 반드시 작성!!

 

- action : input 태그 값을 전달할 서버 또는 페이지 주소를 작성하는 속성 

 

- method : 데이터 전달 방식 지정하는 속성(get / post)

 

- http://localhost:8080/ServletProject1/ 

 ( http://아이피:포트번호) : 통신규약 서버 컴퓨터 위치 지정 

 ( /ServletProject1/) : 요청하고자 하는 내용을 나타내는 주소 

 

 

-> button을 누르면 example1.do라는 주소로 갈수있게 해준다.

 

-> button을 누르고 제출하면 이 요청주소로 이동하고 get방식이기 때문에 주소창에 내가 입력한 값이 나온다.(보안취약)

 

 

 

 

@WebServlet("요청주소") 어노테이션

 

- 해당 클래스를 Servlet 클래스로 등록(<servlet>)하고 어떤 요청 주소를 처리할지 지정(<servlet-mapping>)

 

- form태그와 마찬가지로 저 글을 클릭하면 EL/scope라는 요청 주소로 보냄

 

 

-> 어노테이션을 사용해서 요청주소를 Servlet 처리해준다.

 

 

 

Lombok 라이브러리

 

- VO(Value Object) 또는 DTO(Data Transfer Object)에 작성되는 공통코드(getter / setter / 생성자)를 자동 추가해주는 라이브러리

-> 직접 작성하지 않아도 어노테이션만 사용해주면 작성한 효과와 동일 

 

 

 

 

 

'Servlet, JSP' 카테고리의 다른 글

JSON  (0) 2023.07.15
AJAX  (0) 2023.07.15
JSTL  (0) 2023.07.09
EL  (0) 2023.07.09
JSP  (0) 2023.07.08