본문으로 바로가기

JSP 란?

category Back-End/JSP 2018. 9. 17. 22:14

JSP는 Java Server Page의 약자로 동적인 웹페이지를 만드는 프로그래밍 기술이다.


Servlet도 같은 목적이지만 방법에 있어 다르다.


Servlet은 .java확장자를 갖는 자바파일이다. 웹브라우저에 요청이 있을때 doGet이나 doPost등의 메소드를 통해 보여줄 웹페이지의 html코드를 동적으로 만들어 보내준다.


하지만 이 방법은 이전 포스트에서 얘기했던것처럼 웹페이지 규모가 커질수록 코드가 복잡해진다.


그에 비해 JSP는 .jsp 확장자를 갖는 파일로, html코드 내에 자바코드를 삽입하는 것이다. 즉 Servlet과는 구현방법이 반대이다. 하지만 페이지를 만들어내는데에 있어 Servlet으로 하는 방법보단 훨씬 간단하게 작업할 수 있다.


JSP의 동작 방식은 아래와 같다.


1) 웹브라우저에서 example.jsp 요청

2) WAS의 JSP컨테이너가 JSP파일을 Serlet으로 변환 (example.jsp -> example_jsp.java)

3) 컴피일 (example_jsp.java -> example_jsp.class)

4) example_jsp을 WAS의 서블릿 컨테이너에 적재, 요청종류에 따라 service->doGet, doPost 실행

5) doGet 또는 doPost의 응답에 따른 html페이지가 웹브라이저에 보여짐


중요한것은 jsp도 결국은 Servlet으로 바뀐다는 것이다.


예를들어(아직 자바코드는 없지만... 그냥 예를 들어서..) 아래와 같은 Hello.jsp 파일이 있다.

 

1
2
3
4
5
6
<html>
    <head>
        <title>안녕</title>
    </head>
    <body>안녕하세요</body>
</html>
cs


이 jsp 파일은 2번 과정을 거쳐

 

1
2
3
4
5
6
7
8
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html");
        resp.getWriter().append("<html>")
                        .append("<head><title>안녕</title></head>")
                        .append("<body>")
                        .append("안녕하세요");
                        .append("</body>");
}
cs


이렇게 바뀌는 것이다.


그럼, JSP페이지에 어떻게 자바코드를 섞어 쓰는지 그 방법을 살펴보자.



1. JSP 파일 생성

이전 포스트에서 얘기했던대로, 컨텍스트패스는 프로젝트내의 WebContent 디렉토리를 가리키고 있다. JSP파일은 이 WebContent 디렉토리에 생성한다.


생성 후 아래와 같이 코딩한다.

ex) Hello.jsp

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%!
    String str = "출력되는 문자열";
    int count = 5;
%>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
        <title>Insert title here</title>
    </head>
    <body>
        <%
            for(int i=1;i<=count;i++)
            {
                out.append("<h1>").append(str).append("</h1>");
            }
        %>    
    </body>
</html>
cs

 


 



코드에 보이는 <% %>가 서버측에서 처리될 코드들이다.


1) 지시자 : <%@ %> : jsp페이지 속성


2) 주석 : <%-- --%>

<!-- -->로 기술하는 html주석은 html페이지에 포함되기떄문에 페이지에서 소스보기로 볼수있지만 jsp주석은 WAS에서 미리 걸러지기 때문에 응답되는 html문서에 포함이 안됨


 3) 선언 : <%! %> : 변수메소드 선언


4) 표현식 : <%= %> : 결과값 출력


5) 스크립트릿 : <% %> : JAVA코드


6) 액션태그 : <jsp:action> </jsp:action> : 자바빈 연결


위와 같이 여러 종류의 태그들이 있다.

 

위 페이지에 보이는 out은 JSP 내장객체로, 웹브라우저로 출력될 내용을 기술할 수 있는데 나중에 자세히 설명하겠다.


위와 같이 코딩하면 웹브라우저에 <h1>str변수의내용</h1>이 출력될 것이다.


그리고 반복문에 따라 위 내용이 5번이 출력될 것이다.


확인하기 위해 웹브라우저에 http://localhost:8080/컨텍스트명(프로젝트명)/Exam.jsp 입력 후 접속해보자.

보는 것과 같이 "출력되는 문자열"이 5번 출력됐음을 알 수 있다. 위 페이지의 소스를 확인해보자.



위와같이 <%%>의 자바코드들은 전부 처리되어 순수 html코드만 남아있는 것을 알 수 있다.


즉, Exam.jsp 파일이 JSP컨테이너에 의해 Exam_jsp.java로 바뀌고, 컴파일되어 WAS의 서블릿 컨테이너에 적재된 후 이 Exam_jsp서블릿이 우리가 요청한 것을 처리해 위와 같은 html페이지를 응답해준 것이다.


댓글을 달아 주세요

  1. 11 2019.11.29 17:05

    감사합니당!