bdfgdfg
JSP 본문
JSP는 서블릿 다음으로 등장.
기존 서블릿에서 화면을 구현할 때 응답으로 HTML을 String으로 넣어주었다. 점점 복잡해지는 프론트쪽을 코드로 그렇게 넣어주는건 쉽지 않다. 그렇기에 jsp는 html,css,자바스크립트를 기반으로 JSP 요소들을 사용해 화면을 구현한다.
-> 서블릿의 비즈니스 로직과 결과를 보여주는 화면 기능의 분리
JSP의 기본요소는 다음과 같다.
- HTML, CSS, 자바스크립트
- JSP 기본,액션, 커스텀 태그
JSP는 그자체로 클라이언트에게 응답하면 브라우저에서는 JSP요소들을 인식하지못한다고 하기에 톰캣 컨테이너에 의해 응답되기전, 실행단계를 거쳐야함.
JSP 변환 과정(동작원리)
1. 변환 단계 : 컨테이너는 JSP파일을 자바 파일로 변환
2. 컴파일 단계 : 컨테이너는 변환된 자바(.java)파일을 클래스(.class)파일로 컴파일.
3. 실행 단계 : 컨테이너는 class 파일을 실행해 그 결과를 브라우저로 전송해 최종적으로 출력된다.
(이러한 변환 과정이 있기에 JSP에서는 제공하는 스크립트 요소를 이용하면 화면을 동적으로 구성할 수 있음)
이클립스에서 jsp파일을 만들면 내부는 기본 html로 구성이 되어 생성된다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP 테스트</title>
</head>
<body>
<h1>HELLO JSP</h1>
</body>
</html>
실행해보면
실제로 java,class파일이 생성된것을 알 수 있고 java파일을 열어보면
서블릿에서 직접넣어주던 코드들을 java로 변환하는 과정에서 알아서 위와 같이작성해준다.
JSP 페이지 구성요소
JSP페이지에서 사용되는 여러가지 구성요소들은 다음과 같다.
- 디렉티브 태그
- 스크립트 요소
- 표현 언어
- 내장 객체
- 액션, 커스텀 태그
디렉티브 태그는 페이지,인클루드,태그라이브 총 3가지의 디렉티브 태그로 나뉜다.
페이지 디렉티브 태그는 jsp 페이지의 전반적인 정보를 설정할 떄 사용.
<%@ page language="java"
contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"
import="java.util.*"%>
끝에 %기호를 넣어줘야한다. 위에서 import="java.util.*"를 넣어주면 jsp가 .java파일로 변환될 때 해당 패키지를 import해준다.
인클루드 디렉티브 태그는 공통으로 사용하는 JSP페이지를 다른 JSP페이지에 추가할 떄 사용.
- 보통 웹 페이지 상단부분에는 고정된 화면이고 그 밑의 몸통부분이 변경되는 경우가 많은데 이럴 때 사용할 수 있다.
- 형식 : <%@ include file="공통기능.jsp" %>
<%@ page language="java"
contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"
import="java.util.*"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP 테스트</title>
</head>
<body>
<h1>HELLO JSP</h1> <br>
<%@ include file="duke_image.jsp" %> <br>
<h1>Include Directive Tag</h1>
</body>
</html>
<%@ page language="java"
contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"
import="java.util.*"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<img src="./image/image.jpg" />
</body>
</html>
첫번째 jsp는 두번째 jsp를 include하고 있음.
이런식으로 include되는 jsp는 별도로 .java, .class파일이 생성되지 않고, include하는 jsp에 포함이 된다.
JSP 스크립트 요소
이때까지 JSP 스크립트요소는 HTML파일안에 <% %>의 형태로 추가되는듯 보였다.
위 와같이 <% %> 기호를 스크립트릿이라고도 한다.
스크립트의 요소
- 선언문 : jsp에서 변수나 메소드를 선언할 떄 사용 ( <%! 멤버변수 OR 멤버 메소드 %>
<%@ page language="java"
contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"
import="java.util.*"%>
<%!
String name = "테스트";
public String getName() { return name; }
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP 테스트</title>
</head>
<body>
<h1>HELLO JSP</h1> <br>
<%@ include file="duke_image.jsp" %> <br>
<h1>Include Directive Tag</h1>
<p>선언문의 메소드를 호출! <%=name %></p>
</body>
</html>
선언문에서 String 멤버와 그 멤버변수를 반환하는 메소드를 작성.
-> 당연히 .java로 변환될 때 위의 내용들이 선언된다.
그리고 html태그의 body안에서 해당 메소드를 호출 (표현식 -> <%= ? %>
- 스크립트릿 : JSP에서 자바코드를 작성할 때 사용
스크립트릿은 초기의 JSP에서 자바코드를 이용해 화면의 동적인 기능을 구현했지만, 혀냊는 거의 사용되지 않는다고함.
스크립트릿의 형식 <% 자바코드 %> (자바코드만 쓸 수 있음)
<%!
String name = "테스트";
public String getName() { return name; }
%>
<!-- 요청의 age 파라미터를 가져오는 코드 -->
<% String age = request.getParameter("age"); %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP 테스트</title>
</head>
<body>
<h1>HELLO JSP</h1> <br>
<%@ include file="duke_image.jsp" %> <br>
<h1>Include Directive Tag</h1>
<p>선언문의 메소드를 호출! <%=name %></p> <br>
<p>쿼리 스트링의 age값 가져오기 <%=age %></p> <br>
</body>
</html>
실제 변환된 코드를 살펴보면
추가된것을 알 수 있다.
- 표현식 : JSP에서 변수의 값을 출력할 떄 사용
표현식은 JSP페이지의 정한 위치에 값을 출력하는 기능.
형식 : <%=값 OR 자바 변수 OR 자바 식%>
<p>선언문의 메소드를 호출! <%=name %></p> <br>
<p>쿼리 스트링의 age값 가져오기 <%=age %></p> <br>
<p>가져온 age값 +10! <%= Integer.parseInt(age) + 10 %>.
내장 객체(내장 변수)기능
JSP 페이지의 내장객체란 JSP가 서블릿(자바코드)으로 변화될 때 컨테이너가 자동으로 생성시키는 서블릿 멤버변수를 의미.
여기서 ServletContext(웹에서 모두 접근가능한 저장소), HttpSession, request, response,out는 이미 본것들.
- session은 같은 웹브라우저의 요청에서만 동일한 스코프.
- ServletContext는 웹 애플리케이션에서 모두 공유.
- JspWriter는 이때까지 PrintWriter를 쓴것과 동일한것으로 보면된다.
--> jsp 표현식을 통해 직접호출안하더라도 표현할 수 있지만, out내장객체를 통해 직접 넣어줄수도 있음.
<!-- 자동으로 .java변환되면서 out.print에 할당 -->
<p>선언문의 메소드를 호출! <%=name %></p> <br>
<p>쿼리 스트링의 age값 가져오기 <%=age %></p> <br>
<p>가져온 age값 +10! <%= Integer.parseInt(age) + 10 %>.
<h1><% out.println(name=" , " + age); %></h1>
JSP에서도 똑같이 session.getAtribute, setAttribute(세션생성)메소드를 호출해서 사용하면 된다.
- jsp 변환과정에서 getSession을 호출해주어 자동으로 생성해줌.
'웹프로그래밍 > JSP_Servlet' 카테고리의 다른 글
모델2(MVC) 방식 작업 (0) | 2023.08.13 |
---|---|
JSP - 2 (0) | 2023.08.11 |
서블릿에서의 쿠키와 세션 (0) | 2023.08.10 |
서블릿(Servlet) - 2 (0) | 2023.08.07 |
서블릿(Servlet) 기초 (0) | 2023.08.07 |