gwooden_코린이

이클립스 서블릿 살펴보기 본문

JSP&Servlet

이클립스 서블릿 살펴보기

gwooden22 2023. 1. 17. 13:16
728x90

1. 웹서버    WAS(Web Application Server) - 톰캣

 

1-1. 정적 페이지 - HTML

(요청)▷
사용자 

요청 
◀ 웹서버 ▽
  ▲ DB ▽
1.HTML
2.HTML

 

1-2. 동적 페이지 - JSP

사용자(요청) 요청 ▷ 웹서버 넘김 ▷  WAS
(내부에서 계산 처리)

 

사용자 ◀ 요청 웹서버 ◀ 넘김  WAS
(처리 완료 후)

사용자가 페이지를 요청과 동시에 새로운 페이지가 만들어지는 구조 (기본 틀은 만들어져있다.)

 

 

- WAS에서 동적인 페이지(생성)제공

  • 웹 컨테이너 / 서블릿 컨테이너

 

JAVA + SERVLET + JSP

 

 

 

2. 서블릿

  • 자바를 이용해서 웹에 실행되는 프로그램을 만드는 것
  • 웹 브라우저 자바코드를 모름

 

  • 자바 클래스 안에 HTML 코드를 작성(스트림 이용)
  • JSP
  • HTML안에 JAVA코드를 작성

(프론트관련된건 jsp로 관리하고 백엔드 관련된건 서블릿으로 관리)

 

 

 

 

톰캣 -> httpServlet 클래스를 상속받은 클래스가 서블릿 클래스


<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
	<h1>hello</h1>
</body>
</html>

 

이클립스에서 서버구동 후 결과확인이 싫으시면 '윈도우'에서 'Web Browser'을 눌러 원하는 타입으로 바꿔주면 된다.

 

package unit01;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class Sample01
 */
@WebServlet("/Sample01")
public class Sample01 extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public Sample01() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("doget호출");
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("dopost호출");
	}

}

<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
	<form method="get" action="Sample91">
		<input type="submit" value="get">
	</form>
	
	<form method="post" action="Sample91">
		<input type="submit" value="post">
	</form>
</body>
</html>

 

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		//바이너리, 바이트형식으로 출력/입력을 할게아니라 문자 PrintStream사용
		//PrintStream은 문자(다국어) 사용하기 번거로움
		//PrintWriter를 사용
		PrintWriter out = response.getWriter();
		
		for(int i=0; i<10; i++)
			out.print("<h1>hello doget</h1>");
	}

 

html안에서 자바코드를 구동시킬 수 있다.

단, 특정코드를 삽입해야지만 인식한다.

<% 넣고싶은 자바코드 %>

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<!-- 자바코드로 인식시키기 위해서는 아래처럼 코드를 작성해서 자바로 인식하게 해줘야 한다. -->
	<%
		int i = 10;
		int j = 20;
	%>
	
	<h1><%= i+j %></h1>
</body>
</html>

 

 

2-1. URL 맵핑

@WebServlet("/hi")

 

한글화 작업을 위해 

response.setCharacterEncoding("utf-8");
		
response.setContentType("text/html; charset=utf-8");
package unit01;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class Hello
 */
@WebServlet("/hi")
public class Hello extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public Hello() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setCharacterEncoding("utf-8");
		
		response.setContentType("text/html; charset=utf-8");
		
		PrintWriter out = response.getWriter();
		
		out.print("<h1>안녕 서블릿</h1>");
		
		out.close();
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

 

 

2-2. 서블릿 동작 원리

  • 톰캣이 작동되면 JVM 작동 -> 자바 문법에 따르는 서블릿을 처리
  1. 브라우저에서 요청
  2. WAS에 웹서버가 서블릿 요청을 인식
  3. 서블릿 컨테이너에게 수행하도록 넘김
  4. 서블릿은 스레드를 작동
  5. 서블릿 객체를 생성하고 처리
  6. 서블릿 객체의 처리가 끝나면 스레드도 종료
  7. 서블릿 수행결과가 웹서버로 전달
  8. 브라우저에게 전달

웹 브라우저(클라이언트) 요청 웹서버 서블릿
컨테이너
스레드
(작동)
서블릿
객체
(처리)
웹 브라우저(클라이언트) 전달 웹서버 서블릿
컨테이너
스레드
(종료)
서블릿
객체
(처리완료)

 

 

2-3. 서블릿 생명주기(라이프 사이클)

인스턴스 생성
Init() -> 초기화 (한번만 해주고 이후로는 생략)
doGet() 또는 doPost
Destroy (한번만 해주고 이후로는 생략)

package unit01;

import java.io.IOException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class LiftCycle
 */
@WebServlet("/LiftCycle")
public class LiftCycle extends HttpServlet {
	private static final long serialVersionUID = 1L;
	
	int initCnt = 1;
	int doGetCnt = 1;
	int destroyCnt = 1;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public LiftCycle() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see Servlet#init(ServletConfig)
	 */
	public void init(ServletConfig config) throws ServletException {
		System.out.println("inint메서드 호출 : " + initCnt++);
	}

	/**
	 * @see Servlet#destroy()
	 */
	public void destroy() {
		System.out.println("destroy메서드 호출 : " + destroyCnt++);
	}

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("doGet메서드 호출 : " + doGetCnt++);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

728x90
Comments