자바 서블릿은자바 EE사양의 일부분으로, 주로 이 기능을 이용하여 쇼핑몰이나 온라인 뱅킹 등의 다양한 웹 시스템이 구현되고 있다.
비슷한 기술로는펄등을 이용한CGI, PHP를아파치 웹 서버프로세스에서 동작하게 하는 mod_php,마이크로소프트사의 IIS에서 동작하는ASP등이 있다. CGI는 요청이 있을 때마다 새로운 프로세스가 생성되어 응답하는 데 비해, 자바 서블릿은 외부 요청마다 프로세스보다 가벼운 스레드로써 응답하므로 보다 가볍다. 또한, 자바 서블릿은 자바로 구현되므로 다양한 플랫폼에서 동작한다.
서버에 서블릿을 만들었다고 해서 스스로 작동하는 것이 아니고,서블릿을 관리해주는 것이 필요한데 그러한 역할을 하는 것이 바로 서블릿 컨테이너입니다. 예를 들어, 서블릿이 어떠한 역할을 수행하는 정의서라고 보면, 서블릿 컨테이너는 그 정의서를 보고 수행한다고 볼 수 있습니다. 서블릿 컨테이너는클라이언트의 요청(Request)을 받아주고 응답(Response)할 수 있게, 웹서버와 소켓을 만들어 통신하며 대표적인 예로 톰캣(Tomcat)이 있습니다. 톰캣은 실제로 웹서버와 통신하여 JSP(자바 서버 페이지)와 Servlet이 작동하는 환경을 제공해줍니다.
JSP란?
Java 코드가 들어가 있는 HTML 코드
서블릿은 자바 소스코드 속에 HTML코드가 들어가는 형태인데, JSP는 이와 반대로HTML 소스코드 속에 자바 소스코드가 들어가는 구조를 갖는 웹어플리케이션 프로그래밍 기술입니다.
Java에서 abstract, final과 함께 대표적인 규제이며 Java가 추상화를 위해 제공하는 가장 유용한 도구이다.
어떤 클래스가 있고 그 클래스가 특정한 인터페이스를 사용한다면 그 클래스는 반드시 사용한 인터페이스의 메소드들을 구현해야 한다.
만약 인터페이스에서 강제하고 있는 메소드들을 구현하지 않으면 컴파일 조차 되지 않는다.
interface 규칙
- 인터페이스에 정의되는 멤버들의 접근제어자는 public이다.
- 하나의 클래스는 복수개의 인터페이스를 구현할 수 있다.
- 인터페이스 상속이 가능하다.
- 인터페이스는 어떤 일을 하겠다는 기능만 정의해 놓는다. 인터페이스에는 어떻게 하겠다는 구현 방법은 나타나 있지 않다. 그것은 인터페이스를 구현한 클래스들이 알아서 결정할 일이다.
클래스 A 뒤의 implements I는 이 클래스가 인터페이스 I를 구현하고 있다는 의미다. 그것은 3행의 interface I의 멤버인 public void z() 메소드를 클래스 A가 반드시 포함하고 있어야 한다는 뜻이다.
인터페이스와 상속은 다르다. 상속이 상위 클래스의 기능을 하위 클래스가 물려받는 것이라고 한다면, 인터페이스는 하위 클래스에 특정한 메소드가 반드시 존재하도록 강제한다.
interface와 abstract 차이
인터페이스와 추상 클래스는 서로 비슷한 듯 다른 기능이다. 인터페이스는 클래스가 아닌 인터페이스라는 고유한 형태를 가지고 있는 반면 추상 클래스는 일반적인 클래스다. 또 인터페이스는 구체적인 로직이나 상태를 가지고 있을 수 없고, 추상 클래스는 구체적인 로직이나 상태를 가지고 있을 수 있다.
클래스 안에 소속되어 있는 멤버(변수, 메서드)에 접근할 수 있는 권한을 차등 부여하는 것이고 멤버 접근 제어자와 클래스 접근 제어자가 있다.
접근제어자를 왜 사용하는가?
접근 제어자를 사용하는 이유는 사용자에게 객체를 조작할 수 있는 수단만을 제공함으로써 결과적으로 객체의 사용에 집중할 수 있도록 돕기 위함이다.
프로그래밍은 기존에 작은 것에서 거대한 것으로, 단순한 것에서 복잡한 것으로, 단독 작업에서 협업으로 나아가게 되었다.
그러한 변화에 수용하기 위해서 다양한 규제가 필요하게 되었다.(법이 생긴 것)
그 규제들로는 데이터 타입, 리턴 타입, 접근제어자, 추상클래스, final, 인터페이스 등이 있다.
자유에 질서를 부여함으로서 자유를 촉진하는 것이다.
클래스의 접근 제어자는 총 2개로 public과 default이다. default는 접근 제어자를 붙이지 않은 경우 default가 된다. 클래스의 접근 제어자는 패키지와 관련된 개념이다.즉, 접근 제어자가 public인 클래스는 다른 패키지의 클래스에서도 사용할 수 있고, default인 경우는 같은 패키지에서만 사용 가능하다.
public 클래스가 포함된 소소코드는 public 클래스의 클래스 명과 소스코드의 파일명이 같아야 한다.