본문 바로가기
○ WEB/19.07 BoostCourse_DB연결 웹앱

1. JSP / 라이프사이클 / 문법 / 내장객체

by 0ver-grow 2019. 7. 13.
반응형

부스트코스 교육내용(출처)을 바탕으로

학습 자료 추가하였습니다.

< JSP란? >

들어가기 전에

마이크로소프트의 ASP(Active Server Pages)와 같은 스크립트 형태의 개발 방법이 인기를 얻게 되면서, 자바 진영에서도 대항하기 위해서 JSP를 발표하게 됩니다.

 

학습 목표

  1. jsp가 무엇인지 이해한다. 
  2. jsp의 간단한 사용법을 알아본다. 

 

핵심 개념

  • jsp (java server page)

 

JSP란? 출처

JavaServer Pages 의 약자
HTML 코드에 JAVA 코드를 넣어 동적웹페이지를 생성하는 웹어플리케이션 도구이다.
JSP 가 실행되면 자바 서블릿(Servlet) 으로 변환되며 웹 어플리케이션 서버에서 동작되면서 필요한 기능을 수행하고
그렇게 생성된 데이터를 웹페이지와 함께 클라이언트로 응답한다.

서블릿이란, 웹페이지를 동적으로 생성하기 위한 서버사이드프로그램
웹 어플리케이션 서버에서 컴파일되고 동작한다.

 

JSP 등장 배경

  • 마이크로소프트에서 ASP(Active Server Page)라는 쉽게 웹을 개발할 수 있는 스크립트(script) 엔진을 발표함 (1998년
  • 1997년에 발표된 서블릿은 ASP에 비하여 상대적으로 개발 방식이 불편함

html코드가 다 서블릿에서 out.print안에 문자열로 들어가야하기에 html코드가 굉장히 많아지면 서블릿 개발이 불편해진다. 응답 결과에 html 코드같은 걸 넣기가 불편

  • ASP에 대항하기 위하여 1999년 썬마이크로시스템즈에서 JSP를 발표
  • JSP는 실제로 서블릿 기술을 사용

JSP는 항상 서블릿으로 바뀌고 바뀐 서블릿이 실행된다. 서블릿의 라이프사이클과 똑같은 방식으로 실행된다.

 

실습을 해보자

이클립스를 실행시키고 기존의 firstweb폴더 > WebContent 폴더 안에 jsp폴더를 만들고 sum10이라는 이름의 jsp파일을 만들어주자.

 

JSP가 어떻게 서블릿으로 바뀔지 생각하자

JSP는 JSP자체 동작이 아닌 서블릿으로 바뀌어서 동작한다.

<%같은 기호는 서블릿으로 바뀌었을 때 어떻게 동작할지를 알려주는 기호들이다.

 

< JSP 라이프싸이클 >

들어가기 전에

WAS는 웹 브라우저로부터 JSP에 대한 요청을 받게 되면, JSP코드를 서블릿 소스코드로 변환한 후 컴파일 하여 실행되게 됩니다.

서블릿으로 컴파일되어 실행될 때 상황에 따라서 어떤 메소드들이 실행되는지 잘 알아야, JSP를 알맞게 작성할 수 있습니다.

 

학습 목표

  1. jsp의 라이프 사이클을 이해한다. 
  2. jsp를 이용해서 init, destroy 메소드를 이용할 수 있다. 

 

핵심 개념

  • jsp라이프 사이클

위에서 작성한 sum10.jsp파일이 위치한 폴더로 들어간 뒤 확인해보면 sum10_jsp.java로 수정된 것을 확인할 수 있다.

이를 열어보면 하단처럼 java로 표현됐단 것을 알 수 있다.

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);
    }
  }

스크립틀릿 부분이라고 java 코드를 입력한 부분은 다음과 같이 입력

int total = 0;
for(int i = 1; i <= 10; i++){
    total = total + i;
}

//표현식으로 출력한 부분
out.print(total );

이를 통해 sum10_jsp.java는 서블릿 소스로 자동으로 컴파일 되며 실행되어 결과가 브라우저에 보여진단 것을 알 수 있다.

 

JSP의 실행순서

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

lifecycle.jsp

<%@ 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>Insert title here</title>
</head>
<body>
hello
<%
	System.out.println("_jspService()");
%>

<!-- 
하단의 선언식은 기존처럼 service메서드(호출)에서 생성되는 것이 아니라 init 혹은 destroy메서드에 코드들이 만들어지게됨 
서비스 메서드가 아니라 필드나 메서드로 지정하고싶을 때 사용하는 선언식
-->

<%!
public void jspInit() {
	System.out.println("jspInit()!");
}

public void jspDestroy() {
	System.out.println("jspDestroy()");
}
%>

</body>
</html>

 

<JSP 문법 >

들어가기 전에

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

JSP에서 자바코드는 어떻게 입력을 하는지, 어떤 결과를 출력하려면 어떤 것을 사용해야 하는지에 대해서 알아보도록 하겠습니다.

 

학습 목표

  1. JSP에서 선언문을 이용해 필드와 메소드를 선언할 수 있다.
  2. JSP에서 자바 코드를 입력하는 방법을 알 수 있다.
  3. JSP에서 변수값을 출력할 수 있다.
  4. JSP에서 주석문을 작성할 수 있다.

핵심 개념

  • 선언문(Declaration)
  • 스크립트릿(Scriptlet)
  • 표현식(Expression) 
  • 주석(Comment) 

스크립트 요소의 이해

  • JSP 페이지에서는 선언문(Declaration), 스크립트릿(Scriptlet), 표현식(Expression) 이라는 3가지의 스크립트 요소를 제공

선언문(Declaration) - <%! %> : 전역변수 선언 및 메소드 선언에 사용

스크립트릿(Scriptlet) - <% %> : 프로그래밍 코드 기술에 사용

표현식(Expression) - <%=%> : 화면에 출력할 내용 기술에 사용

 

 

스크립트 요소의 이해

 

 선언문

  • 선언문 : <%! %>
  • 선언문은 JSP 페이지 내에서 필요한 멤버변수나 메소드가 필요할 때 선언해 사용하는 요소
  • 선언문의 문법
  • <%! 문장 %>

exam1.jsp

<%@ 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>Insert title here</title>
</head>
<body>

id : <%=getId() %>
</body>
</html>

<%!
    String id = "u001"; //멤버변수 선언
    public String getId( ) { //메소드 선언
        return id;
    }
%>

 

스크립트릿

  • 스크립트릿 : <% %>
  • 가장 일반적으로 많이 쓰이는 스크립트 요소
  • 주로 프로그래밍의 로직을 기술할 때 사용
  • 스크립트릿에서 선언된 변수는 지역변수
  • 스크립트릿의 문법
  • <% 문장%>

 

exam02.jsp

<%@ 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>Insert title here</title>
</head>
<body>

<%
for(int i = 1; i <= 5; i++){
%>
<H<%=i %>> 아름다운 한글 </H<%=i %>>
<%
}
%>
</body>
</html>

 

html 소스보기 결과

<!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>Insert title here</title>
</head>
<body>


<H1> 아름다운 한글 </H1>

<H2> 아름다운 한글 </H2>

<H3> 아름다운 한글 </H3>

<H4> 아름다운 한글 </H4>

<H5> 아름다운 한글 </H5>

</body>
</html>

서블릿으로 변환된 코드 주요부분

for(int i = 1; i <= 5; i++){

      out.write('\n');
      out.write('<');
      out.write('H');
      out.print(i );
      out.write("> 아름다운 한글 </H");
      out.print(i );
      out.write('>');
      out.write('\n');

}

표현식(Expression)

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

 

주석(Comment)

  • JSP페이지에서 사용할 수 있는 주석
  • HTML주석, 자바주석, JSP주석

 

1. HTML 주석

  • HTML 주석은 <!--로 시작해서 -->로 끝나는 형태

 

2. JSP주석

  • JSP 페이지에서만 사용되며 <%--로 시작해서 --%>로 끝나는 형태

 

3. 자바주석

  • 자바 주석은 //, /**/을 사용해서 작성.
  • 스크립트릿이나 선언문에서 사용되는 주석으로, 자바와 주석 처리 방법이 같음

< JSP 내장객체 >

들어가기 전에

JSP에서는 개발자가 선언하지 않아도, 사용할 수 있는 미리 선언된 변수가 존재합니다.

이를 내장객체라고 합니다.

개발자가 선언하지 않았음에도 어떻게 JSP에서 내장객체를 사용할 수 있는지,

그리고 이 내장 객체를 어떻게 사용해야 하는지에 대해서 알아보도록 하겠습니다.

 

학습 목표

  1. 내장객체가 무엇인지 이해한다. 
  2. 내장객체 종류를 알고 이용할 수 있다. 

핵심 개념

  • request
  • response
  • out
  • application
  • page
  • session

JSP 내장 객체란?

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

내장 객체의 종류

ImplicitObjects.jsp

<%@ 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>Insert title here</title>
</head>
<body>
<%
    StringBuffer url = request.getRequestURL();

    out.println("url : " + url.toString());
    out.println("<br>");
%>
</body>
</html>

ImplicitObjects_jsp.java

  public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
      throws java.io.IOException, javax.servlet.ServletException {

    ......

    javax.servlet.jsp.JspWriter _jspx_out = null;

    ......

    out = pageContext.getOut();
    ......


        StringBuffer url = request.getRequestURL();

        out.println("url : " + url.toString());
        out.println("<br>");
반응형