서블릿은 한마디로 class....
간략히 특징을 보자면... servlet은 자체가 오로지JAVA문법을 사용하기 때문에 자유롭게 객체 생성 및 사용이 가능하죠.
또한 jsp페이지에서 어떠한 이벤트 발생시 servlet으로 페이지를 넘기는것이 가능하죠.
즉, 하나의 보여지는 페이지로서의 기능도 할수 있습니다.
그런데 문제는... 소스가 화면에 직접나오다 보니... 보안상 굉장히 불안합니다.
Web소스와 java소스가 노출되는것은 엄연히 틀립니다.
또한 서블릿의 객체를 생성하려면.... import도 하고 생성도 합니다.
그러다 보면 자연스레 많은 자바 코드가 들어가게 되죠.
그렇게 되면 웹의 특성상 기능과 디자인의 코딩이 틀린데요...
특히 디자이너들 같이 소스를 모르는 사람들이 디자인 수정을 하기가 어렵죠.
그리고 태그와 java소스로 인해 코딩 자체도 지저분하게 되고...
그리고 무엇보다 jsp에서는 최대한 소스부분을 빼려고합니다.
그래서 jsp페이지에서는 최대한 java 코드를 줄여보자는 의미에서 여러가지 기법들이 나왔습니다.
그중에 자바빈도 나왔죠.
일단 자바빈이란...
보통 '빈즈'라고도 많이 합니다만....
jsp에서 객체를 가져다 사용 못하니 기능이 아주 제한적이게 됩니다.
또 가져다 쓰자니 위에 언급한거와 같이 소스가 지저분해지고 디자이너가 수정하기도 어렵습니다.
그래서 jsp에서 객체를 가져다가 사용할수 있도록 한 기법이 자바빈입니다.
(jsp:useBean id="dbpool" class="oracle.ec.bean.DBObject" scope="page")(/jsp:useBean)
보통은 위와 같은 방식으로 사용합니다.
이렇게 하면 oracle.ec.bean.DBObject를 dbpool이란 이름으로 객체처럼 사용이 가능하죠.
scope옵션은 사용기간, 혹은 범위라고 이해하시면 됩니다. page에서만 사용하고 버린다는 뜻이다.
아무튼 자바빈에서는 위에 적힌데로 하면 import와 생성이 알아서 되죠.
지저분한 코드없이 객체를 가져다 쓸수 있는겁니다.
왜? 지저분한 소스, 자바 코드를 없앨까?
솔직히 서블릿으로 직접코딩해도 페이지는 나옵니다. 구지 jsp가 없어도 화면 및 기능 다 나옵니다.
그리고 개발자 입장에서 소스가 지저분 하던 말던 상관 없습니다..
하지만 서블릿 페이지로 직접코딩하면 디자인뿐만 아니라 코딩 자체도 솔직히 어렵습니다.
직접 서블릿 페이지로 코딩을 해보셨다면 아실껍니다.
전 서블릿으로 코딩하다가 jsp로 코딩하면서 감동먹었습니다.
아무튼 코딩을 보다 쉽게 하기 위해 나온것이 jsp입니다.
이때 jsp가 나오면서 웹페이지 형식으로 나온것이죠.
그러면서 썬에서 주장한것이... 자바 코드없이 자바의 기능은 사용할수 있는 웹페이지라고 소개했습니다.
솔직히 웹페이지에서 java소스가 보이는것이 상당히 보안으로도 안좋고 디자인 작업시 커뮤니케이션이 안좋죠...
그래서 이런 주장을 한것 같습니다.
아무튼 이때부터 jsp에서 java소스를 제거하려는 sun의 노력이 많아진거죠^^
어떻게 보면 서블릿과 자바빈은 유사하게 보이나... 실질적으로는 많이 틀립니다.
jsp페이지가 어떻게 실행이 되는지는 아시죠?
내부적으로 톰캣이 jsp를 java로 변환하고 그것을 다시 컴파일 하여 class파일로 바꿔서 실행을 시킵니다.
그렇게 되면 페이지 자체가 class가 되는겁니다.
서블릿은 자체가 java로 되어잇어 그것을 class로 컴파일 하는것이죠...
즉, 서블릿에다가 앞에 한단계를 더 붙인것이 jsp죠^^
자바빈은 jsp에서 객체를 가져오기 위한 기법이구요...