JSP(Java Server Page)

웅평·2024년 5월 13일

JSP(Java Server Page)란?

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

JSP 동작 과정

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

최초 jsp 요청하면 jsp file로 변경될 때 jsp가 servlet으로 변경됨

JSP 의 스크립트 요소

선언 : 멤버 변수 선언이나 메소드르 선언하는 영역

// 형식
<%! 멤버변수와 method 작성%>

스크립트릿 : Client 요청 시 호출되는 영역으로 Servlet 으로 변환 시 service() method에 해당되는 영역이며 request, response에 관련된 코드를 구현하는 곳

// 형식
<%
이곳에 자바코드 작성
%>

표현식 : 데이터를 브라우저에 출력할 때 사용

  • 문자열 뒤에 세미콜론 작성하면 안됨
  • <%= 문자열 %> 이랑 <% out.println(문자열); %> 이랑 같은 표현임
// 형식
<%= 문자열 %>

주석 : 코드 상에 부가 설명을 작성

<!-- HTML 주석 -->
<%-- JSP 주석 -->
<%
	// JAVA 주석
%>

JSP 의 지시자(Directive)

  1. page 지시자
  • 컨테이너에게 현재 JSP 페이지를 어떻게 처리할 인지에 대한 정보를 제공
  1. include 지시자
  • 특정 jsp file을 페이지에 포함
  • 여러 jsp 페이지에서 반복적으로 사용되는 부분을 jsp file로 만든 후 반복 영역에 include 시킬 수 있음
  1. taglib 지시자
  • JSTL 또는 사용자에 의해서 만든 커스텀 태그를 이용할 때 사용
  • JSP 페이지 내에 불필요한 자바 코드를 줄일 수 있음
// 1. page Directive
<%@ page attr1="val1" attr2="val2" %>

// 2. include Directive
<%@ include file ="/template/header.jsp" %>

// 3. taglib Directive
<%@ taglib prefix="c" uri="httmp://java.sun.com/jsp/jstl/core" %>

JSP 의 기본 객체

JSP 기본객체의 영역

기본 객체설명
pageContext하나의 JSP 페이지를 처리할 때 사용되는 영역. 한번의 클라이언트 요청에 대하여 하나의 JSP 페이지가 호출되며 이 때 단 한개의 page 객체만 대응이 됨. 페이지 영역에 저장한 값은 페이지를 벗어나면 사라짐. 커스텀 태그에서 새로운 변수를 추가할 때 사용함
request하나의 HTTP 요청을 처리할 때 사용되는 영역. 웹 브라우저가 요청을 할 때마다 새로운 request 객체가 생성됨. request 영역에 저장한 속성은 그 요청에 대한 응답이 완료되면 사라짐.
session하나의 웹 브라우저와 관련된 영역으로 같은 웹 브라우저 내에서 요청되는 페이지들은 같은 session들을 공유하게됨 -> 로그인 정보 등을 저장
application하나의 웹 어플리케이션과 관련된 영역이며 웹 어플리케이션 1개의 application 객체가 생성됨. 같은 웹 어플리케이션에서 요청되는 페이지들은 같은 applicatin 객체를 공유함

스크립트 요소, Script Elements

2.1 선언부(Declaration)
<%! %>
해당 JSP 페이지에서 사용할 멤버 변수와 메소드를 선언하는 영역
JSP 선언부에서 선언된 메소드의 최대 영역은 해당 JSP 페이지이다. > 사용 제한
대신, 일반 자바 클래스를 만들어서 참조한다. > 사용 권한
사용 빈도 낮음
2.2 스크립틀릿(Scriptlet)
<% %>
자바 코드를 작성하는 영역 (*.java와 동일한 성질)
Script + Applet(웹 페이지에 삽입되는 프로그램, ActiveX, Flash)
선언부에서 정의한 메서드를 호출만 할 수 있을 뿐, 다른 메서드를 선언할 수는 없다.
역할 : 주로 비지니스(업무) 코드 작업
1) 데이터 처리(JDBC)
2) 동적 (HTML, CSS, JavaScript) 처리
사용 빈도 높음
위치 상관 X, HTML 코드랑 상관 X
2.3 표현식(Expression)
<%= 값 %>
값 : 상수, 변수, 연산자를 사용한 (수)식, ‘반환값이 있는’ 메서드 호출 등
해당 위치에 자바 값을 HTML 소스에 출력하는 용도
표현식이 있어야 하는 위치가 고정 O
[ 예제 ]

<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	ArrayList<String> list = new ArrayList<String>();
	
	list.add("홍길동");
	list.add("아무개");
	list.add("하하하");
	list.add("호호호");
	list.add("후후후");
	
	ArrayList<String> color = new ArrayList<String>();

	color.add("tomato");
	color.add("gold");
	color.add("cornflowerblue");
	color.add("yellowgreen");
	color.add("magenta");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style>
	.item {
		border: 1px solid #AAA;
		border-radius: 5px;
		padding: 15px;
		width: 450px;
		margin-bottom: 10px;
	}
</style>
</head>
<body>
	<h1>Member</h1>
	
	<% for(int i=0; i<list.size(); i++) { %>
	
	<div class="item" style="background-color: <%= color.get(i) %>;">
		<h2><%= list.get(i) %></h2>
		<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Similique ullam ut dolorum ducimus dicta sunt eaque neque pariatur suscipit illo. Ex reiciendis perspiciatis quae temporibus beatae quaerat tempora natus id.</p>
		<input type="button" value="자세히보기" class="btn" onclick="info('<%= list.get(i) %>');"/>
	</div>
	
	<% } %>
	
	<script>
		function info(name) {
			alert('회원:' + name);
		}
	</script>
</body>
</html>

참고
https://developer-ellen.tistory.com/110#--%--JSP%--%EC%-D%--%--%EB%-F%--%EC%-E%--%--%ED%-D%--%EB%A-%--
https://devlog-wjdrbs96.tistory.com/152
https://velog.io/@suyyeon/Servlet-JSP-JSP-x4v090vz

0개의 댓글