ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JSP(JavaServer Pages)란?
    백엔드/서블릿&JSP 2020. 11. 1. 23:13

    JSP란?

    JSP는 동적인 웹서버에서 동적인 페이지를 만들어 주는 서버 사이드 스크립트 언어다.

     

    설명만 들으면 서블릿(Servlet)과 같은 기능을 하는 것처럼 보인다.

     

    실제로 기능적으로는 굉장히 비슷하다.

     

    하지만 아주 큰 차이가 있는데 작성하는 언어의 기반이 다르다는 것이다.

     

    서블릿이 클래스의 형태를 띄고 있고 자바의 형태를 온전히 가져가는데 반해

     

    JSP는 HTML 코드를 기반으로 그 사이에 자바코드를 삽입하는 식으로 만든다.

     

    즉 서블릿은 누가 봐도 자바의 형태고 자바 언어를 쓴다.

     

    하지만 JSP는 HTML 안에 자바 코드를 삽입하는 형식으로 코드를 작성한다.

    JSP의 등장 배경

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    	<form action="TestServlet" method="get">
    		이름: <input type="text" name="name"><br><br>
    		나이: <input type="text" name="age"><br><br>
    		사는곳: <input type="text" name="place"><br><br>
    		<input type="submit" value="전송">
    	</form>
    </body>
    </html>

     

    예를 들어 위와 같은 HTML 페이지가 있다고 생각해보자. 이를 실행하면 다음과 같다.

     

     

    그리고 이름과 나이를 입력하면 아래와 같은 메시지가 뜨게 된다.

     

     

    이와 같이 고객이 입력한 데이터를 받아서 동적으로 결과를 나타내는 페이지를

     

    서블릿으로 작성하면 다음과 같이 코드를 만들어야 한다.

     

    @SuppressWarnings("serial")
    @WebServlet("/TestServlet")
    public class TestServlet extends HttpServlet {
    
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) 
        	throws ServletException, IOException {
            
    		response.setContentType("text/html; charset=UTF-8");
    		PrintWriter out = response.getWriter(); 
    		
    		String name = request.getParameter("name");
    		String age = request.getParameter("age");
    		String place = request.getParameter("place");
    		
    		out.println("<html>");
    		out.println("<head>");
    		out.println("</head>");
    		out.println("<body>");
    		out.println("<p>Hello Java!</p><br>");
    		out.println("<p>당신의 이름은 "+name+"입니다.</p><br>");
    		out.println("<p>당신의 나이는 "+age+"입니다.</p><br>");
    		out.println("<p>당신의 사는곳은 "+place+"입니다.</p><br>");
    		out.println("</body>");
    		out.println("</html>");
    	}
    
    }

     

    그리고 같은 결과물을 보여주는 페이지를 JSP로 구현하면 다음과 같다.

     

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    
    <%! String name; String age; String place; %>
    
    <%
    name = request.getParameter("name");
    age = request.getParameter("age");
    place = request.getParameter("place");
    %>
    
    <p> 당신의 이름은 <strong><%= name %></strong>입니다. </p>
    <p> 당신의 나이는 <strong><%= age %></strong>입니다. </p>
    <p> 당신의 사는 곳은 <strong><%= place %></strong>입니다. </p>
    </body>
    </html>

     

    보기만해도 코드의 복잡성과 길이의 차이가 많이 난다.

     

    서블릿이든 JSP든 동적인 웹페이지를 단독으로 만들어줄 수 있다.

     

    하지만 연산 결과를 표현할 때 서블릿은 너무 많은 수고가 든다.

     

     

    서블릿은 자바 기반이므로 결과물 출력을 위해서 HTML태그를 일일이 출력해야 페이지를 만들 수 있다.

     

    반면 JSP는 HTML 태그 사이에 자바 코드를 끼워 넣는 것이기 때문에 상대적으로 결과물 표현 코드가 짧다.

     

    이는 단순히 코드의 길이 뿐 아니라 오타의 가능성도 줄여주고 더 정확한 코드 구현을 도와준다.

    JSP의 동작원리

    위와 같은 코드만 보면 JSP는 자바 언어로 쓰인 서블릿과는 너무나 달라보인다.

     

    하지만 결국 JSP도 서블릿 컨테이너를 통해 실행되고 연산 과정을 거쳐서 동적인 페이지를 만들어준다.

     

    이때 JSP를 서블릿 컨테이너로 실행될 수 있도록 만들어주는 것이 JSP 컨테이너다.

     

     

    클라이언트가 JSP 파일을 요청하면 해당 요청은 JSP 컨테이너로 전달된다.

     

    그리고 컨테이너는 요청에 맞는 JSP 파일을 서블릿 컨테이너에서 돌릴 수 있도록 class 파일로 변경한다.

     

    그리고 이 클래스 파일을 서블릿 컨테이너에 넘겨주게 된다.

     

    그리고 그 이후부터 class로 변환된 JSP 파일은 서블릿과 동일하게 취급받고 요청을 처리하고 반환한다.

     

    겉보기에 JSP는 서블릿과는 굉장히 다른 모습처럼 보인다.

     

    하지만 위의 처리 과정에서도 볼 수 있듯이 결국 JSP나 서블릿이나 최종적으로 서버 내에서

     

    처리하는 과정은 거의 비슷하다고 볼 수 있다.

    '백엔드 > 서블릿&JSP' 카테고리의 다른 글

    세션과 쿠키(Session과 Cookie)  (0) 2021.01.07
    javax.servlet.http 패키지  (0) 2021.01.07
    javax.servlet 패키지  (0) 2021.01.06
    JSP 기초 문법  (0) 2020.11.02
    서블릿(Servlet)이란?  (0) 2020.10.30
Designed by Tistory.