정적 웹 페이지는 언제 접속해도 같은 응답을 보내준다.
일단 HTML, CSS, JS 파일 등이 서버에 업로드되면 개발자가 수정하기 전까지 매번 같은 파일을 브라우저에 건네준다.
즉, 웹 서버가 정적 웹 페이지에 대한 요청을 받은 경우, 서버는 추가적인 처리 과정없이 클라이언트에게 응답을 보낸다.
예를 들어, 회사나 개인의 소개 페이지가 정적 웹페이지의 좋은 예시이다.
웹 서버가 동적 웹 페이지에 대한 요청을 받은 경우 서버는 추가적인 처리 과정 이후 클라이언트에게 응답을 보낸다.
동적 페이지는 방문자와 상호작용하기 때문에 페이지 내용은 그때그때 다르다.
댓글, 날씨, 주가정보 등과 같이 정보 변경이 찾은 곳에 많이 사용된다.
동적 페이지란 요청에 대해서 각각 다른 내용을 보여준다.
사용자(클라이언트)가 URL을 통해 서버에 웹 페이지를 요청했을 때, 서버는 사용자에게 맞는 HTML문서를 생성하여 사용자에게 응답한다.
매번 다른 값을 전달이 가능하다!
-> 포트번호, 특정 컴퓨터에서 통신을 위해 열려있는 문
-> 모든 컴퓨터는 0~65535까지의 포트번호를 가지고 있다.
-> 이 포트번호를 통해서 통신이 진행될 수 있으며 기본적으로 모든 포트번호는 차단되어있다.
(포트를 차단하는 역할을 하는 프로그램이 방화벽이다.)
아파치 톰캣
https://tomcat.apache.org/whichversion.html
Supported Java Versions 확인 후
왼쪽 메뉴 Download (나는 ver9) -> 해당하는 버전 다운 (나는 64-bit Windows.zip) -> 다른이름으로 저장 -> gb -> util폴더
해당 폴더에 알아서 풀기
이클립스 실행 -> 파일 경로지정
<초기에 경로지정을 못하고 launch를 했다면?>
실행 후 - > file - > switch workspace -> Other 에서 경로 재설정 가능
<프로젝트 설정>
Create a project -> Dynamic Web Project 검색후 -> Next
-> name 설정 day00 -> Configuration -> Modify -> java 버전선택(나는 ver11) -> OK
Java의 더 상위버전을 사용할 수 있으나 tomcat과 java의 호환성 문제가 존재할 수 있기에 tomcat ver9과 java ver11을 사용했다
next -> next -> Generate we.xml deployment descriptor 체크박스 선택후 -> Finish -> day00 프로젝트 생성 완료
<서버설정>
// Servers 클릭 버튼이 없다면
Servers 탭에서 -> 마우스 오른쪽버튼 -> new -> server
Apache 버전 선택 후 name변경(나는 day01) - > next
Browse 눌러서 경로선택 -> next
Availlable 에서 해당하는 파일선택 후 add
Finish
<서버 활성화 확인>
프로젝트 -> src -> main -> webapp -> 우클릭 -> 새로만들기 -> html -> html에 테스트 문구 작성 -> 서버 활성화 -> localhost:****로 이동 -> 결과값 확인
서버 스타트 오류 시 (동일한 포트넘버가 사용중일 때)
Servers -> 해당파일 더블클릭(해당 서버의 Overview가 열린다)
Ports 에서
HTTP/1.1 포트넘버 확인 후 변경 (0~ 65535범위내 사용)
Ctrl + s 눌러서 저장
Modules 탭에서
파일 선택후 - > Edit
path: 를 / 로 변경
OK
Ctrl + s 눌러서 저장
<언어변경>
window - > preferences -> enc 검색 -> 항목들을 UTF-8 Apply & Save
<servlet-api.jar파일 가져오기>
내PC -> D드라이브 -> gb폴더 -> util -> apache-tomcat-9.0.73(톰캣 경로) -> lib -> servlet-api.jar 복사
<servlet-api.jar 파일 삽입하기>
java프로젝트 day01_1 -> src -> main -> webapp -> WEB-INF -> lib -> servlet-api.jar파일 붙여넣기
<servlet-api.jar 파일 적용하기>
프로젝트(day01_1) 우클릭 -> properties -> Java Build Path -> Classpath 좌클릭 -> 우측에 ADD JARs... 클릭 -> 프로젝트 -> src -> main -> webapp -> WEB-INF -> lib -> OK -> Apply -> servlet-api.jar 파일 등록 완료
<package와 class 생성하기>
프로젝트 -> src -> main -> java 우클릭 -> other... 클릭 -> wizard에 package 검색 -> next -> name : com.codingbox.web.servlet
(주소의 반대로 적는것이 국룰?)
-> Finish (Package 생성완료) -> com.codingbox.web.servlet(package)우클릭 -> new -> class -> name : MyServlet(Class 생성완료)
<코드 넣기>
-> 클래스에 extends HttpServlet 입력
-> 클래스 블록 내부에 service + ctrl + spacebar
service메서드 호출
-> 이거 지우기
// TODO Auto-generated method stub super.service(arg0, arg1);
-> 이거 입력
System.out.println("hello service 도착");
PrintWriter out = arg1.getWriter();
out.println("Hello servlet Annotation!!");
<server와 console창에서 결과 확인하기>
Servers -> 서버start -> url ( localhost:8081/hello ) 로 이동 -> server url과 console창에서 출력값 확인
Web Server
HTTP 프로토콜을 기반으로 하여 클라이언트의 요청을 서비스하는 기능을 담당
클라이언트가 어떠한 요청을 하면 그에 대한 결과를 다시 전송해 주어야 하는데, 이러한 역활을 하는 자바 프로그램이다.
클라이언트가 URL을 입력하면 HTTP Request가 Servlet Container로 전송합니다. 요청을 전송받은 Servlet Container는 HttpServletRequest, HttpServletResponse 객체를 생성한다.
web.xml을 기반으로 사용자가 요청한 URL이 어느 서블렛에 대한 요청인지를 찾는다.
-해당 서블릿에서 service메소드를 호출한 후 클라이언트의 GET, POST 여부에 따라서 doGet() 또는 doPost()를 호출한다.
HttpServletResponse객체에 응답을 보낸다.
응답이 끝나면 HttpServletRequest, HttpServletResponse 두 객체를 소멸시킨다.
1) wet.xml에 직접 담아서 서버와 콘솔창에 출력값을 확인하는 방법
2) @WebServlet("/*")을 사용하는 방법