MVC 패턴의 Controller 역할로서 서블릿이 사용된다.

서블릿을 구현할 때 반드시 상속받아야하는 클래스: java.servlet.http.HttpServlet

 

포워드 기능: 하나의 서블릿에서 다른 서블릿이나 JSP와 연동하는 방법

포워드 기능이 사용되는 용도

요청에 대한 추가 작업을 다른 서블릿에게 수행하게함

요청에 포함된 정보를 다른 서블릿이나 JSP와 공유함

요청에 정보를 호함시켜 다른 서블릿에 전달할 수 있음

모델2 개발 시 서블릿에서 JSP로 데이터 전송에 사용

 

RequestDispatcher방법

일반적으로 포워딩 기능을 지칭

서블릿이 직접 요청하는 방법

RequestDispatcher클래스의 forward() 메서드 이용

 

dispatch를 이용한 포워딩: 서블릿에서 jsp로 데이터 전송을 할 때 주로 사용

클라이언트의 브라우저를 거치지 않고 서버에서 포워딩이 진행

클라이언트의 웹브라우저에서 첫번째 서블릿에 요청합니다.

첫 번째 서블릿은 RequestDispatcher를 이용해 두 번째 서블릿으로 포워드 합니다.

 

서블릿에서 다른 서블릿 또는jsp로 대량의 데이터를 공유하거나 전달하고 싶을 때 바인딩 기능을 사용한다.

데이터양이 적을 때는 get방식 이용

HttpServletRequest, HttpSession, ServletContext에서 사용. 저장된 자원을 프로그램 실행 시 서블릿이나 jsp에서 공유하여 사용

바인딩할 때 사용하는 메서드가 

setAttribute(String name, Object obj) : 데이터를 각 객체에 바인딩합니다.

getAttribute(String name): 각 객체에 바인딩된 정보를 name으로 가져옵니다. 반환형 Object=> 형변환 필요

removetAttribute(String name) : 각 객체에 바인딩된 자원을 name으로 제거합니다.

 

상태정보 유지

HTTP는 비연결성과 무상태로 동작하는 프로토콜이라서 이전 연결 때의 상태 정보를 서버가 유지해주지 않는다.

상태유지기술: 상태정보를 일정 시간 동안 지속해서 유지해주는 기술

필요성

HTTP의 비연결성을 보완

장바구니와 같이 여러 페이지로 이동하더라도 사용자 정보와 필요 정보 유지 필요

페이지 간의 지속성 서비스를 제공하기 위한 기법

hidden속성: html의 <input type="hidden" /> 태그를 이용하여 웹 페이지들 사이의 정보를 공유

GET 방식: GET 방식으로 URL 뒤에 정보를 붙여서 다른 페이지로 전송

쿠키: 클라이언트 PC(사용자 측에 정보 저장)의 Cookie 파일에 정보를 저장한 후 웹 페이지들이 공유

세션: 서버 메모리에 정보를 저장한 후 웹 페이지들이 공유, 자바의 모든 객체

 

쿠키 특징

정보가 클라이언트 PC에 저장됨

저장 정보 용량에 제한이 있음(파일 용량은 4kb)

보안이 취약함

클라이언트 브라우저에서 사용 유무를 설정할 수 있음

도메인당 쿠키가 만들어짐(웹사이트당 하나의 쿠키)

문자열 형태만 가능

 

1. 브라우저로 사이트에 접속

2. 서버는 정보를 저장한 쿠키 생성

3. 생성된 쿠키를 브라우저로 전송

4. 브라우저는 서버로부터 받은 쿠키 정보를 쿠키 파일에 저장

5. 브라우저가 다시 접속해 서버가 브라우저에게 쿠키 전성을 요청하면 브라우저는 쿠키 정보를 서버로

6. 서버는 쿠키 정보를 이용해 작업을 함.

 

Persistence 쿠키

파일로 생성, 쿠키를 삭제하거나 쿠키 설정 값이 종료된 경우, 최초 접속 시 서버로 전송, 로그인 유무 또는 팝업창을 제한할 때

Session 쿠키

브라우저 메모리에 생성, 브라우저를 종료한 경우, 최초 접속 시 서버로 전송되지 않음, 사이트 접속 시 Session 인증 정보

 

쿠키API 특징

javax.servlet.http.Cookie 사용(클래스)

HttpServletResponse의 addCookie()메서드를 이용해 클라이언트 브라우저에 쿠키를 전송한 후 저장

HttpServletRequest의 getCookie()메서드를 이용해 쿠키를 서버로 가져온다.

 

int getMaxAge(초단위): 쿠키의 최대지속 시간을 초단위로 반환 -1일 경우 브라우저가 종료되면 바로 쿠키도 만료되게 된다.

String getName(): 쿠키의 이름

 

쿠키 생성 

쿠키는 (이름, 값)의 쌍 정보를 입력하여 생성.

쿠키의 이름은 알파벳과 숫자로만 구성되고, 쿠키 값은 공백, 괄호, 등호, 콤마, 콜론, 세미콜론 등은 포함 불가능

Cookie cookie = new Cookie(name, value);

 

클라이언트의 컴퓨터에 파일 형태로 저장

내장객체 response의 addCookie메소드를 이용

response.addCookie(cookie)

 

세션

HttpSession: 인터페이스 타입, HttpServletRequest의 getSession()이나 getSession(true)메서드를 이용하여 생성할 수 있다.

HttpSession 객체가 생성될 때는 요청을 보내온 클라이언트 정보, 요청 시간 정보 등을 조합한 세션ID가 부여되며, 이 세션ID는 클라이언트 측에 쿠키 기술로 저장된다.

서버에 생성되며 클라이언트에는 세션ID(로그인을 하면 동일한 세션 ID를 사용 , 톰캣의 기본 값은 30분)가 쿠키 기술로 저장되어 각 클라이언트에 대하여 생성되는 HttpSession 객체를 클라이언트마다 개별적으로 유지 및 관리.

 

클라이언트가 서버에 요청하는 구조

1.요청

2.Session 객체 생성: getSession()

3.세션 ID와 상태 정보 저장

4.응답+세션ID

5.요청 + 세션ID

6.세션ID로 클라이언트와 연결 기능 유지

 

 

'JSP' 카테고리의 다른 글

MVC 패턴  (0) 2023.07.17
EL, JSTL  (0) 2023.07.14
JSP  (0) 2023.07.03

경로 설정

.jsp라서 servletExample까지는 필요x

"subject/subjectSearchSuccess.jsp"

servlet을 불러올때 프로젝트명부터

"/servletExample/subjectDelete"


MVC 패턴: 모델, 뷰, 컨트롤러 구분 작업 분리, 결합도를 최소화, 유지보수 높이고, 개발자들이 각각 맡은 영역에만 집중할 수 있게 해서 개발의 효율성을 극대화할 수 있는 장점이 있다. 사용자의 입력을 받아서, 처리를 하고 결과를 다시 사용자에게 표시하기 위한 최적화된 설계

 

: 클라이언트와 서버 간의 인터페이스 역할을 하는 영역, 화면 구성을 담당 (HTML, CSS, JSP를 사용하여 구현)

컨트롤러: 뷰와 모델을 연결하는 중계 역할, 클라이언트가 전달한 파라미터를 추출하여 모델로 전달, 처리 결과 페이지를 보여준다.  (JSP, 서블릿 사용)

1. 뷰에서 들어온 요청을 받는다.

2. 클라이언트가 전달한 파라미터 추출

3. 파라미터의 유효성 검사, 실패하면 다시 뷰

4. 서비스 객체의 메서드 호출, 파라미터를 서비스 객체로 전달

5. 출력 뷰 페이지로 이동

 

모델: 서비스와 데이터베이스 처리를 담당하는 역할, 각 로직처리, DB 질의 처리기능, 서비스 처리 담당 Service (or Business) 객체, 데이터베이스 처리 담당하는 DAO 객체 (평범한 자바: Plain Old Java Object(POJO))

DAO: 데이터베이스 처리에 관한 기능만으로 구성

 

DTO(Data Tranfer Object, Domain Object DO, Value Object  VO): 데이터를 다른 logic에게 전송 및 반환할 때 효율적으로 데이터를 사용할 수 있게 클래스 작성. 

 

프런트 컨트롤러 디자인 패턴(front controller) : 대표 컨트롤러를 두고 뷰에서 들어오는 모든 요청을 담당하게 하면 웹 애플리케이션을 실행하는 모든 요청 일괄적 처리

 

프런트 컨트롤러 설정

1. 클라이언트의 서비스 요청 시 요청되는 URL 패턴의 규칙 지정

2. 지정된 URL의 패턴과 프론트 컨트롤러 연결

 

URL 패턴: 실제 서블릿의 매핑 정보 (서블릿 매핑 시 사용되는 가상의 이름), /슬래시로 시작 서블릿 매핑이름으로 사용되는 URL 패턴의 종류는 정확히 이름까지 일치하는지, 디렉토리까지만 일치하는지, 확장자만 일치하는지에 따라 세가지로 나누어짐.

 

URL 패턴 지정: '~.do', '~.action'과 같은 단어가 공통으로 들어가게 URL을 지정

FrontController 패턴을 적용한 서블릿에서 고려해야 되는 사항: 사용자가 어떤 동작을 요청했는지 식별. 사용자가 서블릿에 요청할 때, 서블릿이 사용자의 요청을 식별할 수 있도록 지원

http: //IP번호:포트번호/context명/식별값

 

서브 컨트롤러: 프런트 컨트롤러 다음에 실제 서비스를 처리하는 컨트롤러. (로직은 서브에서 처리)

 

Command 패턴: 클라이언트의 각 요청을 처리하는 별도 클래스를 제공하는 구현 패턴. 하나의 명령어를 하나의 클래스가 처리하도록 설계

 

3계층 아키텍처

프레젠테이션 계층, 비즈니스 계층, 영속 계층

클래스 기능
DispatcherServlet 유일한 서블릿 클래스, 모든 클라이언트의 요청을 가장먼저 처리하는 Front Controller
HandlerMapping 클라이언트의 요청을 처리할 Controller 매핑
Controller 실질적인 클라이언트 요청을 처리  //자바(인터페이스) 추상메서드 선언
ViewResolver Controller가 리턴한 View 이름으로 실행될 JSP 경로 완성

 

다형성

구현=> 슈퍼클래스 참조변수 = new 서브클래스1()

                                               = new 서브클래스2()

       => 인터페이스 참조변수 = new 구현클래스1()

                                               = new 구현 클래스2()

 

DispatcherServlet -> controller -> service ->DAO -> DB

 

① 클라이언트가 메뉴에서 게시판 메뉴를 클릭하면 /getBoardList.do를 요청하면 DispatcherServlet이 요청을 받는다.

② DispatcherServlet은 HandlerMapping 객체를 통해 게시판 목록 요청을 처리할 GetBoardListController 를 검색하고

③ 검색된 GetBoardListController의 execute() 메서드를 호출하면 게시판 목록을 보여주기 위한 로직이 처리된다.

④ 로직 처리 후에 이동할 화면 정보를 리턴하면

⑤ DispatcherServlet은 ViewResolver를 통해 접두사와 접미사가 붙은 JSP 파일의 이름과 경로를 리턴받는다.

⑥ 그리고 최종적으로 JSP를 실행하고 실행 결과가 브라우저에 응답된다.

 

Connection 객체란?

자바에서 DB와 연결하기 위해 사용하는 객체입니다.

파라미터는 Data의 위치(URL), 기타 정보(DB 접속 ID, 패스워드, 포트 번호)

DriveManager의 getCOnnection()메소드를 호출하여 생성할 수 있습니다.

 

(1) createStatement()

SQL문을 DB에 전달하기 위한 Statement 객체를 생성한다.

 

(2) preparedStatement(String sql)

파라미터가 포함된 SQL문을 DB에 전달하기 위한 preparedStatement 객체를 생성한다.

(3) prepareCall(String sql)

DB의 Stored Procedure를 호출하기 위해 CallableStatement객체를 생성한다.

(4) close()

현재 커넥션 객체에 할당된 시스템 리소스를 즉시 반환한다.

필터로 구현할 수 있는 기능에 대한 목록

서블릿이 호출되기 전에 서블릿 요청을 가로채는 기능

서블릿이 호출되기 전에 서블릿 요청 내용을 점검하는 기능

 

필터: 브라우저에서 서블릿에 요청하거나 응답할 때 미리 요청이나 응답과 관련해 여러가지 작업을 처리하는 기능

 

'JSP' 카테고리의 다른 글

상태정보 유지  (0) 2023.08.01
EL, JSTL  (0) 2023.07.14
JSP  (0) 2023.07.03

EL에서 객체에 접근

${<표현1>.<표현2>} 형식 사용

처리과정

  • <표현1>을 <값1>로 변환
  • <값1>이 null이면 null을 리턴
  • <값1>이 null이 아닐 경우 <표현2>를 <값2>로 변환(<값2>가 null이면 null을 리턴)
  • <값1>이 Map, List, 배열인 경우
  • <값1>이 다른 객체이면

표현언어의 주요 기능

기존 표현식보다 편리하게 값을 출력

JSP의 4가지 기본 객체가 제공하는 영역의 속성 사용

집합 객체에 대한 접근 방법 제공

수치 연산, 관계 연산, 논리 연산자 제공

자바 클래스 메서드 호출 기능 제공

표현 언어만의 기본 객체 제공

스크립트 요소(스크립트릿, 표현식, 선언부)를 제외한 나머지 부분에서 사용

 

관련있는 태그들끼리 묶어놓은 단위: 태그 라이브러리

액션태그는 JSP에서 XML유형의 태그 사용, 특별한 동작 기능 수행

액션태그와 커스텀 태그 모두 XML 태그이므로 시작태그, 종료태그 있어야함. 속성 값을 지정, 값에는 반드시 큰따옴표, 작은 따옴표 붙여야함.

같은 태그 이름의 충돌을 피하기 위해 prefix(태그 라이브러리) 사용해야함.

 

JSTL; 필요한 기능들을 모아 놓은 표준 커스텀 태그(사용자 정의 태그)

-자바에서 커스텀 태그 기능을 이용하여 활용 빈도가 높은 태그를 개발, 발표한 것이 자바 표준 라이브러리. JSTL은 표준 커스텀 태그

 

JSTL이 제공하는 분류

Core(c): 변수지원, 제어흐름, URL 관리, 출력,예외 처리

XML(x): XML코어, 흐름제어, XML변환

Internationalization(fmt):지역화, 메시지포맷, 숫자 및 날짜 포맷

Database(sql): SQL

Functions(fn): 집합체 길이, 문자열 처리

 

taglib 지시자: JSP 페이지에서 커스텀 태그의 한 종류인 JSTL태그를 사용하려면 taglib 지시자 사용 필요

<c:set...>: set은 지정된 범위로 평가 값을 변수에 저장

 

var, target 동시 설정 x

-변수값 설정

<c:if...>

<c:choose>: 자바의 switch와 같이 태그 choose는 여러 개의 내부 태그 when 의 속성 test를 만족하면 그 몸체를 처리하는 태그이다.

<c:forEach>

URL 관리 태그: 외부/내부 페이지를 현재 위치에 삽입

<c:import>: 동일한 웹 어플리케이션뿐만 아니라 외부의 다른 자원을 읽어와 포함시킬 수 있도록 해준다.

 

'JSP' 카테고리의 다른 글

상태정보 유지  (0) 2023.08.01
MVC 패턴  (0) 2023.07.17
JSP  (0) 2023.07.03

ResultSet: 특정 SQL 문장을 처리한 결과를 담고 있는 영역

rs ResultSet 타입

 

웹 구조: 웹 브라우저가 있는 클라이언트가 자료를 요청(request), 서버는 요청에 응답(response)

웹 서버는 HTTP를 사용하여 클라이언트에 응답

여러명의 사용자가 동일한 페이지를 요청하여 같은 애플리케이션 프로그램을 처리할 때 1 개의 프로세스만을 할당하고, 사용자의 요청을 쓰레드(Thread) 방식으로 처리

메모리 사용량 및 프로세스 관리 부하 감소로 전체적인 처리량 높음

 

서블릿(servlet): 순수하게 자바를 사용하여 웹 페이지를 동적으로 생성하는 서버 측 프로그램

자바 프로그램에 표현 부분인HTML코드를 모두 포함해야 하므로 로직 처리와 디자인 처리를 분리하기 어려움

 

JSP(JavaServer Pages): HTML 태그 내에 자바 소스코드를 삽입하고 컴파일 시켜 서블릿으로 변환하는 방식, 태그를 사용해 자바 객체를 사용 <%%>안에 자바, 플랫폼에 독립적인 기술 방식,웹 서버에 독립적

 

웹 애플리케이션: 웹을 기반으로 실행되는 프로그램

 

웹 애플리케이션 구성요소

웹 브라우저: 클라이언트, 사용자의 작업 창

웹 서버: 웹 브라우저의 요청을 받아들임

웹 애플리케이션 서버(WAS): 요청된 페이지의 로직 및 데이터베이스와의 연동을 처리

데이터베이스: 데이터의 저장소

 

웹 서버에서 JSP를 실행시키려면 자바 모듈을 이해하는 엔진인 자바엔진(JSP 컨테이너: 하나의 서블릿 프로그램으로 변환) 필요

 

JSON(Javascript Object Notation): 텍스트 기반의 데이터 교환형식 의미, 구문형식은 javascript를 따르지만 언어로부터 완전히 독립적=>서로 다른 프로그래밍 언어간에 데이터 교환을 위해 가장 널리 사용, 공식적인 인터넷 미디어 타입:application/json이며 파일 확장자는 .json

JavaScript에서 하나의 객체 안에 함수와 변수를 함께 그룹화하여 포함시키기 위한 문법의 형태로서 json표기법 사용

 

아파치와 같은 웹서버를 사용한다면 JSP 엔진을 따로 설치 해야 하지만, 톰캣 같은 경우는 톰캣 자체에 웹서버와 JSP엔진이 함께 있으므로 한 번의 설치로 JSP를 운영

자바 확장자 JAR

'JSP' 카테고리의 다른 글

상태정보 유지  (0) 2023.08.01
MVC 패턴  (0) 2023.07.17
EL, JSTL  (0) 2023.07.14

+ Recent posts