JSP

ybong·2022년 2월 23일
0

스크립트언어인 JSP를 알아보자!

JSP란?

  • Java Server Page

먼저 실습!

  • webpp 하위에 jsp 디렉토리를 만듦
    • JSP파일은 webapp에 만들 수 있다
  • JSPX로 새 파일 생성
  • <% %> : 서블릿으로 바뀔 때 어떻게 바뀔 지 결정하는 내용이라는 기호
  • JSP는 JSP 자체가 동작하는 것이 아니라, Servlet으로 바뀌어서 동작한다. 그 때 저 기호는 서블릿으로 바뀔 때 디테일을 알려주기 위한 부분.
  • <%@ : (맨위) 지시자
    • <%@ page ~ %> : 페이지 지시문
  • 지시문 뒤에는 html코드가 보통 나온다.
  • html 안에서 프로그램을 사용할 수 있다. html 안에 java코드가 있다 (스크립틀릿?)
<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>sum10</title>
</head>
<body>

<%
    int total = 0;
    for(int i = 1; i <= 10; i++){
        total = total + i;
    }
%>  <!--서블릿으로 바꿀 때 어떻게 바꿀 지 말해주는 기호-->

1부터 10까지의 합 : <%=total %> <!--응답으로 주는 내용 < % =  out.print(); == < % = % > -->

</body>
</html>

실행하면 이렇게 뜸.

핵심은?

  • JSP는 Servlet으로 바뀐다는 것. 바뀐 서블릿이 실행되는 것이다.
  • JSP가 Servlet으로 바뀔 때 어떻게 바뀔 지 상상하면서 보는 것이 중요하다!

JSP 라이프사이클

  • jsp파일이 실행될 때, 특별한 형태의 서블릿형태로 바뀐다.
  • 톰캣을 사용하게 됐을 때, 톰캣이 jsp를 서블릿으로 바꾸게 된다.
  • 이런식으로
    public void _jspInit() {
      }
    
      public void _jspDestroy() {
      }
    
      public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
          throws java.io.IOException, javax.servlet.ServletException {
    
        .....
    
        try {
          .....
    
          out.write("\n");
          out.write("<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n");
          out.write("<html>\n");
          out.write("<head>\n");
          out.write("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n");
          out.write("<title>sum10</title>\n");
          out.write("</head>\n");
          out.write("<body>\n");
          out.write("\n");
    
    	int total = 0;
    	for(int i = 1; i <= 10; i++){
    		total = total + i;
    	}
    
          out.write("\n");
          out.write("\n");
          out.write("1부터 10까지의 합 : ");
          out.print(total );
          out.write("\n");
          out.write("\n");
          out.write("</body>\n");
          out.write("</html>");
        } catch (java.lang.Throwable t) {
          .....
          }
        } finally {
          _jspxFactory.releasePageContext(_jspx_page_context);
        }
      }
  • jsp파일은 서블릿 소스로 자동으로 컴파일되면서 실행되어 그 결과가 브라우저에 보여진다.

JSP 실행순서

  1. 브라우저가 웹서버에게 JSP에 대한 요청 정보를 전달한다
  2. 브라우저가 요청한 JSP가 최초로 요청했을 경우만 (처음에만 변환)
    1. JSP로 작성된 코드가 서블릿으로, java코드로 변환한다. (java파일 생성)
    2. 서블릿 코드를 컴파일해서 실행가능한 bytecode로 변환한다. (class파일 생성)
    3. 서블릿 클래스를 로딩하고 인스턴스를 생성한다.
  3. 서블릿이 실행되어 요청을 처리하고 응답 정보를 생성한다.

JSP 문법

JSP는 HTML태그와 자바코드를 섞어서 개발할 수 있다.

스크립트 요소의 이해

JSP페이지에서는 선언문, 스크립트릿, 표현식이라는 3가지의 스크립트 요소를 제공한다.

	선언문 - <%! %> : 전역변수 선언 및 메서드 선언에 사용
스크립트릿 - <% %> : 프로그래밍 코드 기술에 사용
	표현식 - <%=%> : 화면에 출력할 내용 기술에 사용

선언문 Declaration

  • <%! ~ %>
  • JSP페이지 내에서 필요한 멤버변수나 메소드가 필요할 때 선언에 사용
...

</head>
<body>

선언한 메서드를 이용해 id 출력 : <%=getId()%>
<%!
    String id = "u001"; //멤버변수 선언
    public String getId() { //메서드 선언
        return id;
    }
%>
</body>
</html>

스크립트릿 Scriptlet

  • <% ~ %>
  • 가장 일반적으로 많이 쓰이는 스크립트 요소
  • 주로 프로그래밍의 로직을 기술할 때 사용
  • 스크립트릿에서 선언된 변수는 지역변수이다. → 서블릿에서 서비스라는 메서드 안에 선언되는 변수들이다.
  • 스크립트릿 안에 있는 것이 응답결과에는 포함되지 않는다!
  • 스크립트릿 쪼개서 사용도 가능 (아래 참고)
...
<body>
<%
    for (int i=1; i<=5; i++) {
%>
<h<%=i%>>Scriptlet Test</h>
<%
    }
%>
</body>
...

표현식 Expression

  • <%= ~ %>
  • JSP페이지에서 웹 브라우저에 출력할 부분을 표현. 즉, 화면에 출력하기 위한 것
  • 스크립트릿 내에서 출력할 부분은 내장객체인 out객체의 print(), 또는 println()메소드를 사용해서 출력

주석 Comment

  • HTML, 자바, JSP주석 모두 사용할 수 있다.

HTML주석

  • <!-- html -->
  • HTML 주석은 서블릿으로 바뀌고 자바코드 실행도 되는데, 브라우저에 띄울 때 주석부분 안뜬다.
  • HTML주석을 사용한 페이지를 웹에서 서비스 할 때 화면에 주석내용이 나오지는 않으나, [소스보기]를 하면 내용이 보인다.

JSP 주석

  • <%-- jsp --%>
  • 주석 자체가 JSP주석이기때문에, 아예 서블릿으로 바뀌지 않는다. (java로 변환되지 않는다)
  • JSP페이지에서만 사용됨.
  • JSP주석은 해당 페이지를 웹 브라우저를 통해 출력 결과로 표시하거나, 웹 브라우저 상에서 소스보기를 해도 표시되지 않는다. 또한 JSP 주석 내에서 실행코드 넣어도 그 코드는 실행되지 않음.

Java 주석

  • // , /* java */
  • JSP가 java로 바뀔때까지는 그냥 바뀐다. 서블릿으로 바뀌지만, 그 이후 실제 자바 실행할 때 주석처리된다.

JSP 내장객체

JSP에는 개발자가 선언하지 않아도 사용할 수 있는, 미리 선언된 변수가 존재한다. 이것이 내장객체!

JSP 내장객체란?

  • JSP를 실행하면 서블릿 소스가 생성되고 실행된다.
  • JSP에 입력한 대부분의 코드는 생성되는 서블릿 소스의 _jspService() 메소드 안에 삽입되는 코드로 생성된다.
  • _jspService()에 삽입된 코드의 윗부분에 미리 선언된 객체들이 있는데, 이 객체들은 JSP에서도 사용이 가능하다.
  • response, request, application, session, out 과 같은 변수들을 내장객체라고 한다.

내장객체의 종류

필요에 따라 내장객체를 사용할 수 있다.

...
<body>
<%
    StringBuffer url = request.getRequestURL();
    out.print("url :" + url.toString());
    out.print("<br>");
%>
</body>
...
profile
study blog

0개의 댓글