Server

SERVLET STEP 1 - 기초 셋팅 및 설정

2023. 5. 8. 12:18
728x90

★ 이클립스 실행

  • WorkSpace > code/server

 

★ 설정

  • 폰트
  • 인코딩 UTF 8
    • worspace
    • css
    • HTMl
    • JSP
  • 톰캣
    • Runtime
    • Server -> Runtime Environment

톰캣 설정

 

★ 프로젝트 생성

  • Dynamic Web Project
  • Project name : "ServletTest"
  • Target runtime : Apache Tomcat 8.5
  • Dynamic Web Module Version : 3.1
  • Context Root : "ServletTest" -> "servlet" : 외부 시각
                                                 -> src/main/webapps : 내부 시각

셋팅 완료

 

★ Servlet 

  • 웹서버측에서 자바를 사용한 프로그램을 동작시키는 기술
  • 목적 : 클라이언트 요청에 따른 동작으로 웹페이지를 만들기 위해서!!
  • 자바 > 위의 페이지 생산 > 동적 HTML 페이지 > 바리스타 > 주문

 

★ Servlet Class, 서블릿 클래스

  • 자바 클래스
  • 서블릿 (역할 부여) == 알바생 역할

 

★ Servlet Class 작성 규칙

  • 1. 서블릿 클래스 선언
a. javax.servlet.Servlet 인터페이스를 구현한다. > 복잡합 > 사용X
b. javax.servlet.http.HttpServlet 클래스를 상속받는다. > 간편함 > 사용**
  • 2. doGet/doPost 메소드 선언
- 둘 중 하나 선언 or 둘 다 선언
- 클라이언트(브라우저)의 요청이 들어오면 자동으로 호출되는 메소드
- 동적으로 HTML 페이지를 만드는 역할
- 메소드 작성 규칙
    a. 매개 변수 작성(2개)
        1. java.servlet.http.HttpServletRequest
        2. java.servlet.http.HttpServletResponse
    b. 예외 미루기
        1. java.io.IOException			//페이지 동적 생성 - 외부 입출력
        2. java.servlet.ServletException //서블릿 작업
  • 3. 동적 HTML 문서 작성
- HttpServletResponse 객체의 getWriter() 메소드 호출 > PrintWriter 객체 반환
- PrintWriter 객체의 printXXX("<html>") 메소드를 사용 > HTML을 생성
- 페이지 완성 > 브라우저에게 반환
  • 4. 브라우저가 자바 파일(서블릿, 알바생)을 호출할 수 있는 가상 주소 매핑
    • web.xml

 

 

■ 실제 구현

  • src/main/java -> com.test.servelt 패키지 생성
  • Ex01.java 파일 생성
  • 동적으로 HTML 페이지 만들기
  • 소스코드
package com.test.servlet;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

//서블릿(X) -> 일반 클래스(O)
public class Ex01 {

	public static void main(String[] args) {
		
		//동적으로 HTML 페이지 만들기
		// - test.txt
		// - test.dat
		// - test.html
		
		try {
			BufferedWriter writer = new BufferedWriter(new FileWriter(".\\src\\main\\webapp\\ex01.html"));
			
			writer.write("<html>");
			writer.write("<head>");
			writer.write("<meta charset='UTF-8'>");
			writer.write("</head>");
			writer.write("<body>");
			writer.write("<h1>서블릿 페이지</h1>");
			writer.write("<p>안녕하세요.</p>");
			writer.write("<p>자바로 만든 페이지입니다.</p>");
			writer.write("</body>");
			writer.write("</html>");
			
			writer.close();
			
			System.out.println("complete");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

}
  • 실행

java Application 으로 선택 후, 실행

  • 파일이 생성

webapps에 파일 생성

  • 페이지 실행

실행 결과

 

 

■ 서블릿 클래스 선언 사용

  • Ex02.java 파일 생성
  • 동적으로 HTML 페이지 만들기 -> 서블릿 클래스 사용
  • 소스코드 
package com.test.servlet;

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

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
//
//1. 서블릿 클래스 선언
//a. javax.servlet.Servlet 인터페이스를 구현한다. > 복잡합 > 사용X
//b. javax.servlet.http.HttpServlet 클래스를 상속받는다. > 간편함 > 사용**
import javax.servlet.http.HttpServletResponse;

public class Ex02 extends HttpServlet {

//	2. doGet/doPost 메소드 선언
//	- 둘 중 하나 선언 or 둘 다 선언
//	- 클라이언트(브라우저)의 요청이 들어오면 자동으로 호출되는 메소드
//	- 동적으로 HTML 페이지를 만드는 역할
//	
//	- 메소드 작성 규칙
//	a. 매개 변수 작성(2개)
//		1. java.servlet.http.HttpServletRequest
//		2. java.servlet.http.HttpServletReponse
//	b. 예외 미루기
//		1. java.io.IOException			//페이지 동적 생성 - 외부 입출력
//		2. java.servlet.ServletException //서블릿 작업
	public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
//		
//		3. 동적 HTML 문서 작성
//		- HttpServletResponse 객체의 getWriter() 메소드 호출 > PrintWriter 객체 반환
//		- PrintWriter 객체의 printXXX("<html>") 메소드를 사용 > HTML을 생성
//		- 페이지 완성 > 브라우저에게 반환
		
		//BufferedWriter > 생성된 파일 > HDD에 저장
		//PrintWriter > 생선된 파일 > 톰캣을 통해서 브라우저에게 반환
		
		PrintWriter writer = response.getWriter();
		
		writer.println("<html>");
		writer.println("<head>");		
		writer.println("<meta charset='UTF-8'>");		
		writer.println("</head>");		
		writer.println("<body>");		
		writer.println("<h1>서블릿 페이지</h1>");		
		writer.println("<p>서블릿을 사용해서 만들었습니다.</p>");
		writer.println("</body>");		
		writer.println("</html>");
		
		writer.close();
		
	}
	
	
}
  • 파일이 생성 된 후, 실행

실행 불가

  • 자바 파일은 웹에서 호출이 불가.
  • 해결 방법 
    • 자바 파일을 브라우저를 통해 웹에서 호출할 수 있는 방법이 필요!!
    • 가상 주소
    • web-app > web-inf > web.xml
    • web.xml == Deployment Descriptor == 배포 서술자
    • 아파치 톰캣이 웹 사이트 운영에 필요한 여러가지 설정하는 파일  
    • 브라우저가 웹을 통해서 자바 파일을 직접 호출이 불가능!!
         > 가상 주소 생성 > 대신 자바 파일을 호출하게 설정!!
    • 코드
<servlet>
    <servlet-name>ex02</servlet-name>
    <servlet-class>com.test.servlet.Ex02</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>ex02</servlet-name>
    <url-pattern>/ex02</url-pattern>
</servlet-mapping>
  • 다시 실행

동작 성공, but encoding 문제로 한글이 깨짐

 

  • UTF-8 안깨지게 하려면
    • doGet메소드 안에 가장 상위에 적용
response.setCharacterEncoding("UTF-8");
  • 실행 결과

실행 결과

 

■ 랜덤 > 구구단 페이지 만들기

  • 소스코드
package com.test.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Random;

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

//자동 import = Ctrl + 1
public class Ex03 extends HttpServlet {

	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {
		
		//랜덤 > 구구단 페이지 만들기
		Random rnd = new Random();
		int dan = rnd.nextInt(8) + 2;
		
		String temp = "<!DOCTYPE html>\r\n"
				+ "<html lang=\"en\">\r\n"
				+ "<head>\r\n"
				+ "    <meta charset=\"UTF-8\">\r\n"
				+ "    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\r\n"
				+ "    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\r\n"
				+ "    <title>Document</title>\r\n"
				+ "    <style>\r\n"
				+ "        .box {\r\n"
				+ "            border : 1px solid #CCC;\r\n"
				+ "            width : 120px;\r\n"
				+ "            padding : 20px;\r\n"
				+ "        }\r\n"
				+ "\r\n"
				+ "        .box .item {\r\n"
				+ "            font-size : 1.5rem;\r\n"
				+ "        }\r\n"
				+ "    </style>\r\n"
				+ "</head>\r\n"
				+ "<body>\r\n";
		
	
		   temp += String.format("    <h1>구구단 %d단</h1>\r\n", dan);
		   
		   temp += "\r\n"
				+ "    <div class=\"box\">\r\n";
		   
		   for (int i=1; i<=9; i++) {
			   temp += String.format("        <div class=\"item\">%d x %d = %d</div>\r\n", dan, i, dan*i) ;
		   }
		   
		   
		   temp +="\r\n"
				+ "    </div>\r\n"
				+ "</body>\r\n"
				+ "</html>";
		   
		   resp.setCharacterEncoding("UTF-8");
		   
		   PrintWriter writer = resp.getWriter();
		   writer.print(temp);
		   writer.close();
		
	}
	
	
}
  • 실행 결과

실행 결과

 

728x90
저작자표시 비영리 변경금지 (새창열림)

'Server' 카테고리의 다른 글

JSP STEP 4 - Response  (1) 2023.05.09
JSP STEP 3 - Request_header  (0) 2023.05.09
JSP STEP 2 - JSP 내장 객체  (0) 2023.05.08
JSP STEP 1 - 기초 셋팅 및 응용  (0) 2023.05.08
SERVLET STEP 2 - Servlet 응용  (0) 2023.05.08
'Server' 카테고리의 다른 글
  • JSP STEP 3 - Request_header
  • JSP STEP 2 - JSP 내장 객체
  • JSP STEP 1 - 기초 셋팅 및 응용
  • SERVLET STEP 2 - Servlet 응용
IT의 큰손
IT의 큰손
IT계의 큰손이 되고 싶은 개린이의 Log 일지
Developer Story HouseIT계의 큰손이 되고 싶은 개린이의 Log 일지
IT의 큰손
Developer Story House
IT의 큰손
전체
오늘
어제
  • 분류 전체보기 (457)
    • 정보처리기사 필기 (18)
    • 정보처리기사 실기 (12)
    • 정보처리기사 통합 QUIZ (12)
    • 빅데이터 (11)
    • 안드로이드 (11)
    • 웹페이지 (108)
    • 자바 (49)
    • SQLD (3)
    • 백준 알고리즘 (76)
    • 데이터베이스 (41)
    • 깃허브 (2)
    • Library (14)
    • Server (31)
    • 크롤링&스크래핑 (3)
    • Spring (23)
    • Vue.js (13)
    • React (27)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • Developer Stroy House

인기 글

태그

  • IT자격증
  • 백엔드
  • 알고리즘
  • jsp
  • IT자격증공부
  • DB
  • 프론트엔드
  • 앱개발자
  • 개발블로그
  • it
  • css
  • 정보처리기사필기
  • 코딩테스트
  • 웹페이지
  • html
  • ajax
  • java
  • 백준
  • 정보처리기사
  • 자바
  • DBA
  • 정보보안전문가
  • 데이터베이스
  • IT개발자
  • 웹개발
  • JavaScript
  • 웹개발자
  • React
  • jquery
  • 개발자

최근 댓글

최근 글

Designed By hELLO
IT의 큰손
SERVLET STEP 1 - 기초 셋팅 및 설정
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.