bdfgdfg

JSP 본문

웹프로그래밍/JSP_Servlet

JSP

marmelo12 2023. 8. 11. 14:52
반응형

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
Comments