CGI규칙과 서블릿 & 실습

손원진·2023년 2월 14일
0

[SPRING]

목록 보기
6/15

CGI규칙

웹서버와 웹어플리케이션이 데이터를 주고받을 때 규칙에 따라서 전달을 받음. 그 규칙을 CGI규칙이라고 합니다.

CGI프로그램의 2가지방식

  • COMPILE방식

    		웹서버에서 받은 기계어를 바로 웹어플리케이션 서버에서 실행 
  • 인터프리터 방식

    		웹서버에서 .PHP .PI .ASP .PY 코드를 바로 실행할 수 없기때문에, 웹서버에서 스크립트 엔진을 실행하고 어플리케이션이 그것을 해석해서 실행함. 

Q1. 자바는 어떻게 웹 서버의 바이트코드를 실행할까?

  • JVM을 통해서 실행을 한다. 이것도 사실상 실행 불가능 왜? 웹서버에 의해서 바로 JVM을 실행할 수 없기 때문에. 자바프로그램 관리서버가 웹서버로부터 실행되고, 관리서버가 JVM을 실행해서 BYTE코드를 해석하고 자바프로그램에 전달,

이렇게 중간단계에서 해석을 하는 프로그램을 서블릿 컨테이너라고 합니다.
객체를 생성하고 실행하고 소멸하는 단계를 라이프사이클이라고 하는데, 이 라이프사이클을 관리하는 장소를 엔진이라고 하지않고 서블릿 컨테이너라고 합니다.(자바만)

EX) TOMCAT, JETTY, RESIN, JEUS(티맥스소프트), JBOSS, WebLogic, WebSphere등이 있다.

이런 컨테이너들을 와스라고 부릅니다.

이모저모

lib -> 자바 library파일이 놓여지는 폴더 외부에서 jar파일을 가져와서 누군가 만들어놓은 클래스들을 사용할 수 있다.

web.xml

 <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-app>

<!--
기본이 되는 페이지를 호출할 때, 여러 경우의 수를 두어서 호출할 수 있도록 설정할 수 있습니다. 

비슷한 주소를 만들어 (같거나 유사한 경우)호출하기위해 web.xml에서 welcome-file-list를 만듭니다. 
-->

servlet

implements로 servlet 인터페이스를 상속받아서
servlet이 실행할 경우 작업을 할 수 있도록 만들 수 있습니다.

package lesson03.servlets;

import java.io.IOException;

import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class HelloWorld implements Servlet{//interpreter는 무조건 매소드를 재정의하면서 구현해야함, implements로 servlets를 상속받았기 때문에 이 다섯개는 무조건 구현해야한다. 
	
	
	ServletConfig config;
	
	@Override 
	public void init(ServletConfig config) throws ServletException { //helloworld가 서비스 하는데 필요한 명령어를 작성 외부 스토리지 서버, 프로퍼티 로딩등 클라이언트 요청을 처리하는데 필요자원 먼저 준비 
		System.out.println("init");
		
		
	}
	
	@Override
	public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException { //클라이언트가 요청할 때마다 호출되는 메서드
		System.out.println("service");
		
	}

	@Override
	public void destroy() {
		System.out.println("destroy"); //서비스 수행을 위해 확보했던 자원을 해제한다거나, 데이터를 저장하는 마무리 작업때 호출 
		
	}

	@Override
	public ServletConfig getServletConfig() {//servlet컨테이너가 이 메소드를 호출, 서블릿에 대한 정보를 알고싶을 때 호출하는 것(다른 서블릿의 정보를 추출하고 싶을 때, 관리차원에서 호출 
		System.out.println("init");
		return this.config;
	}

	@Override
	public String getServletInfo() {
		System.out.println("init");
		return "HelloWorld Servlet";
	}


}

그러면 서블릿과 클래스를 매핑해주기 위해선 어떻게 해야할까요?

web.xml에서 설정을 해주면됩니다

<servlet>  
  	<servlet-name>Hello</servlet-name>
  	<servlet-class>lesson03.servlets.HelloWorld<servlet-class>
 
</servlet>

<servlet-mapping>
  	<servlet-name>Hello</servlet-name><!--클래스 서블릿과 매핑하기위한 이름-->
  	<url-pattern>/Hello</url-pattern><!--서블릿을 호출하기 위한 url주소-->
 </servlet-mapping>

web.xml에서 클래스 파일을 servlet과 매핑하는 방법입니다.

TOMCAT 경로

톰켓에서 배치가 되면 C:\javaIDE\workspace.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps내 PC기준 해당 경로에 배치가 된다.
배치가 됐을 때 WEB-INF에 클라스파일도 똑같이 해당경로로 복사된다.

실무에서 운영서버에 배치하기


프로젝트를 선택하고 ECLIPSE FILE MENU에서->EXPORT선택 ->WEB에서 WARFILE선택

선택해서 DESTINATION을 DESKTOP(바탕화면으로 지정)

.war확장자를 .zip확장자로 바꾸고 확인해보면 web-inf 내부 클래스파일을 확인할 수 있다.

C:\javaIDE\server\apache-tomcat-8.5.85\webapps


톰켓이 있는 루트에 war파일을 복사 붙여넣기 한 후에 리눅스를 이용해서 실행할 수 있다.

profile
매일 한 걸음

0개의 댓글