[Servlet 1-1] 서블릿 프로그램 작성 방법

임승현·2022년 11월 28일
0

Servlet

목록 보기
2/14

◈ Servlet : Java Web Server Program - Server + let 합성어로 웹에서 실행되는 간단한 프로그램
→ 웹프로그램은 클라이언트 요청에 의해 WAS(Web Application Server)로 실행되며 실행결과를
◈ 웹문서를 동적으로 생성하여 응답 - Servlet 프로그램은 WAS에 의해 관리(생성,사용,소멸)
◈ WAS(Web Application Server) : Web Server(요청과 응답) + Web Container(서블릿 관리)

🐧Project 생성

1. 오른쪽 클릭 → New → Dynamic Wen Project


─────────────────────────────────────

2. Project name : servlet

🐧서블릿 프로그램 작성 방법

1.HttpServlet 클래스(J2EE >> Apache Tomcat)를 상속받은 자식클래스 작성 - 서블릿 클래스

→ HttpServlet 클래스를 상속받은 자식클래스는 객체직렬화 클래스로 serialVersionUID 필드를 선언하는 것을 권장

public class HelloServlet extends HttpServlet{//Add default serial version ID 클릭해서 경고 없애기
	private static final long serialVersionUID = 1L;

※public class HelloServlet { → public class HelloServlet extends HttpServlet{
─────────────────────────────────────

2. doGet() 메소드 또는 doPost() 메소드를 오버라이드 선언

→ 클라이언트 요청에 대한 처리와 처리결과를 동적으로 웹문서로 생성하여 응답하기 위한 메소드
→ WAS(Web Application Server) 프로그램에 의해 자동 호출되는 메소드
◈ doGet() : 클라이언트가 해당 웹프로그램을 GET 방식으로 요청한 경우 호출되는 메소드
◈ doPost() : 클라이언트가 해당 웹프로그램을 Post 방식으로 요청한 경우 호출되는 메소드
◈ doGet() 메소드 또는 doPost() 메소드 대신 service() 메소드 오버라이드 선언 가능
→ service() : 클라이언트가 해당 웹프로그램에 대해 모든 방식으로 요청한 경우 호출되는 메소드
WAS 프로그램에 의해 메소드가 호출될 때 HttpServletRequest 객체와 HttpServletResponse 객체가 매개변수에 저장되어 제공(req → request, reps → response 변경하는 것을 권장)

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

※오버라이드 선언 방법 : 메소드 이름 입력 후 [ctrl]+[space]
─────────────────────────────────────

3.클라이언트에게 응답할 결과에 대한 파일의 형식(MimeType)을 설정(변경)

형식) HttpServletResponse.setContentType(String mimeType[;charset=encoding])
→ 응답파일이 문서파일인 경우 문자의 형태(캐릭터셋 : CharacterSet : 인코딩) 설정
→ 기본 응답파일 형식 : text/html, 캐릭터셋 : ISO-8859-1(서유럽어)

response.setContentType("text/html;charset=utf-8");//이게 없으면 한글 깨짐

─────────────────────────────────────

4. 클라이언트 요청에 의해 생성된 응답파일을 대한 출력스트림을 반환받아 저장

형식) HttpServletResponse.getOutputStream()
: 원시데이터(1Byte)를 전달할 수 있는 출력스트림(ServletOutputStream 객체)를 반환하는 메소드
→ 그림, 소리, 동영상 파일 등과 같은 이진파일을 생성하여 클라이언트에게 응답하기 위한 출력스트림
형식) HttpServletResponse.getWriter()
: 인코딩 처리된 문자데이터(2Byte)를 전달할 수 있는 출력스트림(PrintWriter 객체)를 반환하는 메소드
→ PlanText, HTML, XML, JSON 파일 등과 같은 문서파일을 생성하여 클라이언트에게 응답하기 위한 출력스트림

PrintWriter out=response.getWriter();

─────────────────────────────────────

5. 요청에 대한 처리와 처리에 대한 결과를 출력스트림을 사용하여 응답파일 생성

out.println("<!DOCTYPE html>");//출력스트림으로 문자열(HTML 태그)을 전달하여 문서파일 작성
out.println("<html>");
out.println("<head>");
out.println("<meta charset='UTF-8'>");
out.println("<title>jQuery</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>서블릿(Servlet)</h1>");
out.println("<hr>");
out.println("<p>Hello, Servelt!!!</p>");
out.println("</body>");
out.println("</html>");

─────────────────────────────────────

6.서블릿 클래스를 서블릿(웹프로그램)으로 실행되도록 설정

→ [web.xml] 파일에서 서블릿 클래스를 서블릿으로 등록하여 서블릿을 요청할 수 있는 URL 주소를 매핑 설정
◈ 클라이언트가 매핑된 URL 주소로 서블릿을 요청하면 WAS 프로그램은 서블릿 클래스를 객체로 생성하여 요청 처리 메소드를 호출하여 매핑에 대한 처리와 응답결과 생성
→ 서블릿 클래스가 이미 객체로 생성된 경우에는 요청 처리 메소드만 호출하여 실행

📌web.xml : 현재 프로젝트가 WAS 프로그램에 의해 웹자원(WebContext)으로 변경될 때 필요한 정보를 제공하기 위한 환경설정 파일 - XSD 파일(XML 스키마 파일)에 선언된 태그(엘리먼트)만 사용 가능

→ WAS 프로그램에 실행될 때 자동으로 읽어 필요한 설정에 맞게 동작

🌠servlet : 서블릿 클래스를 서블릿(웹프로그램)으로 등록하기 위한 엘리먼트

🌠servlet-name : 서블릿을 구분하기 위한 식별자를 설정하는 엘리먼트

🌠servlet-class : 서블릿으로 등록될 서블릿 클래스를 설정하는 엘리먼트

  <servlet>
  	<servlet-name>hello</servlet-name>
  	<servlet-class>xyz.itwill.servlet.HelloServlet</servlet-class>
  </servlet>

─────────────────────────────────────

🌠servlet-mapping : 서블릿을 실행하기 위한 요청 URL 주소의 패턴을 등록하기 위한 엘리먼트

🌠servlet-name : 요청 URL 주소에 의해 실행될 서블릿의 이름을 설정하는 엘리먼트

🌠url-pattern : 서블릿을 실행하기 위한 URL 주소의 패턴을 설정하는 엘리먼트

<servlet-mapping>
  	<!-- servlet-name : 요청 URL 주소에 의해 실행될 서블릿의 이름을 설정하는 엘리먼트 -->
  	<servlet-name>hello</servlet-name>
  	<!-- url-pattern : 서블릿을 실행하기 위한 URL 주소의 패턴을 설정하는 엘리먼트 -->
    <url-pattern>/hello.itwill</url-pattern>
</servlet-mapping>

─────────────────────────────────────

🌠welcome-file-list : 기본 웹프로그램(WelcomeFile)을 등록하기 위한 엘리먼트

→ 기본 웹프로그램 : 클라이언트가 서버에 접속하여 웹프로그램을 요청하지 않은 경우 기본적으로 실행되어 응답될 웹프로그램 - 메인페이지

🌠welcome-file : 기본 웹프로그램(WelcomeFile)의 이름을 설정하기 위한 엘리먼트 - 순차적으로 적용

<welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.jsp</welcome-file>
    <welcome-file>default.htm</welcome-file>
</welcome-file-list>

📃web.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- web.xml : 현재 프로젝트가 WAS 프로그램에 의해 웹자원(WebContext)으로 변경될 때 필요한 
정보를 제공하기 위한 환경설정 파일 - XSD 파일(XML 스키마 파일)에 선언된 태그(엘리먼트)만 사용 가능-->
<!-- → WAS 프로그램에 실행될 때 자동으로 읽어 필요한 설정에 맞게 동작 -->
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
  <display-name>servlet</display-name>
  <!-- ====================================================================== -->
  <!-- servlet : 서블릿 클래스를 서블릿(웹프로그램)으로 등록하기 위한 엘리먼트 -->
  <servlet>
  	<!-- servlet-name : 서블릿을 구분하기 위한 식별자를 설정하는 엘리먼트 -->
  	<servlet-name>hello</servlet-name>
  	<!-- servlet-class : 서블릿으로 등록될 서블릿 클래스를 설정하는 엘리먼트 -->
  	<servlet-class>xyz.itwill.servlet.HelloServlet</servlet-class>
  </servlet>
  <!-- ====================================================================== -->
  <!-- servlet-mapping : 서블릿을 실행하기 위한 요청 URL 주소의 패턴을 등록하기 위한 엘리먼트 -->
  <servlet-mapping>
  	<!-- servlet-name : 요청 URL 주소에 의해 실행될 서블릿의 이름을 설정하는 엘리먼트 -->
  	<servlet-name>hello</servlet-name>
  	<!-- url-pattern : 서블릿을 실행하기 위한 URL 주소의 패턴을 설정하는 엘리먼트 -->
  	<url-pattern>/hello.itwill</url-pattern>
  </servlet-mapping>
  <!-- ====================================================================== -->
  <!-- welcome-file-list : 기본 웹프로그램(WelcomeFile)을 등록하기 위한 엘리먼트 -->
  <!-- → 기본 웹프로그램 : 클라이언트가 서버에 접속하여 웹프로그램을 요청하지 않은 경우 기본적으로 실행되어 응답될 웹프로그램 - 메인페이지 -->
  <welcome-file-list>
  	<!-- welcome-file : 기본 웹프로그램(WelcomeFile)의 이름을 설정하기 위한 엘리먼트 - 순차적으로 적용 -->
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.jsp</welcome-file>
    <welcome-file>default.htm</welcome-file>
  </welcome-file-list>
</web-app>

※ [web.xml] 파일 위치
[Project Name] → [src] → [main] → [webapp] → [WEB-INF]

📃HelloServlet.java

package xyz.itwill.servlet;
//
import java.io.IOException;
import java.io.PrintWriter;
//
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//
//Servlet : Java Web Server Program - Server + let 합성어로 웹에서 실행되는 간단한 프로그램
//→ 웹프로그램은 클라이언트 요청에 의해 WAS(Web Application Server)로 실행되며 실행결과를 
//웹문서를 동적으로 생성하여 응답 - Servlet 프로그램은 WAS에 의해 관리(생성,사용,소멸)
//WAS(Web Application Server) : Web Server(요청과 응답) + Web Container(서블릿 관리)
//=================================================================================
//서블릿 프로그램 작성 방법
//1.HttpServlet 클래스(J2EE >> Apache Tomcat)를 상속받은 자식클래스 작성 - 서블릿 클래스
//→ HttpServlet 클래스를 상속받은 자식클래스는 객체직렬화 클래스로 serialVersionUID 필드를 선언하는 것을 권장
//( public class HelloServlet { → public class HelloServlet extends HttpServlet{ )
public class HelloServlet extends HttpServlet{//Add default serial version ID 클릭해서 경고 없애기
	private static final long serialVersionUID = 1L;
	//2. doGet() 메소드 또는 doPost() 메소드를 오버라이드 선언
	//→ 클라이언트 요청에 대한 처리와 처리결과를 동적으로 웹문서로 생성하여 응답하기 위한 메소드
	//→ WAS(Web Application Server) 프로그램에 의해 자동 호출되는 메소드
	//doGet() : 클라이언트가 해당 웹프로그램을 GET 방식으로 요청한 경우 호출되는 메소드 
	//doPost() : 클라이언트가 해당 웹프로그램을 Post 방식으로 요청한 경우 호출되는 메소드 
	//doGet() 메소드 또는 doPost() 메소드 대신 service() 메소드 오버라이드 선언 가능
	//→ service() : 클라이언트가 해당 웹프로그램에 대해 모든 방식으로 요청한 경우 호출되는 메소드
	//WAS 프로그램에 의해 메소드가 호출될 때 HttpServletRequest 객체와 HttpServletResponse 객체가 
	//매개변수에 저장되어 제공(req → request, reps → response 변경하는 것을 권장)
	//(오버라이드 선언 방법 : 메소드 이름 입력 후 [ctrl]+[space])
	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//HttpServletRequest : 리퀘스트 메세지(요청 관련 정보)를 표현한 객체 - 입력
		//HttpServletResponse : 리스폰즈 메세지(응답 관련 정보)를 표현한 객체 - 출력
		//
		//3.클라이언트에게 응답할 결과에 대한 파일의 형식(MimeType)을 설정(변경)
		//형식) HttpServletResponse.setContentType(String mimeType[;charset=encoding])
		//→ 응답파일이 문서파일인 경우 문자의 형태(캐릭터셋 : CharacterSet : 인코딩) 설정
		//→ 기본 응답파일 형식 : text/html, 캐릭터셋 : ISO-8859-1(서유럽어)
		response.setContentType("text/html;charset=utf-8");//이게 없으면 한글 깨짐
		//
		//4. 클라이언트 요청에 의해 생성된 응답파일을 대한 출력스트림을 반환받아 저장
		//형식) HttpServletResponse.getOutputStream() : 원시데이터(1Byte)를 전달할 수 있는 출력스트림(ServletOutputStream 객체)를 반환하는 메소드
		//→ 그림, 소리, 동영상 파일 등과 같은 이진파일을 생성하여 클라이언트에게 응답하기 위한 출력스트림
		//형식) HttpServletResponse.getWriter() : 인코딩 처리된 문자데이터(2Byte)를 전달할 수 있는 출력스트림(PrintWriter 객체)를 반환하는 메소드
		//→ PlanText, HTML, XML, JSON 파일 등과 같은 문서파일을 생성하여 클라이언트에게 응답하기 위한 출력스트림
		PrintWriter out=response.getWriter();
		//
		//5. 요청에 대한 처리와 처리에 대한 결과를 출력스트림을 사용하여 응답파일 생성
		out.println("<!DOCTYPE html>");//출력스트림으로 문자열(HTML 태그)을 전달하여 문서파일 작성
		out.println("<html>");
		out.println("<head>");
		out.println("<meta charset='UTF-8'>");
		out.println("<title>jQuery</title>");
		out.println("</head>");
		out.println("<body>");
		out.println("<h1>서블릿(Servlet)</h1>");
		out.println("<hr>");
		out.println("<p>Hello, Servelt!!!</p>");
		out.println("</body>");
		out.println("</html>");
		//
		//6. 서블릿 클래스를 서블릿(웹프로그램)으로 실행되도록 설정
		//→ [web.xml] 파일에서 서블릿 클래스를 서블릿으로 등록하여 서블릿을 요청할 수 있는 URL 주소를 매핑 설정
		//클라이언트가 매핑된 URL 주소로 서블릿을 요청하면 WAS 프로그램은 서블릿 클래스를 객체로 생성하여 요청 처리 메소드를 호출하여
		//매핑에 대한 처리와 응답결과 생성
		//→ 서블릿 클래스가 이미 객체로 생성된 경우에는 요청 처리 메소드만 호출하여 실행
	}
}

0개의 댓글