Servlet, JSP

JSP

chojdsj 2023. 7. 8. 23:41
728x90

 

JSP란?

 

- JSP( Java Server Page ) : JAVA 코드가 들어있는 HTML 코드

- Java의 웹 서버 프로그램 스펙(서블릿)으로 변환되어 서비스 됨

 

 

 

 

Servlet과 JSP의 차이점

 

 

Servlet

- "웹 서비스 기능을 해주는 자바 클래스"를 말하는 것으로
자바 소스코드 속에 HTML 코드가 들어가는 형태
-> HTML 문서를 작성하는데 복잡하고 번거롭다는 단점이 있음


JSP

- 복잡한 Servlet을 좀 더 간단히 사용할 수 있음.

- Servlet과 반대로 HTML 소스코드 속에 자바 소스코드( <% %> 또는 <%= %> )가 들어있는 형태

- 컴파일을 통해 클래스 파일로 변환되어 웹 서버(WAS)에서 실행됨 

 

 

 

 

JSP 장점

 


- 서블릿보다 쉽고 작성하기 빠름

- 디자인 부분(html)과 로직 부분(java)으로 이루어져 있음 

- 프로그래머가 직접 코딩한 서블릿 보다 최적화 된 서블릿으로 생성시켜주므로 효율적인 코드가 만들어짐

 

 

 

JSP를 이루는 구성인자(element)

 

 

 

1. 지시어

- page : 현재의 JSP 페이지를 컨테이너에서 처리하는데 필요한 각종 속성을 기술하는 부분으로 
            보통 소스의 맨 앞에 위치

 



- contentType : MIME 형식 지정 및 캐릭터셋 설정 (text.html; charset = UTF-8)

- import : 자바 클래스 사용, JSP 내에서 사용할 외부 자바 패키지나 클래스의 import 지정

- language : 사용할 스크립트 언어 유형 지정(java)

- pageEncoding : JSP 파일(페이지)에 기록된 소스코드 자체의 인코딩 방식
->   <%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
->   pageEncoding은 ContentType의 charset과 동일한 기능을 함





2. 스크립팅 원소 : JSP 페이지에서 자바코드를 직접 기술할 수 있게 하는 기능

1) 선언문 : <%! 자바코드 %>

2) 스크립틀릿 : <% 자바코드 %>

 



3) 출력식,표현식 : <%= 자바코드 %>

 

 

 

 

 

 

JSP 페이지에서 사용할 수 있는 내장객체변수의 종류

 

- 일반적인 java프로그램에서는 변수를 사용하려면 반드시 선언을 해야하지만 JSP 페이지에서는
선언을 사용하지 않고도 사용할 수 있는 변수가 있음 
-> 이러한 변수를 JSP 페이지의 "내장객체변수"라고 함

- 웹컨테이너(=WAS, 톰캣서버)가 JSP페이지를 Servlet 클래스로 변환해줄 때 자동적으로 변수선언을
해주기 때문에 변수 선언 없이 사용 가능


request

- doGet, doPost메소드의 첫번째 파라미터와 동일한 역할

- 웹클라이언트에서 보내온 데이터 값을 받아서 처리해주는 변수


response

- doGet, doPost 메소드의 두번째 파라미터와 동일한 역할

- 웹클라이언트의 요청에 대한 응답결과 처리를 위한 변수


out

- 웹브라우저로 HTML 코드를 출력해주는 기능

- Servlet 클래스 안에서 response.getWriter( ) 메소드를 호출해서 얻은 PrintWriter객체와 동일한 기능을 함



session

- 세션 : 여러 웹 컴포넌트들이 협력작업을 시작해서 끝내기까지의 기간 의미


config

- JSP페이지가 속하는 웹애플리케이션의 초기상태와 관련된 기능을 함

 

 

 

 

Servlet / JSP 내장객체와 범위

 

 

- Servlet / JSP에는 기본적으로 내장되어 있는 객체가 존재함. 총 4종류가 존재하며 각각 영향을 미칠 수 있는 범위가 다름

 

1) page scope : 현재 페이지

-> 현재 Servlet 또는 JSP에서만 사용가능 ( 1페이지서만 값이 유지됨 ) 

 

2) request scope : 요청받은 Servlet / JSP + 요청 위임한 Servlet / JSP ( 2페이지 이상에서 값이 유지됨 )

 

3) session scope : 현재 켜져있는 브라우저가 종료되기 전까지 어디서든 사용 가능

ex) 로그인

 

4) application scope : 배포한 웹 애플리케이션이 종료되기 전까지 어디서든 사용 가능

(서버가 꺼질 때 까지 유지)

 

 

 

-> Servlet에서 setAttribute로 변수에 값을 담아주었다

 

-> 그러고나서 dispatcher.forward를 사용해서 요청을 위임할 JSP로 값을 넘겨준다.

 

 

->  JSP에서 EL을 이용해서 변수값을 출력하고 결과를 확인해보자

 

-> 첫번째 request범위 message에 값이 page가 나온것은 scope 우선순위에 따라서 page scope가 request scope보다 우선순위가 높기 때문에 Servlet에서 req.setAttribute를 이용해서 변수에 담은 값이 출력되는게 아니라 page의 변수값이 출력

 

-> 나머지 값들은 다 잘나온걸 확인할 수 있다.

 

-> 이제 아예 상관이없는 새 브라우저를 이용해서 서버를 켜서 결과를 확인해보자

 

-> 시크릿창을 이용해서 다른 화면에서 EL을 이용해서 출력을 해보았는데 아무런 값이 나오지 않음

 

-> 시크릿창에서 다시 JSP를 사용해서 만든 화면을 열어주고 다시 session , application scope 범위의 값을 확인해보자

 

-> 같은 브라우저에서 열렸기 때문에 session값이 유지가 되어서 아무 관련없는 페이지에서 값을 확인해도 출력이 되고 서버도 아직 잘 켜져있기 때문에 당연히 application의 값도 잘 나오는걸 확인할 수 있다.

 

 

 

 

 

 

 

 

RequestDispatcher

 

- Dispatcher : 필요한 정보를 제공하는 자 == 발송자

 

- forward : 전송하다, 보내다


- 응답 화면을 만드는 Servlet의 일을 좀 더 효율적으로 처리할 수 있는 JSP에게 넘겨줌

 

- 작성법 : req.getRequestDispatcher("넘겨줄 JSP경로");

-> HttpServletRequest객체가 생성될 때, 내부에 자동으로 요청발송자(RequestDispatcher)가 같이 생성됨

-> JSP 경로 작성 규칙 : webapp폴더를 기준으로 해서 JSP파일까지의 모든 경로를 작성

 

 

--> result의 값을 "res"라는 변수명에 담아 JSP로 보낸다

 

 

--> JSP에서는 req라고 쓰지 못하고 request라고 작성해야함. resp도 마찬가지로 response로 작성

 

--> 위에서 setAttribute로 값을 넘겨주었다. setAttribute는 Map형식과 마찬가지로 key,vlaue값을 가지게 되는데

req.setAttribute(String key, Object value) , 즉 Object 타입을 다운캐스팅해서 String 타입으로 형 변환해줌

 

 

 

'Servlet, JSP' 카테고리의 다른 글

JSON  (0) 2023.07.15
AJAX  (0) 2023.07.15
JSTL  (0) 2023.07.09
EL  (0) 2023.07.09
Servlet  (0) 2023.07.03