JSP : JavaServer Page
HTML 내에 자바 코드를 삽입하여 웹 서버에서 동적으로 웹페이지를 생성 후 웹 브라우저에 돌려준다. 자바 서버 페이지는 자바 서블릿으로 변환된 후 실행된다.
jsp의 코드는 스크립트 기반이지만, 실행 시 자바로 바뀌어 class로 실행된다. 따라서 jsp를 서블릿이라 하는 사람도 있다. 서블릿과의 차이는 JSP 내에는 내장객체가 존재한다는 정도이다.
멤버변수의 선언이나 메소드를 선언하는 영역
명령문이 오면 안 됨
<%! 멤버변수와 method 작성%>
<%!
String name;
public void init(){
name = "김정은";
}
%>
Client 요청 시 매번 호출되는 영역으로, Servlet에서는 service() 에 해당되는 영역.
request, response에 대한 코드 구현하는 영역
<% Java Code %>
데이터를 브라우저에 출력할 때 사용
문자열 뒤 세미콜론(;)은 작성하면 안 됨.
<%= 문자열 %> == <% out.print(문자열); %> 이기 때문
<%= 문자열 %>
<%-- 주석 --%>
html 주석은 클라이언트에게 전송되는 반면, JSP 주석은 클라이언트에게 전송되지 않음.
컨테이너에게 현재 JSP 페이지를 어떻게 처리할지에 대한 정보 제공
<%@ page attr1="var1" attr2="var2" ... %>
특정 JSP file을 페이지에 포함시킴.
여러 jsp 페이지에서 반복적으로 사용되는 부분을 include시켜 반복되는 코드 줄일 수 있음.
<%@ include file="/tmplate/header.jsp" %>
JSTL 또는 사용자에 의해서 만든 커스텀 태그를 이용할 때 사용.
JSP 내에 불필요한 자바 코드 줄일 수 있음.
<%@ taglib prefix="c" url="http://java.sun.com/jsp/jstl/core" %>
JSP 기본객체 == 내장객체
총 9개 존재함
servletContext : 서블릿이 돌아가고 있는 프로젝트
네가지 구분해서 잘 알아두기
서로다른 웹페이지 사이 변수를 공유할 수 있는 방법이 없기 때문에 나옴
page, request, session, application 순으로 넓어짐
페이지 안에서만(지역변수와 비슷함) : page Context
어떤 곳 까지만(객체를 전달, foward내에서 공유 가능) : request
이게 살아있는 곳 까지만 : session
어디서든(톰캣에 변수를 만드는 개념, 서버 내의 변수라고 보면 됨) : application
서블릿과 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);
%>
request 두번, 클라이언트의 브라우저가 b.jsp, c.jsp를 요청함
클라이언트가 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 출력됨.