Developer/JSP EL JSTL

JSP 기초 , requset와 response 객체 , 페이지 이동

단님 2024. 11. 5. 12:25
728x90
JSP 에 대해 알아보자.

 

JSP(Java Server Page) 특징

JAVA 기반의 스크립트 언어이다 : JAVA의 기능을 그대로 사용한다.

HTML 응답 페이지를 생성한다 : 클라이언트 요청을 받아 응답 화면을 생성하는데 주로 사용된다.

플랫폼에 독립적이다 : JAVA를 기반으로 하기 때문에 , 다양한 환경에서 사용할 수 있다.

프레임 워크와 연동이 완벽하다 : Spring 이나 Struts 등의 프레임 워크와 쉽게 연동이 된다.

웹 어플리케이션에서, 결과화면 (Veiw)를 생성할 때 , 주로 사용된다.


JSP 처리과정

1 . 클라이언트 요청 : 사용자가 브라우저에서 JSP 페이지에 대한 요청을 보낸다.

2 . 웹 컨테이너 : 클라이언트 요청을 받은 웹 컨테이너는 JSP 파일을 처리하기 위해 다음단계를 거친다.

3. JSP 서블릿 변환 및 컴파일 단계

    1.1 Translation 단계 :

    JSP 요청에 대한 서블릿 클래스가 이미 존재하는지 확인 . 서블릿 클래스가 없다면 JSP 파일을 자바코드로 변환.

    1.2 자바 코드 생성 :

    JSP 페이지는 서블릿 형태의 자바 코드로 변환된다 . 이단계에서 JSP 문법이 자바코드로 변환된다.

    1.3 컴파일 단계 :

    변환된 자바 소스코드는 컴파일이 되어 서블릿 클래스로 만들어진다.

4. 서블릿 클래스 실행

    2.1 서블릿 실행 및 요청 처리 :

    웹 컨테이너는 생성된 서블릿 클래스에 클라이언트 요청을 전달하고 서블릿은 이를 처리한다.

    2.2 처리 결과 전송 :

    서블릿 클래스는 요청 처리한 결과를 HTML 형태로 클라이언트에게 응답한다.

5. 응답 결과 : 클라이언트는 처리된 HTML 결과를 브라우저에서 확인한다.

 

즉 , JSP 와 서블릿의 관계는 JSP 파일이 내부적으로 서블릿으로 변환되어 실행되는것 .


JSP 기본 객체

JSP는 미리 정의된 기본 객체(Implicit objects)를 제공한다.

웹 프로그래밍에 필요한 기능을 제공하고 , JSP에서 별도로 선언 없이 사용 가능하다.


 

기본 객체 request 객체

 

 

웹 브라우저가 웹 서버에 전송한 요청과 관련된 정보를 제공한다.

클라이언트와 서버가 서로 주고받은 정보를 읽을 수있는 기능 제공.

  • 요청 파라미터 읽기

클라이언트가 input필드에 입력한 값, 요청에 전달된 파라미터를 읽을 수 있다.

예를 들어 , 로그인 폼에서 id 와 비밀번호를 입력했을때 , 이 값을 서버에 받아 처리할 수 있다.

  • 요청 헤더 읽기

클라이언트가 본내 요청에 포함된 추가 정보를 읽을 수 있다.

예를 들어 , 클라이언트 브라우저 종류또는 언어설정 같은 정보가 요청 헤더에 포함될 수 있다.

  • 쿠키 읽기

클라이언트가 보낸 쿠키 데이터를 읽을 수 있다.

쿠키는 브라우저에 저장된 작은 데이터로 로그인 상태나 설정 정보등을 저장하는데 사용된다.

  • 속성 처리

요청 세션 등에 다양한 속성을 추가하거나 수정할 수있다.

이를 통해 서버에서 데이터나 설정앖을 임시로 저장하고 다른 페이지나 서블릿으로 전달할 수 있다.

 

request가 가지고 있는 메서드를 살펴보자

파라미터값의 인코딩과 디코딩

JSP에서 파라미터 로딩시 인코딩 지정 필요하다.

<%
    request.setCharacterEncoding("euc-kr");
    String name = request.getParameter("name");
%>


기본 객체 response 객체

웹 브라우저에 전송하는 응답 정보를 설정한다.

헤더 정보 입력 하거나 리다이렉트 처리하는데 사용된다.

헤더정보를 직접 설정하는 경우는 거의 없다.

크롬에서 response header 정보 확인하기
F12 (개발자 도구) – Network 탭 – F5 or Ctrl+R (페이지 새로고침)
name에 페이지 요청목록 이 나오면 원하는 항목 클릭
옆 쪽의 탭 에서 Header 클릭
header 정보들이 출력되면 view source 클릭 하면 view parsed

응답 상태 코드의 의미

 

response 헤더 설정 메서드

 

 


JSP 사용해보기
JSP의 구성요소
1. HTML tag
2. 디렉티브 : 전체적인 문서 지시 <%@
3.스크립트
➡️ 자바 코드 <%
➡️ 표현식 <%=
➡️ 선언부 <%!
4. 기본객체 (위에 있는 내용)
5. 표준 액션 태그 <jsp:forward , <jsp:include
6. 커스텀 태그 (JSTL)
7. 표현 언어 (EL)
기본 구조
<!-- 설정 부분 , JSP 페이지에 대한 설정 정보-->
<!--  -->
<%@ page contentType = "text/html; charset=euc-kr" %> 

<!-- 생성 부분 , HTML 코드 및 JSP 스크립트 -->
<html>
<head>
  <title>HTML 문서의 제목</title>
</head>
<body>
<%
    String bookTitle = "JSP 프로그래밍";
    String author = "최범균";
%>
<b><%= bookTitle %></b>(<%= author %>)입니다.
</body>
</html>
선언부
<%!
<%!public int multiply(int a, int b) {
		return a * b;
	}

	String name = "홍길동";
	int i = 10;
	int j = 20;%>
표현식
<%=
	-> multiply(4,5) 의 결과는 <%=multiply(4, 5)%> 입니다.
	-> 변수 출력 : i =<%=i%>, j =<%=j%>, name =<%=name%>
자바 코드
<%
	 결과 는 ?<%
	if (multiply(i, j) % 2 == 0) {
	%> 짝수
	<%} else {%>
	홀수
		<%}%>
서비스 실행의 JSP
	<h1>** JSP Student List_ MVC01**</h1>
	<h3>=> Service -> 결과 -> 출력</h3>
	<%
	StudentService service = new StudentService();
	List<StudentDTO> list = service.selectList();
	%>
	<table border=1>
		<tr>
			<th>Sno</th>
			<th>Name</th>
			<th>Age</th>
			<th>Jno</th>
			<th>Info</th>
			<th>Point</th>
			<th>Birhday</th>
			<th>Now</th>
		</tr>
		
		<%
		if(list !=null){
		for(StudentDTO s:list){%>
			<tr>
			<th><%=s.getSno() %></th>
			<th><%=s.getName() %></th>
			<th><%=s.getAge() %></th>
			<th><%=s.getJno() %></th>
			<th><%=s.getInfo() %></th>
			<th><%=s.getPoint() %></th>
			<th><%=s.getBirthday() %></th>
			<th><%=s.getNow() %></th>
			</tr>
		<% }//for
		}else{
		%> 출력할 자료가 없습니다.
		<%} //if , else %>

	</table>

JSP 표준 Action Tag를 이용한 이동.
jsp:forward
<h2>1. Forward</h2>
<h3>=> JSP 표준 Action Tag를 이용한 이동.</h3>
<pre>
<script type="text/javascript">
    alert("~~~hello 로 안내합니다")
    // => Forward 이동 Test 시에는
    // => 스크립트는 브라우저에서 실행되기 때문에 실행되지 않음
    // => 서버에서 forward 된 화면이 response에 담겨 전송되고 출력되기 때문
</script>
<%-- <jsp:forward page="ex01_HelloJSP.jsp"/> --%>
</pre>

 

jsp:forward 태그는 주석 처리되어 있는데, 주석을 해제하면 ex01_HelloJSP.jsp로 이동한다.

주의점으로 JavaScript alert는 Forward 방식에서는 실행되지 않으며,

Forward는 서버에서 처리되고 브라우저는 이를 인식하지 못한다.

 

Include 
1. jsp:include
2.Directive include

Include 방식은 현재 페이지에 다른 JSP 페이지를 포함하여 출력하는 방식

 

1. jsp:include

페이지가 완성된 후에 포함되기 때문에 변수나 상태를 공유하지 않는다.

<h2>2. Include</h2>
<h3>=> JSP 표준 Action Tag</h3>
<pre>
<%-- <jsp:include page="ex01_HelloJSP.jsp"/> 
    -> 변수 출력 : i =<%=i%>, j =<%=j%>, name =<%=name%> --%>
    -> jsp:include를 통한 페이지 삽입은 변수를 공유하지 않는다.
    -> JSP 문서의 완성된 페이지가 포함되기 때문에 컴파일 전의 변수를 공유하지 않음.
    -> 즉, 코드 호환이 안됨.
</pre>

 

2. Directive include

JSP 소스 코드를 포함하므로, 포함된 페이지와 변수, 상태 등을 공유할 수 있다.

<h3>=> Directive include</h3>
<pre>
    -> JSP 문서의 소스 코드 포함 .
    -> 그러므로 변수 공유 가능.(코드 호환됨.).
    ->변수 출력 : i =<%=i%>, j =<%=j%>, name =<%=name%>
    <%@ include file="ex01_HelloJSP.jsp" %>
</pre>

<%@ include file="ex01_HelloJSP.jsp" %>는 소스 코드 레벨에서 ex01_HelloJSP.jsp 파일을 포함하므로,

포함된 파일의 변수 i, j, name을 공유할 수 있다

 

Redirect 이동

Redirect는 서버가 클라이언트에게 새로운 URL로 이동하라고 응답을 보내는 방식이다.

클라이언트는 새로운 URL로 요청을 보내기 때문에 브라우저의 주소가 변경된다.

<h2>3. Redirect</h2>
<h3>=> response sendRedirect</h3>
<pre>
<% response.sendRedirect("ex01_HelloJSP.jsp"); %>
</pre>

이 방식은 클라이언트가 새로운 요청을 보내는 것이므로 브라우저의 URL이 변경된다.

 

요약본
1. Forward: 서버 측에서 다른 페이지로 이동하며, 클라이언트는 URL 변경을 인식하지 못함.
2. Include:
2-1) jsp:include: 페이지 완성 후 포함하며 변수 공유 불가.
2-2) Directive include: 소스 코드 레벨에서 포함하여 변수 공유 가능.
3. Redirect: 클라이언트가 새로운 URL로 이동하도록 응답을 보내며, URL이 변경됨.

 

 

 

 

'Developer > JSP EL JSTL' 카테고리의 다른 글

JSTL이란 , 코어 태그 라이브러리  (0) 2024.11.06
EL의 자료형과 연산  (2) 2024.11.05
JSP 의 표현언어 EL  (0) 2024.11.05