JSP 기본
Java Server Pages, 동적 페이지를 작성하는데 사용되는 자바의 표준 기술.
Request 기본 객체
: 클라이언트가 보낸 정보를 확인 할 수 있다.
클라이언트IP = <%= request.getRemoteAddr() %>
요청정보길이 = <%= request.getContentLength() %>
요청정보 인코딩 = <%= request.getCharacterEncoding() %>
요청정보 컨텐츠타입 = <%= request.getContentType() %>
요청정보 프로토콜 = <%= request.getProtocol() %>
요청정보 전송방식 = <%= request.getMethod() %>
요청 URI = <%= request.getRequestURI() %>
컨텍스트 경로 = <%= request.getContextPath() %>
서버이름 = <%= request.getServerName() %>
서버포트 = <%= request.getServerPort() %>
Response 기본 객체
: request와 반대의 기능. 웹브라우저에 보내는 응답 정보를 담는다.
- 헤더 정보 입력, 리다이렉트 하기
request는 너(클라이언트, 사용자)
response는 나(서버, 개발자)
인코딩, 디코딩
JSP 처리 과정
jsp를 실행한다는 말은 곧 jsp 페이지를 컴파일한 결과인 서블릿 클래스를 실행한다는 의미가 된다.
'jsp 페이지를 컴파일 한 서블릿' 을 실행한다.
버퍼
: 헤더에 설정할 수 있다. true, false 데이터 용량설정. 기본설정은 8kb
자세한 내용 103페이지
<%@ page buffer="1kb" autoFlush="false" %>
War : Web Application Archive의 약자로 웹 어플리케이션의 구성 요소를 하나로 묶어 놓은 파일이다.
웹 어플리케이션 초기화 파라미터는 언제 사용할까 ?
웹 어플리케이션을 초기화하는 데 필요한 설정 정보를 지정하기 위해 사용된다.
예를 들어, db연결과 관련된 설정 파일의 경로나, 로깅 설정 파일, 도는 웹 어플리케이션의 주요 속성 정보를 담고 있는 파일의 경로 등을 지정할 때 초기화 파라미터를 사용한다.
error페이지 web.xml 지정하기.
<error-page>
<error-code>404</error-code> //에러 상태 코드
<location>/error/error404.jsp</location> //에러 페이지 경로
</error-page>
<error-page>
<error-code>500</error-code>
<location>/error/error500.jsp</location>
</error-page>
<error-page>
<exception-type>java.lang.NullPointerException</exception-type> //에러 타입
<location>/error/errorNullPointer.jsp</location> //페이지 경로
</error-page>
주요 응답 상태 코드
200 : 요청을 정상적으로 처리함.
307 : 임시로 페이지를 리다이렉트함
400 : 클라이언트의 요청이 잘못된 구문으로 구성됨
401 : 접근을 허용하지 않음
404 : 없는 URL
405 : 요청한 메서드(전송방식)를 허용하지 않음
500 : 서버 내부 에러가 발생
503 : 서버 터짐
에러 페이지 우선순위
- page 디렉티브 설정.
- web.xml 파일의 익셉션타입 설정 <exception-type>
- web.xml 에러코드 설정 <error-code>
<jsp:include>실행 과정
- main이 웹브라우저의 요청 받음
- A를 출력 버퍼에 저장
- include만나서 sub.jsp 이동 B내용 출력 버퍼에 저장
- 다시 main.jsp C내용 출력 버퍼에 저장
- 출력 버퍼의 내용을 응답 데이터로 전송
jsp:pram은 include에서만 먹힌다.
166페이지 참조
include 디렉티브의 장점 // 172페이지
- 모든 jsp페이지에서 사용하는 변수 지정
- 저작권 표시와 같은 모든 페이지에서 중복되는 간단한 문장
절대경로와 상대경로
절대경로 : / 로 시작
상대경로 : .. 시작
기본적으로 절대 경로를 사용한다. 이유는 관련 파일을 쉽게 찾을 수 있기 때문이고
상대 경로를 사용할 땐 이동할 페이지가 같은 폴더이거나 현재 폴더의 하위 폴더일 경우 사용한다.
forward는 같은 request 기본 객체를 공유한다.
<jsp:useBean>
<jsp:useBean id="[빈이름]" class="[자바클래스이름]" scope="[범위]" />
<jsp:useBean id="member" scope="request" class="chap08.member.MemberInfo" />
id: 객체에 접근할 때 사용할 이름 지정
class : 자바빈 클래스의 완전한 이름
scope : 객체를 저장할 영역. page, request, session, application 디폴트는 page
200페이지 참조
useBean을 사용하지 않는 이유는 el표기법과 mvc패턴으로 인해 비지니스 로직은 java단에서 처리함.
쿠키
: 웹브라우저가 보관하는 데이터. cookie
쿠키생성
Cookie cookie = new Cookie("name", URLEncoder.encode("최범균", "utf-8"));
response.addCookie(cookie);
수정, 삭제
Cookie[] cookies = request.getCookies();
if (cookies != null && cookies.length > 0) {
for (int i = 0 ; i < cookies.length ; i++) {
if (cookies[i].getName().equals("name")) {
Cookie cookie = new Cookie("name",
URLEncoder.encode("JSP프로그래밍", "utf-8"));
response.addCookie(cookie);
}
}
}
Cookie[] cookies = request.getCookies();
if (cookies != null && cookies.length > 0) {
for (int i = 0 ; i < cookies.length ; i++) {
if (cookies[i].getName().equals("name")) {
Cookie cookie = new Cookie("name", "");
cookie.setMaxAge(0);
response.addCookie(cookie);
}
}
}
cookie.setMaxAge(0); 삭제는 시간을 0으로 주면 된다. 별도의 삭제 기능은 제공하지 않는다.
세션
: 서버에 값을 저장. 웹브라우저바다 하나의 세션 생성.
쿠키가 클라이언트 측의 데이터 보관소라면 세션은 서버 측의 데이터 보관소.
쿠키 vs 세션
- 세션이 쿠키보다 보안성이 높다.
- 세션은 여러 서버에서 공유할 수 없다.
세션 시간 설정
web.xml
<session-config>
<session-timeout>60</session-timeout> //분단위
</session-config>
객체
session.setMaxInactiveInterval(60*60); //초단위
표현 언어(Expression Language)
- jsp의 네가지 기본 객체가 제공하는 영역의 속성 사용
- 수치 연산, 관계 연산, 논리 연산 제공
- 자바 클래스 메서드 호출 기능
- 쿠키, 기본 객체의 속성 등 jsp를 위한 표현 언어의 기본 객체 제공
- 람다식을 이용한 함수 정의와 실행 (EL3.0)
- 스트림 api를 통한 컬렉션 처리 (EL3.0)
- 정적 메서드 실행 (el3.0)
비교 연산자
- == eq
- != ne
- < lt
- > gt
- <= le
- >= ge
${someValue == '2004'}
(someValue.compareTo("2004")==0)
문자열을 비교할 땐 compareTo 메서드 사용.
논리 연산자
- && and
- || or
- ! not
empty 연산자
: null, 빈문자열, 길이가0, 빈 map, 빈 collection 이면 true // 그 외 false
문자열 연결은 += 사용.
메서드호출 , 람다식 , 스트림API
자바 8 스트림과 EL 스트림이 있다.
EL 비활성화 방법
xml / page디렉티브
표준 태그 라이브러리(JSTL)
: 가독성이 좋아진다.
<c:if test="${param.name == 'bk'}"> test= 조건식
<c:choose>
<c:when test="${param.name == 'bk'}" > </c:when>
<c:when test="${param.age>20}" > </c:when>
<c:otherwise> </c:otherwise>
</c:choose>
<c:forEach var="i" items="${intArray}" begin="2" end="4" varStatus="status">
${status.index}-${status.count}-[${i}]-${status.last } <br />
</c:forEach>
<c:forTokens var="token"
items="빨강색,주황색.노란색.초록색,파랑색,남색.보라색"
delims=",.">
${token}
</c:forTokens>
varStatus 제공하는 프로퍼티
- indet : 루프 실행에서 현재 인덱스
- count : 루프 실행 횟수
- begin : begin 속성값
- end : end 속성값
- step : step 속성값
- firtst : 현재 실행이 첫 번째 실행인 경우 true
- last : 현재 실행이 루프의 마지막 실행인 경우 true
- current : 컬렉션 중 현재 루프에서 사용할 객체