- JSP란 HTML에 Java 코드를 삽입하여 동적인 웹페이지
를 만들 수 있는 기술이다.
- MVC패턴에서 사용자에게 보여질 View
를 나타낸다
- JSP로 작성된 프로그램은 JVM 상에서 처리되기 위해 서블릿 컨테이너(Tomcat)에 의해 Servlet
으로 변환되어 필요한 작업을 수행한 뒤 그 결과로 순수 HTML
을 만들어낸다.
배경
- servlet의 단점을 보완
하고자 만든 서블릿 기반의 스크립트
기술. Servlet
만을 이용해서도 웹프로그래밍을 할 수 있지만 인터페이스(View)를
구현하기위해 너무 많은 코드가 필요하였다. 따라서 Servlet을 작성하지 않고도 간편하게 웹프로그래밍을 구현할 수 있게 만든것이 JSP이다. (JSP는 웹 컨테이너에 의해서 Servlet으로 다시 변환되어 실행됨)
아래의 코드를 보면 HTML
을 작성하기위해 Servlet
을 이용하면 너무나도 불편한 것을 알 수 있다.
xpublic class HelloServlet extends HttpServlet {
public void doGet(HttpServletRequest req,HttpServletResponse res)
throws ServletException,IOException {
res.setContentType("text/html;charset=UTF-8");
PrintWriter out = res.getWriter();
out.println("<HTML>");
out.println("<BODY>");
out.println("Hello World!!");
out.println("</BODY>");
out.println("</HTML>");
out.close();
}
}
그 때문에 아래와 같이 HTML
안에 Java
코드를 삽입하는 형태의 JSP가 등장하게 되었다.
xxxxxxxxxx
<%import="java.util.Calendar"%>
<%page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%
String day = String.format("%tF", Calendar.getInstance());
%>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
Hello world~~ (<%=day %>)
</body>
</html>
참고로 실행결과는 아래와 같다.
장점
- Java의 기능을 그대로 사용할 수 있다(API등)
- Java 기반이기 때문에 플랫폼에 독립적이다.
- JSP파일이 Servlet으로 변환되는 과정은 오직 한번만 수행되므로 같은 페이지에 수 많은 사용자의 요청이 있더라도 처리속도는 거의 유지된다. JSP 페이지의 코드가 변경된다면 Servlet으로의 변환과정을 다시한번 진행하게 된다.
동작 과정
1. JSP페이지 요청이 들어온다
2. JSP파일에 대한 Servlet객체가 메모리에 존재하는지 우선 확인한다. Servlet이 있다면 그것을 재활용하여 Thread만을 생성하여 처리하고, Servlet이 없다면 3번으로 진행한다.
3. JSP Container(Tomcat)가 JSP 페이지를 찾아 JSP Container(Tomcat)이 JSP페이지를 Servlet으로 변환한 후 컴파일하여 실행한다.
4. Servlet으로 변환된 JSP페이지를 확인하면 html 코드들은 servlet의 코드로 변환된 것을 확인할 수 있다.
5. 실행결과를 Client에게 돌려준다. (JSP 코드 등은 서버에서 처리가 된 후 HTML파일을 응답하므로 소스보기를 해도 JSP 코드는 보이지 않는다.)
동작 과정 확인
위 그림과 같이 간단한 JSP 파일을 생성하였다.
생성한 JSP파일을 실행한 뒤 소스 보기를하면 Html 문서가 보인다. 어떠한 과정에 의해 변환이 되는 것일까. 앞서 말했듯 JSP파일을 사용자에게 보여주기 위해서는 이를 HTML로 전환하는 과정이 필요하다. HTML 파일로 전환하기 위해서는 WebContainer(Tomcat)에서 JSP를 Servlet으로 변환한 뒤 컴파일하고 실행함으로써 JSP 코드들을 HTML로 변환해주어야 한다.
Tomcat의 JSP 경로로 이동하면 앞서 생성한 hello.jsp파일이 hello_jsp.java 파일로 변환 되었고 그것을 컴파일한 결과인 hello_jsp.class가 같이 보인다.
servlet으로 변환된 hello_jsp.java 파일을 메모장으로 열어본다. 그럼 앞서 생성한 jsp파일이 servlet 클래스 파일로 변환된것을 볼 수 있다. 이와 같이 JSP파일은 Servlet으로 변환되어 실행된다.
Servlet과 JSP
- JSP를 이용하여 서버를 동작하게 할 수 있다면 결국 JSP와 Servler의 차이는 무엇이지?
맞다 결국에 JSP와 Servlet은 동일한 역할을 할 수있다. 하지만 JSP로 모든 로직을 처리하게 된다면 안좋은 결과를 낳게 된다.
Model 1
- 바로 위에서 말했듯이 JSP로도 Servlet이 하는 역할을 충분히 해낼 수 있다. 따라서 Model1은 JSP
가 요청과 응답(Controller + View)
을 모두 담당하고 DB 접근은 자바 빈클래스로만 하도록한 형태를 말한다.
장점 | 단점 |
---|---|
쉽다 | 프레젠테이션 로직과, 비즈니스 로직이 혼합되어 혼잡. |
개발 속도가 빠르다 | JSP 코드가 복잡해지며 유지보수가 힘들어진다. |
Model 2
- Controller(Servlet)
을 통해 View(JSP)
와 비지니스로직
이 분리된 형태이다.
장점 | 단점 |
---|---|
유지보수 및 확장이 용이하다. | 구조 설계를 위한 시간으로 개발기간이 증가 |
개발자와 디자이너의 분업이 용이하다. | 개발자들이 구조에대한 이해가 필요해진다. |
그림 출처
- https://www.javaworld.com/article/2076557/understanding-javaserver-pages-model-2-architecture.html
참고
'Web > JSP,Servlet' 카테고리의 다른 글
JSP,Servlet - JDBC 기초 사용법 (0) | 2019.03.25 |
---|---|
JSP - JSP태그와 내부객체 , Java Bean (0) | 2019.03.25 |
Servlet - Servlet의 데이터 공유 (1) | 2019.03.25 |
Servlet - Servlet 초기화 파라미터 사용방법(web.xml, 어노테이션) (0) | 2019.03.25 |
Servlet - Servlet 개념 (0) | 2019.03.24 |