[Back-End] SSR (Server Side Page) - JSP

SHINYEJI·2023년 9월 18일
0

Back-End

목록 보기
13/24

JSP

  • Java Server Page
  • HTML내에 자바 코드를 삽입 하여 웹 서버에서 동적으로 웹 페이지를 생성하여 웹 브라우적를 돌려주는 언어

Servlet과 JSP의 차이점

ServletJSP
1. 자바 코드 내에 HTML을 삽입
2. Compile 기반
1. HTML내에 자바 코드를 삽입
2. Servlet 먼저 사용하다가 HTML 코드가 Java 코드 보다 더 방대하기 때문에 JSP방식이 생겼다.
3. Script 기반 - 코딩을 할대는 Script 기반이지만 컴파일 시 Compile기반으로 동작되어 느리지 않음.

JSP의 변환과 동작 방식

  1. .jap 파일은 실행 시 JSP컨테이너에 의해 sevlet파일인 .java로 변환된다.
  2. 변환된 Servlet 파일은 Servlet Container에 의해 관리된다.
  3. 즉, index.jsp를 실행하면 실제로 index_jsp.java 파일이 만들어지고 index_jsp.class파일이 실행된다.

선언

  • sevlet파일로 변경 시, 멤버변수 / 메소드 선언 영역 안으로 옮겨진다.
  • <%! 멤버변수, 메소드 선언 %>
index.jsp 코드index_jsp.java 코드

스크립틀릿 (Scriptlet)

표현식 (Expression)

  • HTML 문서로 만들어질 값을 작성
  • <%= 출력될 값 %>
  • .java로 변경된 파일에는 <%= 출력될 값 %>out.print(”출력될 값”);으로 변경됨.

주석

  • jsp container가 jsp파일을 servlet으로 변환시킬 때(*.java) jsp 주석은 포함시키지 않고 없애버리고 html 주석은 클라이언트에게 보일 수 있도록 주석을 포함시켜 보낸다.
    즉, 서버측 주석은 JSP 주석을 사용해야 한다.
	<%-- 주석 구문  --%>

지시자

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%!    // 선언부에 변수나 메소드 만들기
String name = null;

public void init(){     
	name = "이름";
}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h2>Hello world!! 안녕</h2>
	<h1>안녕하세요 <% out.print(name); %>!!!</h1>  <%-- 출력 방법 1 --%>
	<h1>안녕하세요 <%= name %>!!!</h1>             <%-- 출력 방법 2 --%>
</body>
</html>

JSP Directive

지시문 종류

  1. page Directive
  • 컨테이너에게 현재 jsp페이지를 어떻게 처리할 것인가에 대한 정보를 제공한다.
    <%@ page 속성1="값1" 속성2="값2">
  • ⚠ 반드시 속성과 속성 사이에는 공백이 존재해야 한다.

    page Directive 속성

      속성  
    기본 값설명
    languagejave
    info
    contentTypetext/html;charset=ISO-8859-1UTF-8로 설정하여 한글을 사용할 수 있게 해야한다.
    브라우저에게 이러한 타입으로 저장하겠다라는 것을 알려줌
    pageEncodingISO-8859-1jsp를 servlet으로 바꿀 때,어떤 타입으로 encoding 해야 하는지 정의
    import사용할 java 패키지나 클래스를 지정
    (자바에서 import하는 것과 동일)
    sessiontrue (세션 사용)세션 사용 유무를 결정
    errorPage에러가 발생할 때 대신 처리될 에러 페이지를 지정
    isErrorPasefalse(현재 페이지는 에러페이지가 아님을 뜻함)에러가 났을 때 보여줄 페이지면 true로 설정해야 함
    buffer8KBhtml을 만들고 clinet에 보낼 때,얼만큼의 buffer공간을 사용하여 보낼 것인가를 지정
    autoflushtrue버퍼의 내용을 자동으로 브라우저로 보낼 지에 대한 설정
    isThreadsafetrue (스레드를 직접관리하지 않음)false : thread를 직접 관리할 때 사용
    (클라이언트가 100개면 servlet이 100개가 만들어 지는것이 아닌 thread가 100개 만들어짐),티켓팅같은 경우 처리하는 순서가 중요할 때,false로 바꿔 스레드를 직접 관리
    extendsjavax.servlet.jsp.HttpJspPage(자기네 서버에 최적화된 서버를 상속받음)현 jsp페이지를 기본적인 클래스가 아닌 다른 클래스로부터 상속하도록 변경

    예시

    <%@ page language="java" contentType="text/html; charset=UTF-8"
      pageEncoding="UTF-8"
    		import = "java.util.*, java.io.*"
      session="false"
      isErrorPase = "true"
    %>
  1. include Directive
  • 특정 jsp file을 페이지에 포함시킨다는 의미다.
  • 여러 jsp에서 반복적으로 사용되는 부분을 별도의 jsp파일로 만들어서 jsp파일을 include하여 코드를 줄일 수 있다.
    java <%@ include file="파일 path" %>
  1. taglib Directive

JSP 기본객체

 객체명 
type설명
request
response
pageContext각종 기본 객체를 얻거나 forward / include할 때 사용
session클라이언트에 대한 세션 정보처리할 때 사용, session= true일 때만 사용 가능
applicationjavax.servlet.ServletContext= Project = Context
out
configservlet의 환경정보를 얻어냄
pagethis라고 생각

JSP 기본객체의 영역(Scope)

  • 메모리에 담을 것임으로 Object형식을 다 가능

WEB page 이동

  • scope 크기 : application > session > request > pageContext
객체scope
pageContext딱 한번 요청되는 다음페이지까지만 범위 존재 (forward까지만 범위가 존재)
request
sessionsession=true인 페이지 전부 범위 존재 (session시간까지만 유효)
application가장 넓은 범위로 제약조건 없이 프로젝트 어디에서든 사용 가능, 무조건 application에만 담아놓으면 메모리 낭비가 발생할 수 있음
  • 아래와 같이 *.java 파일에 선언되어 있음으로 jsp에서는 .java에 정의된 변수명만 작성하면 사용가능하다.
    ServletContext, HttpSession, HttpServletRequest에 data 저장

예시

http://localhost:8080/test/MainServlet?a=hellohttp://localhost:8080/test/ResponseServlet
context, request, session의 data 속성에 hello가 저장context, request, session의 data 속성을 조회
실행 순서
  1. chrom에서 http://localhost:8080/test/MainServlet?a=hello 요청
  2. chrom에서 http://localhost:8080/test/ResponseServlet 응답 확인
  3. edge에서 http://localhost:8080/test/ResponseServlet응답 확인
결과
첫번째로 응답(chrome)두번재 응답(edge)
- session은 클라이언트 당 하나씩 할당 되기 때문에 두번째로 응답을 받은 브라우저에 값이 할당되지 않았다.

공통 Method

|||

0개의 댓글