Servlet 요약 정리

Hyunsu·2023년 11월 16일
0

Today I Learned

목록 보기
35/37
post-thumbnail

📝 목차

  1. 웹 프로그램
  2. 맵핑
  3. request 와 response
  4. Life Cycle
  5. form 데이터 처리
  6. 데이터 공유

1. 웹 프로그램

웹 프로그램이란

네트워크 는 컴퓨터가 서로 연결되어 있는 것이며 인터넷 서비스 는 서로 연결되어 있는 상태에서 브라우저를 통해 데이터를 주고 받는 것이다.

이 때 웹 프로그램 은 인터넷 서비스를 이용해서 PC 등 서로 다른 구성 요소들이 통신할 수 있는 프로그램이다. 즉 사용자가 웹 서버에게 request 를 하면 웹 서버가 다시 사용자에게 response 를 하는 과정이다.

프로토콜과 IP

프로토콜 은 통신을 하기 위한 규약이다.
HTTP : 하이퍼링크를 이용해 텍스트나 그림 및 동영상 등으로 응답
FTP : 파일과 관련된 프로토콜
SMTP 와 POP : 메일과 관련된 프로토콜

IP 는 특정 컴퓨터의 주소이며 DNS 는 IP 주소와 도메인 주소를 맵핑하는 시스템이다. port 는 서버의 어떤 프로그램에 접속할 것인지 컴퓨터에게 알려주는 역할을 한다.

http://www.google.com:80/index.html

웹 프로그램 동작 원리

사용자가 네이버나 구글과 같은 웹 서버에 Request 를 하면 db 로부터 데이터를 가져올 것인지 아닌지 판단을 한다. 데이터를 가져오려한다면 db 에 query 를 날리고 result 를 받는다. 응답을 받은 웹 서버는 다시 사용자에게 Response 를 한다.

정적 데이터 : 사용자에게 데이터를 특별한 가공없이 HTML 로 보여줌

동적 데이터 : 데이터를 가공하는 경우로 웹 컨테이너에 데이터를 보내고 다시 HTML 로 보여줌

웹 컨테이너 구조

servlet 과 jsp 의 웹 컨테이너 구조를 그려보았다.

jsp 의 웹 컨테이너 구조이다.

servlet 의 웹 컨테이너 구조이다.


2. 맵핑

맵핑이란

브라우저가 웹 컨테이너에 있는 servlet 들 중 어떤 서블릿을 요청했는지 구분하기 위해 고유한 이름을 가지는데 full path 는 보안에 취약하고 복잡한 url 을 가지고 있기 때문에 mapping path 를 통해 간결한 url 을 가지도록 한다.

full path : http://localhost:8090/lec05Pjt001/servlet/com.servlet.ServletEx

mapping path : http://localhost:8090/lec05Pjt001/SE

web.xml 파일을 이용한 맵핑

web.xml 은 웹 프로그램의 환경 설정 파일이다.

<servlet>
	<servlet-name>servletEx</servlet-name> <!-- 닉네임 가명 -->
	<servlet-class>com.servlet.ServletEx</servlet-class> <!-- 실제 자바 파일명 -->
</servlet>
<servlet-mapping>
	<servlet-name>servletEx</servlet-name> <!-- 닉네임 가명 -->
	<url-pattern>/SE</url-pattern> <!-- 맵핑 -->
</servlet-mapping>

Java Annotation 을 이용한 맵핑

@WebServlet 어노테이션의 속성값에 원하는 맵핑값을 넣는다.

@WebServlet("/SE") // 맵핑
public class ServletEx extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		PrintWriter out = response.getWriter();
		out.print("<html>");
		out.print("<head><title>ServletEX</title></head>");
		out.print("<body>");
		out.print("<p>Hello Servlet</p>");
		out.print("</body>");
		out.print("</html>");
	}

}

3. request 와 response

HttpServlet

서블릿 파일은 HttpServlet 추상 클래스를 상속받는다.

public class ServletEx extends HttpServlet { }

HttpServletRequest 와 HttpServletResponse

@WebServlet("/SE")
public class ServletEx extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    	response.getWriter().append("Served at: ").append(request.getContextPath());
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

📌 HttpServletRequest

요청에 대한 정보를 가지고 있는 객체이다. 예를 들어 사용자의 정보나 사용자가 입력한 속성에 대한 정보를 가지고 있다.

request.getCookies(); : 쿠키 정보를 가져옴

request.getSession(); : 세션 정보를 가져옴

request.getAttribute(null); : 속성값 가져옴

request.setAttribute(null, null); : 속성 추가

request.getParameter(null); : request 객체에서 한 개의 데이터만 가져올 때 사용하며 해당 매개변수가 없을 경우 null 반환

request.getParameterValues(null); : request 객체에서 여러 개의 데이터를 가져올 때 사용하며 해당 매개변수가 없을 경우 null 반환

request.getParameterNames(); : form 태그의 name 속성값을 가져옴

📌 HttpServletResponse

응답에 대한 정보를 가지고 있는 객체이다. 서버가 사용자에게 데이터를 제공한다.

response.addCookie(null); : 쿠키 추가 및 수정

response.getStatus(); : status 값 가져오기

response.sendRedirect(null); : 뷰에게 응답하기 위해 사용하는 객체로 현재 요청된 페이지에서 다른 페이지로 응답해줌

response.getWriter(); : PrintWriter 클래스를 리턴 타입으로 함

response.getOutputStream(); : 출력 스트림에 접근하여 읽고 쓰는 등의 작업을 함


4. Life Cycle

사용자의 요청에 의해서 생성된 servlet 의 생명주기는 다음과 같다.

  • 준비 : @PostConstruct 서블릿을 준비하는 단계

  • 생성 : init() 서블릿이 시작하는 단계로 주로 데이터 서버의 아이디나 비밀번호를 변수에 담는 등 공통적으로 이루어지는 작업을 한다.

  • 실행 : service 서블릿이 실행되는 단계로 service 대신 주로 doGet() 에서 작업한다.

  • 종료 : destroy() 서블릿이 소멸되는 단계로 주로 데이터 베이스 등의 자원 해제 작업을 한다.

  • 정리 : @PreDestroy 서블릿을 정리하는 단계

// servlet 실행
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	System.out.println(" -- doGet() -- ");
}

@PostConstruct
public void postConstruct() {
	System.out.println(" -- postConstruct() -- ");
}

// servlet 생성
@Override
public void init() throws ServletException {
	System.out.println(" -- init() -- ");
}

// servlet 종료
@Override
public void destroy() {
	System.out.println(" -- destroy() -- ");
}

@PreDestroy
public void preDestroy() {
	System.out.println(" -- preDestroy() -- ");
}

5. form 데이터 처리

form 태그

예를 들어 브라우저에서 로그인이나 회원 가입 창에 정보를 입력하고 버튼을 누르면 이름이나 메일 등 사용자가 입력한 데이터는 Request 객체에 감싸져서 네트워크를 통해 서버 즉 tomcat 웹 컨테이너로 전송된다.

form 태그의 대표적 속성으로 action 과 method 가 있다. method 속성 생략 시 디폴트 값은 get 방식이다.

doGet

form 태그의 methodget 방식으로 설정하고 submit 버튼을 누르면 데이터가 웹 브라우저 url 에 노출되어 웹 서버로 전송되고 doGet() 메서드가 받게된다.

이 때 사용자 정보가 url 에 노출되기 때문에 보안에 약하다는 단점이 있다.

http://localhost:8090/lec08Pjt001/mSignUp?m_name=Hong+gildong&m_pass=1234

doPost

form 태그의 methodpost 방식으로 설정하고 submit 버튼을 누르면 데이터가 HTTP Request 에 포함되어 웹 서버로 전송되고 doPost() 메서드가 받게된다.

이 때 url 에 맵핑 정보만 노출되기 때문에 보안에 강하다는 장점이 있다.

http://localhost:8090/lec08Pjt001/mSignUp


6. 데이터 공유

데이터 공유는 JSP 포스팅에서 자세히 작성하려한다.

servlet parameter

jsp 에서의 config 객체 역할과 동일하며 해당 서블릿에서만 데이터를 공유한다.

context parameter

jsp 에서의 application 객체 역할과 동일하며 전체적으로 데이터를 공유한다.

context attribute

setAttribute 와 getAttribute 를 통해 속성을 저장하고 가져올 수 있다.

profile
현수의 개발 저장소

0개의 댓글