☞서블릿(Servlet : Server + let)을 얹으면 자바 웹 프로그램이 된다. HTML의 동적인 내용을 클라이언트의 웹브라우저에 띄우기 위해서 필요한 도구이다.
웹 프로그램이란 '사용자 브라우저 요청 request)' <-> 서버 프로그램이 요청을 처리하고(<->데이터베이스에서 정보를 추출해서 처리) <-> 결과를 다시 클라이언트에게 보낸다.
서블릿은 Apache Tomcat 서버를 이용해서 개발한다. Apache는 순수한 웹 서버(최근에는 Nginx라는 서버로 대체 중)는 웹 서버를 의미하고 Tomcat은 웹 서버 프로그래밍 개발용 서버이다.
☞ Servlet 개요(Servlet : Server + let) 이란 ?
- 서버에서 실행되는 서비스(사용자의 요구사항을 제공해주는) 객체.
- 웹 응용프로그램을 만드는 자바 기술이며, 실행 결과값은 html로 돌려준다.
- html의 정적인 문제를 해결할 수 있는 동적인 특징을 갖는다.
- 자바언어로 작성되어 자바의 일반적인 특징을 모두 갖는다.
- 객체지향적이다.
- 쓰레드로 처리한다(동시 다발적인 사용자의 요청에 대한 응답이 용이하다)
- container(Apache Tomcat)라는 특별한 환경에서 실행된다.
- 보안 모델 적용이 수월하다.
☞웹 서버와 클라이언트
- 서버 : 네트워크에서 서비스를 제공하는 컴퓨터로서 서비스를 제공할 수 있는 프로그램이 설치되어야 한다.
- 클라이언트 : 네트워크에서 서비스를 제공받는 컴퓨터로서 브라우저가 설치되어야 한다.
☞http프로토콜
- www 서비스를 제공하기 위한 통신규약이다.
- 웹 서비스를 제공하는 Hyper Text Transfer Protocol이다.
- 웹 서버와 클라이언트는 HTTP를 통해서 통신한다.
- 소켓 통신보다 조금 더 편하게 사용할 수 있도록 설계되어 있다.
서버 어플을 생성하는 프로그램인데 서버 프로그램은 기능별로 코드가 분리되어 있고, 요청에 의해서 선택적으로 실행되게 되어 있다. 이렇게 서버에서 각 서버 어플이 용도별로 조각나서 저장된 형태는 Server Application Let이라고 한다.
예를 들어서 클라이언트가 GET을 요청하면 서버에 있는 모든 프로그램 파일이 응답하지 않고 해당 파일만 응답하게 된다.
이렇게 서버 프로그램을 조각나게 하기 위해서는 자바에서 main( ) 메서드를 기반으로 했던 것과 다르게 service( ) 메서드를 사용해서 하나씩 생성해주고, 여기에 웹 요청 Request와 응답 Response만 추가하면 된다. Servlet 프로그램에서는 Java 프로그램을 작성할 때 main ( ) 대신 service( ) 메서 서드를 사용한다고 이해하면 된다.
☞ 서블릿 생명주기 메서드
초기화 : init( )
작업 수행 : doGet( ), doPost( )
종료 : destroy( )
내 컴퓨터 C:W~
ROOT - IT - itnews.txt(메모장) - http://localhost:8080/it/itnews.txt(구글)
1. server-복사본에
<Context path="IT" docBase="C:\UI\apache-tomcat-8.5.81-windows-x64\apache-tomcat-8.5.81\webapps\itWeb"privileged="true"/> 메모장에 추가로 넣어주기
IT : 가상의 이름으로 만들고 매핑하기 위함
2. startup.bat 재실행하기
3. 구글에 저장 경로로 접속하기 ( localhost:8080/itWeb/itnews.txt)
4. 가상의 이름으로 접속하기 (localhost:8080/IT/itnews.txt)
Tomcat의 홈 디렉터리는 ROOT인데 여기에 모든 사이트 파일들이 들어가 있으면 실행이 무거워져서 비료율적이 되고, 중요한 것은 이 디렉터리는 외부에 노출되어서도 안되고 외부에서 접속하게 해서도 안된다. 따라서 각 사이트 파일을 외부에서 접속할 수 있는 가상의 이름으로 만들어두고 내부적으로 이를 매핑시키는 기법으로 운영한다.
Context
콘텍스트는 localhost:80 아래 /admin/index, /dealer/.., /community/..., /academy/...식으로 웹 페이지상에 보이는 여러 링크 사이트를 구분해서 별개로 만들어 저장하는 기법이다. 가상 경로나 가상 사이트로 부르기도 한다. 규모가 큰 사이트를 구성할 때 사용된다. Naver와 같이 커다란 포털 사이트를 만들 때 메일, 카페, 블로그, 지식iN, 쇼핑, ... 등을 하나하나 만든 뒤 이들을 엮어서 하나의 Naver 사이트가 되는데 이 때 메일, 카페, 블로그, 지식iN, 쇼핑, ...하나 하나의 사이트를 콘텍스트로 부른다.
컴파일할때 옵션으로 준다. 경로복사(C:\UI\apache-tomcat-8.5.81-windows-x64\apache-tomcat-8.5.81\lib)
1. 클래스 파일 생성 (webapps->ROOT->WEB-INF->classes-nana.txt 파일 생성)
2. 파일 생성2 nana,txt
3. Jwork 에 Nana.java생성
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class Nana extends HttpServlet {
public void service (HttpServletRequest request
, HttpServletResponse response)
throws IOException, ServletException {
System.out.println("Hello Servlet!!");
}
}
4.cmd 실행
C:\Jwork>javac --class-path C:\UI\apache-tomcat-8.5.81-windows-x64\apache-tomcat-8.5.81\lib\servlet-api.jar Nana.java
nana.class 생성확인
ROOT web.xml <servlet> ~</servlet-mapping>까지 추가 저장
nana.txt. 생성
C:\UI\apache-tomcat-8.5.81-windows-x64\apache-tomcat-8.5.81\webapps\ROOT에 저장
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class Nana extends HttpServlet {
public void service (HttpServletRequest request
, HttpServletResponse response)
throws IOException, ServletException {
OutputStream os = response.getOutputStream();
PrintStream out = new PrintStream(os, true);
out.println("Hello Servelt")
}
}
//(os, true)에서 true는 원래 BufferedMemory는 8KB 정도가 되어야 전송되기 지갓하는데
true를 옵션으로 주면 8KB 버퍼가 차지 않아도 전송하라는 의미이다.
ok -> next -> service 만 체크하고 다 풀기 inherited 두개만
package action;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/You")
public class HiServlet2 extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest request
, HttpServletResponse response)
throws ServletException, IOException {
String ip = request.getRemoteAddr();
System.out.println(ip + "님이 접속했습니다.");
System.out.println("--HelloServlet:service() Call--");
}
}
'일단 해보는 코딩 > JSP' 카테고리의 다른 글
[JSP] JSP와 DB연결 (0) | 2022.08.18 |
---|---|
[JSP] VO(Value Object), 내장객체 (0) | 2022.08.16 |
[JSP] JSP이란? (0) | 2022.08.16 |
[JSP] 작업설정하기 (0) | 2022.08.16 |
[JSP] 서블릿2 (0) | 2022.08.12 |