JSP + Servlet | 기본

파과·2022년 7월 12일
0

JSP + Servlet

목록 보기
3/33

컨텍스트 패스

컨텍스트 패스는 여러 개의 웹 애플리케이션이 WAS에서 동작할 경우 이를 구분하기 위해 사용한다.
이클립스가 자동으로 server.xml파일에 등록해주는 컨텍스트 패스는 프로젝트 이름과 동일하다. 하지만 이는 개발자 입장에서 개발을 위해 생성된 파일들을 관리하기 위한 폴더이고, 컨텍스트 패스는 사용자가 해당 웹 애플리케이션을 사용하기 위해 접근하는 경로가 되다.

개발자는 컨텍스트 패스 이름을 웹 프로젝트 이름과 다른 이름으로 바꿀 수 있다. 이번엔 다르게 지정해보자.

context root:를 바꾸고 싶은 컨텍스트 패스 이름으로 입력한다.

그럼 위처럼 뜬다.

아래는 톰캣 서버의 server.xml - Source에서 확인할 수 있는 컨텍스트 패스(path속성).

JSP와 HTML

JSP는 HTML 태그에 자바로 프로그래밍하여 브라우저에 보여주는 특별한 페이지. HTML태그 사이에 <% %>를 추가하려면 JSP파일로 작성해야 한다.
HTML파일은 웹브라우저 내의 번역기로 돌리지만 JSP파일은 톰캣 서버가 번역하여 그 결과를 HTML태그로 변환 후 웹브라우저에 내려보낸다.

<% %>는 JSP가 제공하는 스크립트릿 태그. 스크립트릿이란 JSP페이지에서 자바코드를 실행할 때 사용되는 코드의 블록을 말한다. <% %>안에 자바코드를 집어넣으면 서블릿 컨테이너는 이 부분을 JSP로 인식하여 이를 해석한 후 HTML형태로 변환한다.

서블릿과 JSP의 차이

서블릿은 HTML코드가 자바 코드 안에 들어가는 구조로, 디자이너가 자바를 모르고 HTML코드를 서블릿에서 작성하는 것은 거의 불가능하다. JSP는 HTML문서에 자바 코드가 들어가는 구조이기 때문에 서블릿보다 JSP로 개발하는 편이 훨씬 간단하다.


p.145

JSP 기본 태그

서버가 인식하는 JSP태그

종류사용용도형식
스크립트릿자바 코드를 기술함. 이때 사용하는 자바 언어를 서버 스크립트 언어라고 한다.<% %>
선언변수와 메소드를 선언함. 따로 선언하는 이유는 static변수나 메소드 정의는 메소드 내부가 아니라 클래스 영역에 선언해야 하는데, 스크립트릿 안에 기술한 내용은 _jspService() 메소드 내부에 들어가기 때문이다.<%! %>
표현식계산식이나 함수를 호출한 결과를 문자열 형태로 출력함<%= %>
주석JSP페이지에 설명을 넣음<%-- --%>
지시자JSP페이지의 속성을 지정함<%@ %>

선언과 표현식은 JSP페이지가 서블릿 코드로 변환되면 클래스 영역으로 들어가는 부분으로, <%! %>는 스크립트릿과 전혀 관계없는 내용입니다. 별개의 JSP태그로서 <%! %> <% %>와 같이 별도로 기술합니다.

또한 메소드 정의는 반드시 선언문 태그 내부에서 해야 한다. 변수 값 출력이나 메소드 호출은 스크립트릿 태그에서 한다.

선언문에 변수 선언과 메소드 정의하기

참고로 아래 코드에서 out은 JSP 기본 내장 객체로,
jsp페이지가 생성하는 결과를 출력해주는 - 웹 브라우저에 데이터를 전송하는 출력 스트림이다.
(javax.servlet.jsp.JspWriter)

dec.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<%!
	//변수 선언
	String str = "안녕하세요!";
	int a = 5, b = -5;
	
	//메소드 선언
	public int abs(int n){
		if(n < 0){
			n = -n;
		}
		return n;
	}
%>    
    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<%
		out.print(str+"<br>");
		out.print(a+"의 절댓값: "+abs(a)+"<br>");
		out.print(b+"의 절댓값: "+abs(b)+"<br>");
	%>

</body>
</html>

선언문 <%! %>의 위치는 어디 있든 상관 없다(제일 뒤로 위치하고 실행해도 결과는 같다). 관례적으로 HTML문서 맨 위에 위치시킨다.

선언문에 선언한 변수와 스크립트릿 변수의 성격 파악

메소드 정의는 선언문에서만 가능하지만 변수는 선언문에서도, 스크립트릿에서도 선언할 수 있다.

  • 선언문에 선언한 변수는 서블릿 클래스의 필드로 선언되고,
    스크립트릿 변수는 _jspService() 메소드 내의 지역변수로 선언된다.
  • 서블릿은 첫번째 요청에만 서블릿 클래스를 찾아 메모리에 로딩하여 인스턴스(객체)를 생성하고 이후의 요청에 대해서는 서블릿 인스턴스를 다시 생성하지 않고 이미 메모리에 로딩된 서블릿으로부터 서비스만 받는다.
  • 따라서 실행 후 새로고침을 여러 번 하면 전역변수는 이미 생성된 필드가 다시 생성되지 않기 때문에 이전의 값을 유지한 채로 메소드가 실행되면서 값이 계속 변하고, 지역변수는 새로고침할 때마다 새롭게 메모리 할당을 하면서 값을 초기화하기 때문에 항상 같은 값이 출력된다.

표현식(expression)

표현식에 기술한 내용은 out.print()의 매개변수가 된다. 따라서 표현식을 기술할 때 세미콜론;을 <%= %> 안에 기술하지 말아야 한다.

지시자(directive)

JSP에는 page, include, taglib 3가지 종류의 지시자가 있다. JSP페이지에 대한 전체 속성을 지정한다. JSP문서의 제일 윗부분에 위치한다.

지시자는 다음 글에서...

0개의 댓글