백엔드 02 - JSP

JeongEun Kim·2023년 4월 2일
1

Back-end

목록 보기
2/4

JSP란?

JSP : JavaServer Page
HTML 내에 자바 코드를 삽입하여 웹 서버에서 동적으로 웹페이지를 생성 후 웹 브라우저에 돌려준다. 자바 서버 페이지는 자바 서블릿으로 변환된 후 실행된다.
jsp의 코드는 스크립트 기반이지만, 실행 시 자바로 바뀌어 class로 실행된다. 따라서 jsp를 서블릿이라 하는 사람도 있다. 서블릿과의 차이는 JSP 내에는 내장객체가 존재한다는 정도이다.

JSP 동작 흐름




JSP Script

JSP Scripting Element

선언

멤버변수의 선언이나 메소드를 선언하는 영역
명령문이 오면 안 됨
<%! 멤버변수와 method 작성%>

<%!
	String name;
public void init(){
	name = "김정은";
}
%>

스크립트릿(Scriptlet)

Client 요청 시 매번 호출되는 영역으로, Servlet에서는 service() 에 해당되는 영역.
request, response에 대한 코드 구현하는 영역
<% Java Code %>


표현식(Expression)

데이터를 브라우저에 출력할 때 사용
문자열 뒤 세미콜론(;)은 작성하면 안 됨.
<%= 문자열 %> == <% out.print(문자열); %> 이기 때문
<%= 문자열 %>

주석(Comment)

<%-- 주석 --%>

html 주석은 클라이언트에게 전송되는 반면, JSP 주석은 클라이언트에게 전송되지 않음.


JSP Directive

JSP 지시자

page Directive

컨테이너에게 현재 JSP 페이지를 어떻게 처리할지에 대한 정보 제공
<%@ page attr1="var1" attr2="var2" ... %>

Include Directive

특정 JSP file을 페이지에 포함시킴.
여러 jsp 페이지에서 반복적으로 사용되는 부분을 include시켜 반복되는 코드 줄일 수 있음.
<%@ include file="/tmplate/header.jsp" %>

taglib Directive

JSTL 또는 사용자에 의해서 만든 커스텀 태그를 이용할 때 사용.
JSP 내에 불필요한 자바 코드 줄일 수 있음.
<%@ taglib prefix="c" url="http://java.sun.com/jsp/jstl/core" %>

page





JSP 기본객체

JSP 기본객체 == 내장객체
총 9개 존재함

servletContext : 서블릿이 돌아가고 있는 프로젝트

JSP Scope

네가지 구분해서 잘 알아두기
서로다른 웹페이지 사이 변수를 공유할 수 있는 방법이 없기 때문에 나옴
page, request, session, application 순으로 넓어짐
페이지 안에서만(지역변수와 비슷함) : page Context
어떤 곳 까지만(객체를 전달, foward내에서 공유 가능) : request
이게 살아있는 곳 까지만 : session
어디서든(톰캣에 변수를 만드는 개념, 서버 내의 변수라고 보면 됨) : application

공통 method

서블릿과 jsp 페이지 간, 특정 정보를 주고받거나 공유하기 위한 메소드
getAttribute도 object로 출력됨. 제네릭 적용되지 않음.

웹페이지 이동


forward : 내 프로젝트 내에서만 이동이 가능함. forward - 전달이라는 뜻

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%><%	//이런데 엔터 쳐도 공백 가기 때문에 주의
//jsp 쓴다면 jsp 자체가 write를 가지고 있기 때문에 공백이 생기지 않도록 주의하기

//방법 1 - "가려는 주소" / 새로운 네트워크 발생. 
//./c.jsp : ip 기반으로 주소
// c.jsp 라고 주소 나옴
response.sendRedirect("./c.jsp");
    
//방법 2
//context 기반의 주소
//b.jsp라고 주소 나옴
	String path = "/c.jsp";
	RequestDispatcher dispatcher = request.getRequestDispatcher(path);
	dispatcher.forward(request, response);
%>

sendRedirection

request 두번, 클라이언트의 브라우저가 b.jsp, c.jsp를 요청함

forward

클라이언트가 b.jsp 요청→서버 쪽에서 b.jps가 c.jsp로 이동, 얻어진 c.jsp가 클라이언트로 감.
네트워크 창 열어보면 한 번만 호출. 그래서 forward는 같은 서버 내에서만 이동 가능.
상단 파일 내에서 c.jsp에 접근할 수 있는 방법 없음.

<body>
C 페이지입니다.
<%
//String str = request.getAttribute("ssafy");
//이건 불가능. 뽑아 올 때는 Object로 작동함.
	String str = (String)request.getAttribute("ssafy");
%>
<%= request.getAttribute("ssafy")  %>
</body>

request.setAttribute(name, o)
forward 내에선 서로 다른 html들이 공유 가능.
sendRedirection으로 하면 null 출력됨.

0개의 댓글