Web언어/JSP

[ JSP ] JSP의 역할

IT록흐 2021. 6. 20. 09:48
반응형

 

 

 

JSP는 Java Server Pages의 줄임말이다.

 

 

한마디로 Java Server용 페이지라는 의미다. 대표적인 Java 서버에는 '톰캣'이 있다. 톰캣은 JDK를 사용하여 '서블릿'을 실행한다. 서블릿은 서버의 조각이라는 의미로 JDK가 프로그램 실행시, 필요한 클래스를 동적로딩하는 원리를 응용하여 서버에 적용시킨 개념이다.

 

 

구체적인 내용은 이전 포스팅에 정리해 놓았다.

 

[ JSP ] Servlet 이란?

Servlet이란 Server Application Let의 줄임말이다. Let은 조각을 의미하니 서버의 조각을 Servlet이라고 한다. Servlet은 왜 필요할까? 우선 서버의 필요성부터 알아보자. 서버(Server)란? 서버는 'Request(요청..

lordofkangs.tistory.com

 

 

한마디로 JAVA 서버는 JDK를 활용하여 요청(Request)에 따라 서블릿을 통하여 적절한 반응(Response)를 하는 것이다. 그러므로 우선, 서버는 요청을 분석해야한다. 요청을 분석하여 어떤 작업(서블릿)이 필요한지를 파악해야하기 때문이다.

 

그러므로 요청(Request)는 JAVA 언어로 이루어져야 한다. 하지만 요청을 보내는 쪽은 웹브라우저다. 웹브라우저는 JAVA 언어를 모른다. HTML, CSS, JAVASCRIPT 가 웹브라우저가 아는 언어이다.

 

 

 

 

Request 시, HTML 코드를 JAVA 코드로

Response시, JAVA 코드를 HTML 코드로

바꾸어주어야한다.

 

 

이때 필요한 페이지가 JSP이다. JSP는 HTML 코드 베이스에 JAVA 코드를 포함시키는 방법으로 작성한다. 하지만 서버는 JAVA가 베이스가 되어야 이해할 수 있다. 그럼에도 HTML 코드를 베이스로 두는 이유는 개발하는 측면에서 더 효율적이기 때문이다.

                               .
                               .
                               .

request.setAttribute("tomcatUrl", "https://tomcat.apache.org/");
request.setAttribute("tomcatDocUrl", "/docs/");
request.setAttribute("tomcatExamplesUrl", "/examples/");

      out.write("\r\n");
      out.write("<!DOCTYPE html>\r\n");
      out.write("<html lang=\"en\">\r\n");
      out.write("    <head>\r\n");
      out.write("        <meta charset=\"UTF-8\" />\r\n");
      out.write("        <title>");
      out.print(request.getServletContext().getServerInfo() );
      out.write("</title>\r\n");
      out.write("        <link href=\"favicon.ico\" rel=\"icon\" type=\"image/x-icon\" />\r\n");
      out.write("        <link href=\"tomcat.css\" rel=\"stylesheet\" type=\"text/css\" />\r\n");
      out.write("    </head>\r\n");
      out.write("\r\n");
      out.write("    <body>\r\n");
      out.write("        <div id=\"wrapper\">\r\n");
      out.write("            <div id=\"navigation\" class=\"curved container\">\r\n");
      out.write("                <span id=\"nav-home\"><a href=\"");
      out.write((java.lang.String) org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate("${tomcatUrl}", java.lang.String.class, (javax.servlet.jsp.PageContext)_jspx_page_context, null));
      out.write("\">Home</a></span>\r\n");

                                 .
                                 .
                                 .

 

 

한눈에 보아도 JAVA 코드 안에 HTML을 넣었을 때, 코드가 난잡해짐을 알 수 있다. 개발자가 이와같은 코드를 짜는 일을 엄청난 수고임을 알 수 있다. 그러므로 HTML 코드 기반에 서버의 동적수행이 필요한 부분을 JAVA언어로 작성하여, 개발자가 손쉽게 페이지를 작성할 수 있도록 고안한 것이 JSP이다.

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import= "java.io.PrintWriter" %>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Start JSP!</title>
</head>
<body>

<!-- JAVA 코드 -->
<% 
	PrintWriter result = response.getWriter();
	for(int i =0 ;i<10;i++){
		result.println(i+"<br/>");
	}

%>

</body>
</html>

 

 

이처럼 HTML을 이용하여 간단히 코드를 짤 수 있다. JSP는 HTML 코드를 기반으로 하기 때문에, JSP 요청이 들어오면 이를 JAVA 언어로 바꾸어주어야 한다. 이 과정은 서버(Server) 안에서 일어난다.

 

JSP 파일 => JAVA 파일

 

 

 

 

웹서버 라이브러리 안에는 API로 jasper라는 이름의 JAR 파일을 갖고 있다. 해당 API는 웹서버가 요청(Request)으로 들어온 JSP 코드의 구문을 분석하고 JAVA 파일로 바꿀 때 사용된다. IDE나 편집기로 JSP 코드를 작성하고 톰캣과 연동하여 실행시키면 JSP의 JAVA 파일과 컴파일 된 CLASS 파일이 생성된다.

 

 

 

이렇게 JAVA언어로 바뀌면 웹서버가 해석할 수 있는 코드가 된다. 서버는 컴파일된 Class파일을 JDK로 실행하여 요청에 따라 적절한 반응을 할 수 있도록 한다.

 

out.write((java.lang.String) org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate("${tomcatUrl}", java.lang.String.class, (javax.servlet.jsp.PageContext)_jspx_page_context, null));
      out.write("\">Home</a></span>\r\n");
      out.write("                <span id=\"nav-hosts\"><a href=\"");
      out.write((java.lang.String) org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate("${tomcatDocUrl}", java.lang.String.class, (javax.servlet.jsp.PageContext)_jspx_page_context, null));
      out.write("\">Documentation</a></span>\r\n");
      out.write("                <span id=\"nav-config\"><a href=\"");
      out.write((java.lang.String) org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate("${tomcatDocUrl}", java.lang.String.class, (javax.servlet.jsp.PageContext)_jspx_page_context, null));
      out.write("config/\">Configuration</a></span>\r\n");
      out.write("                <span id=\"nav-examples\"><a href=\"");
      out.write((java.lang.String) org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate("${tomcatExamplesUrl}", java.lang.String.class, (javax.servlet.jsp.PageContext)_jspx_page_context, null));
      out.write("

 

해당 코드는 톰캣 서버를 실행하고 http://localhost:8080을 주소로 넣으면 나오는 index.jsp 파일이다. 해당 index.jsp가 실행되면 웹서버에서는 jasper에 의해 index_jsp.java파일로 변환되고 jdk에 의해 컴파일되어 index_jsp.class 파일이 생성된다. 그 후, 클래스 파일이 실행되어 그 결과를 Html 코드로 웹브라우저에게 반환한다.

 

그러므로 웹브라우저와 웹서버간의 언어장벽을 무너뜨리는 역할을 하는 것이 바로 JSP이다. JSP를 사용한다면 HTML과 JAVA 코드를 적절히 섞어 서버에게 적절한 작업을 요청할 수 있다.

 

 


 

정리

 

1. 개발자가 웹브라우저에서 웹서버로 요청을 쉽게하기 위해 개발된 것이 JSP이다.

2. 웹서버는 jasper API를 이용하여 JSP코드를 JAVA 코드로 변환한다.

 

 

 

 

 

 

반응형