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();
}
}
}
- 실행
- 파일이 생성
- 페이지 실행
■ 서블릿 클래스 선언 사용
- 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>
- 다시 실행
- 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 |