230831(목)
<<복습>>
~ 9/5 : JSP&Servlet
9/6 ~ 9/22 : 스프링(Spring)
9/22 : 시험
1. Servlet의 주요역할?
- 클라이언트에서 보내는 주요정보(url-get, body-post 등)를 추출해서 가공하는 역할
- GET : url상에서 노출이 되고, 길이에 제한을 받는다. -> 이름=값&이름=값...
- POST : body에 주요정보가 들어감. -> 이름=값&이름=값...
- 이름=값&이름=값... : form encoding -> default값임
- 바이너리 데이터가 추가 : 다른 인코딩 방법을 취해야 함.
- String = request.getParameter(이름)
1) 정보 추출 (폼 데이터를 추출하기)
2) input type="text" name=" " value =" "
3) 사용자가 데이터를 입력 안하는 경우엔 어떻게 넘어가는지 알아야 함
* input type = "text" 인 경우에는 값이 입력되지 않아도 넘어감. : 비어있는 문자열("") 리턴됨.
* input type = "checkbox" 인 경우에는 값이 입력되지 않으면 넘어가지 않음. : null이 리턴됨.
* null이 리턴된 경우 체크해야 할 것 : 1. 오타체크(name이 일치하는지) 2. 체크박스에 값이 입력되지 않았는지
4) 에러가 났을 때 체크해야 할 것 : 1. 예외메세지, 2. 나의 코드 찾기(보통 스텍트레이스 위쪽에 우리 코드가 있음)
5) URL 관리 : 서블릿의 url은 어노테이션에서 결정함.
* 컨텍스트명 뒤에 웹 서블릿 url이 붙음.
* 컨텍스트명은 기본적으로 프로젝트명으로 세팅됨. (필요하다면 변경 가능)
* jsp의 url : 파일경로
* url은 대소문자를 구분함. -> 그래서 원칙을 주는 것이 좋다. 예를 들어서 url은 무조건 소문자로만 작성..
form 제시 -> submit에서 서블릿으로 보냄 -> 정보추출 -> 출력 -> jsp로 보냄 -> 내용을 보여줌.
<<본 수업>>
파일 명 지을 때 : 대상_작업의 종류(create, read, update, delete)
ex) travel_add
<ServletConfig API 를 활용한 초기화 파라미터 사용>
1. 서블릿 초기화 시 공통적으로 적용하는 작업
- 파일 업로드 디렉토리 설정
- JDBC 설정 정보(드라이버, 계정 등)
- 서블릿 코드에 적지 않고 web.xml에 설정
- 설정 변경되더라도 소스 재 컴파일 필요 없음
2. 초기화 파라미터
- web.xml에 저장되는 초기화 설정 값
- ServletConfig API로 접근
- 여러 서블릿에서 공유하는 것이 아니고 등록된 서블릿에서만 접근 가능
- @WebInitParam 어노테이션 이용 가능
3. @WebInitParam 어노테이션을 이용한 초기화 파라미터 등록
- @WebServlet 어노테이션 내에 initParam 속성에 @WebInitParam 어노테이션으로 지정
<ServletContextAPI>
1. ServletContext
- 웹 어플리케이션마다 하나씩 생성되는 객체 -> 어플리케이션 객체
- 다수의 JSP, 서블릿에서 공유 가능
- 웹 어플리케이션과 Life Cycle이 일치 -> application scope
2. Scope
- 설정된 데이터를 인식 가능한 범위
* Context : 문맥, 상황
* Tomcat에는 여러 서버가 올라올 수 있음. (chapter02, chapter03 ... test 등..)
3. ServletConfig API
- 1개의 서블릿에만 영향을 미침 VS ServletContext API - 다수의 서블릿에서 영향을 미침
4. ServletContext API의 변수
- life time
- access scope
- 톰캣이 기동될때 생성되고, 종료될때 사라짐.
5. JSP/Servlet의 Scope
- Application scope (지금 배우는 내용)
* 어플리케이션의 Life Cycle과 동일한 범위
* 웹 어플리케이션이 존재하는 동안 모든 서블릿과 JSP에서 접근 가능
* ServletContext 객체
- Session scope
* 브라우저의 Life Cycle과 동일
* 브라우저가 처음 요청을 보낸 시점에서 브라우저가 닫힐 때까지 범위
* 로그인 구현시 이용
* HttpSession 객체
- Request scope
* 브라우저에서 요청하고 서버에서 응답하는 범위
* HttpServletRequest 객체
* 한 개의 요청보냈을 때 관리되는 scope임
- Page scope
* 현재 브라우저에 보여지는 웹 페이지 자체
* this 키워드
* 하나의 요청에 대해서 여러 페이지가 관여를 해서 응답을 할 때 운영되는 정보
* 페이지가 바뀌면 사라짐
6. ServletContext 객체의 핵심 기능
- 여러 서블릿에서 사용가능한 초기화 파라미터 사용 -> 컨텍스트 파라미터
- 서블릿에서 파일 접근 가능 - 읽기 모드만 가능
- Application scope에 해당하는 속성을 저장, 조회
- 서블릿의 getServletContext() 메서드로 추출
ServletContext sc = getServletContext();
- setAttribute : 관리 요청 ==> getAttribute : setAttribute를 꺼내서 관리
- (application, session, request, page) scope 모두 setAttribute와 getAttribute를 사용함.
- setAttribute의 첫번째 파라미터값 name은 String 타입이고, 두번째 파라미터값 value는 Object 타입이다.
7. 컨텍스트 파라미터 설정
- web.xml에 설정
8. 어플리케이션의 Life Cycle
- Tomcat 컨테이너가 시작될 때 웹 어플리케이션 초기화
- Tomcat 컨테이너가 종료될 때 웹 어플리케이션 제거
9. 웹 어플리케이션의 초기화, 제거 이벤트 감지
- ServletContextListener API
- 언제 초기화되고 제거 되었는지 쉽게 파악
- 예) JDBC의 Pooling 기법 (Connection 관리)
* 웹 어플리케이션 시작 시 Pooling 활성화
- contextInitialized(event) : 기동 시 호출
- contextDestroyed(event) : 종료 시 호출
* getServletContext() : 서블릿 메서드, 서블릿이 아닌 곳에서는 사용할 수 없음. -> ServeltContextEvent를 통해서 서블릿이 아닌 곳에서 데이터를 받을 수 있다.
<Filter API>
1. Filter
- 서블릿이 요청 받기 전과 결과를 웹 브라우저에 응답하기 전에 특정 작업을 수행할 수 있도록 지원
- 선처리 작업(pre-processing) : 요청 필터(Request Filter)
* 웹 컴포넌트가 실행되기 전에 수행
- 후처리 작업(post-processing) : 응답 필터(Response Filter)
* 응답되기 전에 작업을 수행
- 다수의 Filter를 체인으로 연결 가능
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
//선처리
System.out.println("MyFilter 요청필터 코드작업");
request.setCharacterEncoding("UTF-8");
chain.doFilter(request, response);
//후처리 - doFilter 뒤에 있는 것은 doGet과 doPost 작업 이후에 이뤄짐.
System.out.println("MyFilter 응답필터 코드작업");
}
<url-pattern의 개요>
1. 확장자 패턴
- *.확장명
- 주의사항 : /으로 시작하면 안됨
- Spring, Struts, Struts2 등의 프레임워크에서 많이 사용하는 방법
<서브릿과 JDBC 연동>
<커넥션 풀(Connection Pool 기능)>
1. Tomcat
-> 이번에 사용되는 Tomcat 라이브러리는 톰캣설치폴더 - lib 에 있는 tomcat-dbcp.jar 파일 안에 있다.
<JSP의 개요>
1. JSP(Java Server Page)
- 태그 기반의 웹 컴포넌트로서
2. JSP 동작 3단계
- 변환 단계
* 요청된 JSP 파일은 파일명_jsp.java 파일명을 가진 서블릿으로 변환
- 컴파일 단계
* 변환된 서블릿을 컴파일하는 단계
* 컴파일 에러가 발생하면 변환되지 않음
* 파일명_jsp.class 형식의 파일 생성
- 실행 단계
* 컴파일 된 파일명_jsp.class 파일을 실행시키는 단계
- 생성, 수정때 위와 같은 작업을 거침.
3. 서블릿과 JSP 비교
4. JSP 스크립팅 요소
- JSP 페이지가 서블릿으로 변환시 JSP 엔진에 의해 처리
5. 주석 태그
- JSP 페이지 주석
<%-- --%>
6. JSP 지시어(Directive tag)
- 해당 페이지를 어떻게 처리할 것인지에 대한 설정 정보를 지시하는 용도
7. page 지시어
- <%@ 속성명="속성값" 속성명2="속성값2"%>
8. include 지시어
- 현재 페이지에서 다른 html 및 jsp 페이지를 삽입할 수 있는 방법 제공
- 각 페이지마다 공통적인 내용을 가지는 경우 매번 작성하지 않고 삽입
- footer, header, side 영역의 공통 내용 처리
<정적, 동적 개념>
- 정적 : 동작하지 않는 파일
- 동적 : 변수를 이용해서 동작하는(변화하는) 파일
9. JSP 선언 태그(Declare tag)
- 자바의 멤버 변수와 메서드를 선언할 때 사용
10. 내장 객체