JSP 총정리

Minkyeong Kim·2021년 10월 20일
0

[boostcourse] Web-Backend

목록 보기
11/55

JSP 개념

  • Java Server Page
  • .jsp 확장자로, html 문서 내부에 java코드를 사용할 수 있도록 해준다
  • 모든 JSP는 서블릿으로 바뀌어서 실행됨

JSP 등장 배경

  • 마이크로소프트에서 ASP(Active Server Page)라는 쉽게 웹을 개발할 수 있는 스크립트 엔진을 발표
  • 1997년에 발표된 서블릿은 ASP에 비해 상대적으로 개발 방식이 불편함
    • html코드들이 out.println()로 한줄한줄 문자열로 입력되어야 하기 때문에 html 파일이 많아지면 복잡해짐ㅠ
  • ASP에 대항하기 위하여 1999년 썬마이크로시스템즈에서 JSP를 발표
  • JSP는 실제로 서블릿 기술을 사용

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>
<%
	int total=0;
	for(int i=1;i<=10;i++){
		total = total+i;
	}
%>
1부터 10까지의 합은? <%=total %>
</body>
</html>

문법

  • <%@ page ...> : page 지시자, language에 java언어를 사용함을 명시, content type, encoding 정보 등을 저장

  • <%! public void ...{} %>: 선언문, 메서드나 필드 선언 시 Service 메서드 외부(클래스 바디)에 코드 작성 가능

  • <% 자바 코드 %>: Scriptlet, 자바 코드를 입력할 수 있음, jsp-> java 변환 시 Service함수 내부에 작성됨

  • <%= 결과값%>: 표현식, Scriptlet의 결과를 response하기 위함, 기존 Servlet 실습에서 out.print();과 같은 역할

  • 주석 Comment
    총 세가지 주석 사용 가능

    1. HTML 주석: <!-- Comment -->
      브라우저에서 소스보기 하면 내용 표시됨
    2. JSP 주석: <%-- Comment --%>
      자바로 변환될 때 사라짐
    3. JAVA 주석 //comment, /*comment*/
      자바로 변환될 때는 유지, Servlet으로 실행될 때는 사라짐
  • for문을 돌리는 방법

<%@ 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 %>> MYMELODY!</H<%=i %>>
<%
		
	}
%>
</body>
</html>

JSP 작동 원리

간단하게 표현하면
1. jsp 파일을 생성해 서버에서 실행하면
2. workspace/.metadata에 속하는 폴더에 jsp 파일의 내용을 java 파일로 변환, jsp에서 작성한 내용은 _jspService() 함수에 저장된다
3. java 파일이 서블릿 소스로 자동 컴파일되며 실행된 결과가 브라우저에 출력
이렇게 세 단계로 나뉠 수 있다.

JSP로 요청이 들어왔을 때

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

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()");
%>
<%!
	public void jspInit(){
		System.out.println("jspInit()");
}

	public void jspDestroy(){
		System.out.println("jspDestroy()!");
	}
%>
</body>
</html>
  • Init, Service, Destroy함수들이 기존 Servlet의 함수와 같은 방식으로 실행됨

내장 객체

  • JSP를 실행하면 서블릿 소스가 생성되고 실행됨

  • JSP에 입력한 대부분의 코드는 생성되는 서블릿 소스의 _jspService() 메소드 안에 삽입되는 코드로 생성

  • _jspService() 함수에 삽입된 코드의 윗부분에 미리 선언된 객체들이 있는데, 해당 객체들은 jsp에서도 사용 가능

  • response, request, application, session, out과 같은 변수가 해당됨

  • 다음과 같이 Scriptlet에서만 접근 가능 (_jspService()에 선언되어 있으므로)

<%@ 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());
%>
</body>
</html>

0개의 댓글