부스트코스 교육내용(출처)을 바탕으로
학습 자료 추가하였습니다.
< JSP란? >
들어가기 전에
마이크로소프트의 ASP(Active Server Pages)와 같은 스크립트 형태의 개발 방법이 인기를 얻게 되면서, 자바 진영에서도 대항하기 위해서 JSP를 발표하게 됩니다.
학습 목표
- jsp가 무엇인지 이해한다.
- 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 라이프싸이클 >
들어가기 전에
WAS는 웹 브라우저로부터 JSP에 대한 요청을 받게 되면, JSP코드를 서블릿 소스코드로 변환한 후 컴파일 하여 실행되게 됩니다.
서블릿으로 컴파일되어 실행될 때 상황에 따라서 어떤 메소드들이 실행되는지 잘 알아야, JSP를 알맞게 작성할 수 있습니다.
학습 목표
- jsp의 라이프 사이클을 이해한다.
- 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의 실행순서
- 브라우저가 웹서버에 JSP에 대한 요청 정보를 전달한다.
- 브라우저가 요청한 JSP가 최초로 요청했을 경우만 JSP로 작성된 코드가 서블릿으로 코드로 변환한다. (java 파일 생성)
- 서블릿 코드를 컴파일해서 실행가능한 bytecode로 변환한다. (class 파일 생성)
- 서블릿 클래스를 로딩하고 인스턴스를 생성한다. 이를 JSP엔진이 한다.
- 서블릿이 실행되어 요청을 처리하고 응답 정보를 생성한다.
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에서 자바코드는 어떻게 입력을 하는지, 어떤 결과를 출력하려면 어떤 것을 사용해야 하는지에 대해서 알아보도록 하겠습니다.
학습 목표
- JSP에서 선언문을 이용해 필드와 메소드를 선언할 수 있다.
- JSP에서 자바 코드를 입력하는 방법을 알 수 있다.
- JSP에서 변수값을 출력할 수 있다.
- 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에서 내장객체를 사용할 수 있는지,
그리고 이 내장 객체를 어떻게 사용해야 하는지에 대해서 알아보도록 하겠습니다.
학습 목표
- 내장객체가 무엇인지 이해한다.
- 내장객체 종류를 알고 이용할 수 있다.
핵심 개념
- 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>");
'○ WEB > 19.07 BoostCourse_DB연결 웹앱' 카테고리의 다른 글
3. scope란? / page scope / request scope / session scope (0) | 2019.07.15 |
---|---|
2. redirect / forward / servlet & jsp 연동 (0) | 2019.07.14 |
[DB연결 웹앱 JS] 2. window 객체 / DOM / querySelector / Browser Event, Event object, Event handler / ajax / 디버깅 (0) | 2019.07.12 |
[DB연결 웹앱 JS] 1. JS / var, let, const / 연산자 / 문자열 / 함수 선언문, 함수 표현식 / 함수호출과 스택 (0) | 2019.07.12 |
[웹기초 BE_Servlet] 서블릿과 JSP란? 차이점은? (0) | 2019.07.11 |