back-end/Servlet + jsp

[수업-Servlet] 01. Servlet 개요

HAyooni 2022. 8. 22. 18:26

 

Servlet

: 웹에서 동적인 페이지를 만들기 위해 java로 구현한 프로그램

사용자의 동작에 따라 변화하는 화면을 구동하기 위해서는 동적 요소 처리가 필요하다. 이러한 동적 요소를 처리하기 위해 servlet이나 JSP등을 사용할 수 있다.

 

 

1. Servlet의 규약

 

▶ 모든 서블릿은 javax.servlet.Servlet 인터페이스를 상속받아 구현

▶ 서블릿 구현 시 Servlet인터페이스와 ServletConfig인터페이스를 javax.servlet.GenericServlet에 구현

▶ HTTP 프로토콜을 사용하는 서블릿은 javax.servlet.http.HttpServlet클래스로 GenericServlet을 상속한 클래스

▶ 서블릿에 대한 예외처리를 하기 위해서는 javax.servlet.ServletException을 상속 받아야 한다.

 

 

 

2. servlet 라이프 사이클

 

① 첫 번째 요청일 경우, 객체를 만들면서 init()메소드 실행

② 작업이 실행될 때마다 service()메소드가 doGet()/doPost()호출

- doGet() : form 에서 메소드를 정의하지 않으면 기본적으로 get 방식으로 보내게 된다. 그렇기 때문에 get방식으로 보내게 되었을 때는

doGet()을 사용한다.

doGet()
get방식으로 보내게 되었을 때는 doGet()을 사용한다.
* form에서 따로 정의하지 않는 경우 get방식으로 보내게 된다.
doPost()
post방식을 사용할 때에는 인코딩 방식을 따로 지정해주어야 한다.


req.setCharacterEncoding("UTF-8");

③ 서블릿이 끝나면 destroy()메소드 호출

 

3. servlet 클래스의 종류

 
HTTPServletRequest
요청 담당 클래스
: 사용자가 요청한 내용을 받아주는 용도
getParameter() : String
view에서 보낸 데이터를 받아오는 역할
매개변수 : view에서 input에 적은 각각의 name 속성
getParameterValues()
: Sting []
view에서 보낸 데이터를 받아오는 역할
매개변수 : view에서 input에 적은 각각의 name 속성
다수의 값을 가지는 속성에 사용
setAttribute()
view에서 보낸 데이터를 모아주는 역할
ex) request.setAttribute("name", name);
- name : 내가 전달하고자 하는 데이터를
어떤 이름의 공간으로 담아서 보낼지 지정
name : 위에서 선언된 각각의 값을 담고
있는 변수
getAttribute()
servlet에서 보낸 데이터를 jsp 파일로 넘어와 받아주는 역할
ex) String name =(String)request.getAttribute("name");
setCharacterEncoding()
view에서 받아온 데이터를 어떤 것으로 인코딩할 지 설정해주는 메소드
ex) request.setCharacterEncoding("UTF-8");
getCharacterDispacher()
요청된 데이터를 어디로 보낼지 경로를 지정함
ex) RequestDispatcher view = request.getRequestDispatcher("servlet/testServlet3End.jsp");
HTTPServletResponse
응답 담당 클래스
: 처리 결과를 웹 브라우저로 보여주기 위한 용도
setContentType()
매개변수 : "text/html; charset=UTF-8"
내용에 대한 content type 기술
getWriter()
화면에 해당 데이터를 출력하기 위한 메소드
sendRedirect()
페이지 변경

 

개념 1 ) getParameter 와 getAttribute

종류
반환타입
사용용도
HttpServletRequst.getParameter(String name)
String
뷰에서 보낸 데이터를 가져올 떄
HttpServletRequest.getAttribute(String name)
Object
Servelt에서 보낸 데이터를 가져올 때

 

개념 2 ) forward()와 sendRedirect() 의 차이점


데이터 전송 여부
url 유지 여부
객체 유지 여부
RequestDispatcher.forward()
view에 데이터 전송 가능
view에 데이터가 존재할 때
URL 유지
request / response 객체 유지
HttpServletResponse.sendRedirect()
view에 데이터 전송 불가
view에 데이터가 존재하지 않을 때
URL 변경
request / response 새로 생성

개념 3 ) 로그인을 하기 위해서는 session을 사용

 

 

4. servlet 주요 역할

 

① view에서 보낸 데이터 받아오기 (Controller의 역할)

② 어떤 view에 보낼지 결정

③ 요청 url 연결/지정( url 맵핑)

- 방법 1. 배포 서술자(DD : Deployment Descriptor) = web.xml 파일 사용

애플리케이션에 대한 전체 설정 정보

  <servlet>
  	<servlet-name>TestServlet1 이름은 똑같이</servlet-name>
  	<servlet-class>어떤 클래스에서 처리하는지 전체 이름 적기</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>TestServlet1 이름은 똑같이</servlet-name>
  	<url-pattern>/요청받은 주소 적기 </url-pattern>
  </servlet-mapping>
 

- 방법 2. @Annotation

 

5. 서버 연결하기

 

그동안 로컬 파일로 html / css / javascript / jQuery 등을 실행시켰으나 Servlet의 경우 로컬 파일이 아닌 서버를 선택해주어야 한다.

인덱스 파일에 내용을 작성하고 프로젝트 이름을 클릭 한 후에 crtl + F11 버튼이나 run 실행 버튼을 누르면 다음과 같은 창을 볼 수 있다 Run As 창이 뜨는데 Run on Server 클릭

 

이 때, ServletServer를 선택하고 finish를 누르면 서버 연결 완료

 

 

1 - 인덱스 안에서 실행버튼 누르고 서버에 구현했을 시 url 주소

2 - 프로젝트를 클릭한 후 실행버튼을 누르고 구현했을 시의 url 주소 ( welcome file로 지정되어있는 종류의 파일명/타입만 가능)

 

 

6. url 지정하기

지금까지는 로컬에서 <form> 태그를 이용하여 내 자신에게로 보냈지만 servlet에서는 서버를 이용하여 url로 해당 데이터를 보내고 싶을 곳을 지정할 수 있다.

 

 

<form action = "/testServlet1.do"> ver.

 http://localhost:8180/testServlet1.do?name=123&city=&height=170

 

<form action = "/1_Servlet/testServlet1.do"> ver.

 http://localhost:8180/1_Servelt/testServlet1.do?name=123&city=&height=170

 

이런식으로 지정해 줄 수 있다.