Servlet/JSP 복습하기

bitna's study note·2022년 6월 18일

Servlet/JSP

목록 보기
13/21

6월 18일 복습하기

1.서블릿의 속성과 스코프
ServletContext, HttpServlet, HttpServletRequet 바인딩되어 저장된 객체(정보)
서블릿 스코프는 서블릿 API에 바인딩된 속성에 대한 접근 범위
ServletContext ->애플리케이션 전체에서 접근가능
HttpSession ->사용자만 접근 가능
HttpServletRequet ->해당 요청/응답에 대해서만 접근 가능

2.JSP 등장 배경
기존 서블릿에서는 자바코드를 기반으로 문자열을 사용해 HTML과 자바스크립트화면을 구현했음.
JSP는 이와 반대로 html,css와 자바스크립트를 기반으로 JSP요소들을 화면에 구현
즉, 자바기반에 프론트언어를 갖다 붙일것인가?
프론트언어기반에 자바코드를 갖다 붙일것인가의 차이

(1)서블릿의 문제점
-웹프로그램의 화면 기능이 복잡해지므로 서블릿의 자바 기반으로 화면 기능 구현시 어려움이 발생함.
-디자이너 입장에서 화면 구현 시 자바 코드로 인해 작업이 어려워짐
-서블릿에 비즈니스 로직과 화면 기능이 같이 있다 보니 개발 후 유지관리가 불편해짐

(2)해결책
-서블릿의 비즈니스 로직과 화면기능을 분리하자! 즉 백엔드와 프론트엔드의 분리
-비지니스 로직과 화면을 분리함으로써 개발자는 비지니스 로직 구현에 집중하고, 디자이너는 화면 기능구현에만 집중할수 있다.
-개발 후 재사용성과 유지관리가 휠씬 수월해진다!

3.JSP의 구성요소
(1)html태그,css그리고 자바스크립트 코드
(2)JSP 기본태그
(3)JSP 액션태그
(4)개발자가 직접 만들거나 프레임워크에서 제공하는 커스텀 태그

4.톰캣과 JSP의 작동 원리
브라우저에서 JSP를 요청->JSP는 내부적으로 톰캣에서 변환과정을 거침 -> 브라우저로 출력됨

*톰캣에서 변환과정
(1)변환단계: 컨테이너는 JSP파일을 자바 파일로 변환
(2)컴파일 단계: 컨테이너는 변환된 자바파일을 클래스 파일로 컴파일
(3)실행단계:컨테이너는 class파일을 실행하여 그 결과를 html태그,css그리고 자바스크립트 코드 등으로 브라우저로 전송해 출력

*JSP파일은 화면구현을 담당하기 때문에 html파일처럼 'webapp' 폴더 아래에 위치함.

5.톰캣과 JSP의 작동 원리 예시
브라우저에 hello.jsp 요청 -> 톰캣 컨테이너는 hello.jsp을 읽어와 hello.jsp.java 로 변환-> 톰캣 컨테이너는 hello.jsp.java를 hello.jsp.class로 컴파일 ->톰캣 컨테이너는 hello.jsp.class를 실행해서 결과를 브라우저로 html태그,css그리고 자바스크립트 코드 등으로 브라우저로 전송해 출력

6.JSP 페이지 구성 요소
(1)디렉티브 태그
(2)스크립트 요소:주석문, 스크립트릿,표현식,선언식
(3)표현언어
(4)내장객체(내장 변수)
(5)액션태그
(6)커스텀태그

7.디렉티브 태그
(1)페이지 디렉티브 태그: JSP페이지의 전반적인 정보를 설정할때 사용
<%@ page 속성1=값1 속성2=값2 속성3=값3% ...>

(2)인클루드 디렉티브 태그: 열러 웹페이지에서 공통으로 사용되는 JSP페이지를 미리 만들어 놓고 요청시 부모 웹페이지에 추가해서 사용하는 방법
<%@ include file="공통기능.jsp %>

(3)태그라이브 디렉티브 태그: 개발자나 프레임워크에서 제공하는 태그를 사용할때 사용

8.스크립트 요소기능
JSP페이지에서 여러가지 동적인 처리를 제공하는 기능
<% 자바 코드 %>
<% %> ->스크립트릿 이라고 부름

9.스크립트릿 종류
(1)선언문: JSP에서 변수나 메서드를 선언할때 사용
선언문안에 선언한 변수나 메서드는 서블릿클래스의 변수나 메서드로 변환됨
<%! 멤버변수 or 멤버메서드 %>

(2)스크립트릿 : JSP에서 자바 코드를 작성할 때 사용
<% 자바 코드 %>

(3)표현식: JSP에서 변수의 값을 출력할 때 사용
주의 사항 표현식 안에는 ';' 를 쓰면 안됨
<%=값 or 자바변수 or 자바식 %>

10.JSP주석문

<!-- html 주석 -->
<%//자바 주석 %> 스크립트릿은 자바코드를 쓰는곳이라 자바주석을 쓸수 있다.
<%--JSP 주석 --%>

11.JSP내장객체(내장 변수)
JSP가 서블릿으로 변환시 컨테이너가 자동으로 생성 시키는 서블릿 멤버 변수

12.내장객체들의 스코프
page ->한번의 요청에 대해 하나의 jsp페이지만 공유.
request ->한번의 요청에 대해 같은 요청을 공유하는 JSP페이지를 공유 합니다.
session->같은 브라우저에서 공유.
application ->같은 애플리케이션에서 공유.

첫페이지에서는 request,session,application 모두 나옴

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
request.setAttribute("id", "kim");
session.setAttribute("name", "김자바");
application.setAttribute("addr", "관악구 신림동");
%>

<%
String id =(String)request.getAttribute("id");
String name=(String)session.getAttribute("name");
String addr=(String)application.getAttribute("addr");
%>

아이디: <%=id %><br>
이름: <%=name %><br>
주소: <%=addr %><br>

<a href="appTest02.jsp">두번째 페이지로 이동합니다.</a>

</body>
</html>

두번째 페이지 에서는 request는 null값이 나옴. 나머지는 다나옴
왜?다른페이지로 넘어갈때 request 객체를 다른 jsp파일로 포워딩 해서 공유해야는데, 공유가 안되어 있음

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
String id =(String)request.getAttribute("id"); 
String name=(String)session.getAttribute("name");
String addr=(String)application.getAttribute("addr");
%>

아이디: <%=id %><br>
이름: <%=name %><br>
주소: <%=addr %><br>
</body>
</html>

다른 브라우저에서 켜면 request객체와 session객체는 null값이 나옴
request는 위에 설명한것 처럼 request객체공유가 안되어 있고,
session은 브라우저에서만 공유됨

profile
좋은개발자가 되기위한 삽질기록 노트

0개의 댓글