◈ Servlet : Java Web Server Program - Server + let 합성어로 웹에서 실행되는 간단한 프로그램
→ 웹프로그램은 클라이언트 요청에 의해 WAS(Web Application Server)로 실행되며 실행결과를
◈ 웹문서를 동적으로 생성하여 응답 - Servlet 프로그램은 WAS에 의해 관리(생성,사용,소멸)
◈ WAS(Web Application Server) : Web Server(요청과 응답) + Web Container(서블릿 관리)
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 프로그램은 서블릿 클래스를 객체로 생성하여 요청 처리 메소드를 호출하여 //매핑에 대한 처리와 응답결과 생성 //→ 서블릿 클래스가 이미 객체로 생성된 경우에는 요청 처리 메소드만 호출하여 실행 } }