2013년 3월 8일 금요일

[JSP] 서블릿

앞서 서블릿이 무엇인지에 대해 언급하였다.

모든 자바 기반의 웹 어플리케이션은 서블릿에 의해 구동된다. 그러므로 웹 어플리케이션에 있어서 매우 중요하다. 하지만 html 문서와 함께 데이터의 로직을 처리하고 결과값을 전달하기가 매우 어렵다. 왜냐하면 html문서는 브라우저에 의해 해석되어 화면에 보여지는 출력을 담당하지만 서블릿을 비즈니즈 로직을 이용하여 데이터를 처리하는데 그 목적이 있다. 따라서 함께 구현 되어지면 코드가 얽혀 매우 복잡한 코드가 된다.

이런 문제를 개선시키기 위해 JSP가 등장한다. HTML문서에서 프로그램 구현이 가능하도록한 스크립팅 기술을 제공한다. 그러나 실제로는 모든 프로그램의 구현을 JSP로 하지 않고 출력에 대한 부분에 많이 초점을 두고 실제 비즈니스 로직을 처리하기 위해서 MVC패턴을 이용한다. MVC에 대한 내용은 뒤에 하도록 하자.

이처럼 JSP의 등장과 더블어 MVC패턴으로 인해 서블릿의 구현은 잘 하지 않는다. 그러나 서블릿을 알고 있어야한다. 왜? 모든 JSP는 서블릿으로 변환되어 구동되기 때문이다. 즉, 웹서버에서 원하는 데이터는 결국 서블릿이 처리해주는 것이다.

그렇다면 서블릿의 동작을 살펴보자.

처음 웹 서버에서 클라이언트의 데이터의 처리를 Was(웹 어플리케이션 컨테이너)에 요청한다. 컨테이너에서 제일 처음에 데이터 처리를 위한 해당하는 서블릿 클래스를 찾는다. 해당하는 클래스가 존재하지 않으면 서블릿 객체를 생성하게 된다. 이렇게 생성된 서블릿 객체는 메모리에 올려지게 됨으로 그 이후로 계속되는 데이터 처리요청을 스레드 기반으로 지속적으로 서비스 해 줄 수 있게 된다.
마지막으로 모든 요청이 종료되면 해당하는 스레드가 종료하게 된다.

서블릿의 장, 단점에 대해 알아보자
장점
- 스레드 기반이기 때문에 웹 어플리케이션 운영에 효율적
- 자바를 기반으로 하므로 자바 API를 모두 사용가능
- 운영체제나 하드웨어에 영향을 받지 않는다(자바의 장점)

단점
- 비즈니스 로직의 처리와 화면 출력을 위한 처리를 모두 해야한다.
- 프로그래머가 HTML, 자바스크립트, 스타일시트 등 모든 기술을 알고 있어야 한다.

아래는 html로 부터 넘어온 데이터에 대해 get방식으로 처리해주는 서블릿 doGet메서드이다.

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("euc-kr");//요청받은 데이터의 문자를 euc-kr로 인코딩

String name = request.getParameter("name");
String address = request.getParameter("address");

response.setContentType("text/html; charset=euc-kr");//출력할 내용의 타입을 html로 설정하고 euc-kr로 한글이 전달되도록 설정
PrintWriter out = response.getWriter();

out.println("<html><head></head><body>");
out.println("<b>" + name + "</b>");
out.println("<b>" + address + "</b>");
out.println("</body></html>");

out.close();
}
요청과 함께 넘어돈 데이터를 request란 객체를 이용하여 전달받고 적절한 처리를 한뒤 response객체에 출력값을 저정하여 다시 내보내는 과정이다. 이 예제를 잘 이해하고 있어야 한다.

댓글 없음:

댓글 쓰기