"J2EE 란?"
J2EE 는 스펙들에 대한 스펙, 슈퍼스펙이다. J2EE는 서블릿 스펙 2.4와 jsp 2.0 스펙과 같은 스펙들을 포함하고 있다. 서블릿 스펙과 jsp스펙은 둘다 웹 컨테이너를 위한 것이다.
J2EE1.4 스펙에는 이것 말고도 EJB2.1 스펙도 들어 있다. 이 스펙은 EJB 컨테이너에 사용한다. 웹 컨테이너는 웹 컴포넌트(서릿,JSP)를 위한 것이고, EJB컨테이너는 비즈니스 컴포넌트용이다.
J2EE 에 완벽하게 부합되는 J2EE 애플리케이션 서버는 웹컨테이너와 EJB 컨테이너 둘다 있어야 한다. 톰캣은 웹 컨테이너일 뿐이다.
"컨테이너"
컨테이너는 서블릿과 웹 서버가 서로 통신할 수 있는 손쉬운 방법을 제공한다. 다시 말하면, 서버와 대화하기 위하여 개발자가 직접 ServerSocket을 만들고 특정포트에 리스닝하고, 연결 요청이 들어오면 스트림을 생성하는 등 이런 복잡한 일련을 할 필요가 없단 얘기이다. 컨테이너는 어떻게 웹 서버와 통신해야 하는지 잘 알고 있으며 이런 통신 기능을 api로 제공한다.따라서 웹 서버와 서블릿이 서로 통신하기 위한 통로인 통신 API에 대해서 고민할 필요가 없다. 개발자가 고민해야 할 부분은 서블릿에 구현해야 할 비즈니스 로직이다.
생명주기(라이프사이클) | 컨테이너는 서블릿 클래스를 로딩하여 인스턴스화 하고 초기화 메소드를 호출 요청이 들어오면 적절한 서블릿 메소드를 호출하는 작업을 한다. 서블릿이 생명을 다한 순간에는 적절하게 가비지 컬렉션을 진행한다. |
멀티스레딩 지원 | 컨테이너는 요청이 들어올 때마다 새로운 자바 스레드를 만든다.요청에 따라 http서비스 메소드를 실행하면 그걸로 스레딩 작업은 끝(스레드가 죽음) 서버가 다중 요청에 대한 스레드 생성 및 운영에 대해서 알아서 해주니 개발자는 스레드에 대하여 신경 쓸 부분이 없다. |
선언적인 보안관리 | 컨테이너를 사용하면, 보안에 관련된 내용을 서블릿 또는 자바클래스 코드 안에 하드코딩 할 필요가 없다. 컨테이너가 있는 환경이라면 보안관리는 xml 배포 서술자에다가 기록하면 된다. |
jsp지원 | jsp지원한다. |
* 컨테이너가 요청다루기 *
1. 사용자가 서블릿에 대한 요청을 클릭
2. 컨테이너는 들어온 요청이 서블릿이라는 것을 간파하곤 HttpservletRequest, HttpServletResponse 객채생성
3. 사용자가 날린 url을 분석하여 어떤 서블릿에 대한 요청인지 알아내고 해당 서블릿의 스레드를 생성하여 request,response 전달
4. 컨테이너는 서블릿의 service() 메소드를 호출 -> service()에서는 doGet()을 호출할지 doPost를 호출할지 결정(일단 doGet으 로 간주)
5. doGet()메소드는 동적인 페이지를생성한 다음, 이를 response객체에 실어 보낸다. 보내고 난 후에도 response에 대한 레퍼런스를 가지고 있다.
6. 스레드 작업이 끝나면 컨테이너는 response객체 를 HttpResponse로 전환하여 클라이언트로 내려보낸다. 이제 마지막으로 Request와 Response 객체를 소멸.
* servlet코드 ex *
import javax.servlet.*;
import javax.servlet.http.*;
import javax.io.*;
public class ExServlet extends HttpServlet{
public void doGet(HttpServletRequest request, HttpServletResponse response)throws IOException {
PrintWriter out = response.getWriter();
java.util.Date today = new java.util.Date();
out.println("<html>" +
"<body>"+
"excode" + today +
"</body>" +
"</html>"
);
}
}
//HttpServletResponse객체에는 PrintWriter가 들어있다. PrintWriter말고도 다양한 출력옵션이 있는데 html이 아닌 이미지같은것을 출력할때 쓰면 된다.
[참고] RequestDispatcher view = request.getRequestDispatcher("result.jsp");
view.forword(request,response);
* 배포서술자에 url을 서블릿에 매핑하기 *
<servlet>
<servlet-name> mkk </servlet-name>
<servlet-class> org.thinker.Mkk </servlet-class>
</servlet>
<servlet-mapping>
<servlet-name> mkk </setvlet-name>
<url-pattern> /mkk.do </url-pattern>
</servlet-mapping>
//DD에서 할수 있는 일은 url 매핑 말고도 무척 많다. 보안역할 설정, 오류 페이지 설정, 항목 라이브러리, 초기화 구성 및 관련 정보 설 정 등등
//그리고 서버가 J2EE의 모든 규격을 구현한 서버라면 EJB선언 및 접근에 관련된 내용도 여기서 설정한다.
'web.. > servlet/jsp' 카테고리의 다른 글
ServletContextListener 란? (0) | 2013.01.09 |
---|---|
ServletConfig & ServletContext (0) | 2013.01.09 |
HttpServletRequest 객체 & HttpServletResponse 객체 (0) | 2013.01.09 |
서블릿의 생명주기 & 멱등 (0) | 2013.01.09 |
HTML과 HTTP (0) | 2013.01.09 |