Web/JSP

JSP 기본

프로그래멍 2020. 5. 7. 00:00

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의 약자로 웹 어플리케이션의 구성 요소를 하나로 묶어 놓은 파일이다.

 

 

web.xml 초기화 파라미터

웹 어플리케이션 초기화 파라미터는 언제 사용할까 ?

웹 어플리케이션을 초기화하는 데 필요한 설정 정보를 지정하기 위해 사용된다.

예를 들어, 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 : 서버 터짐

 

에러 페이지 우선순위

  1. page 디렉티브 설정.
  2. web.xml 파일의 익셉션타입 설정 <exception-type>
  3. web.xml 에러코드 설정 <error-code>

 

<jsp:include>실행 과정

흐름

  1. main이 웹브라우저의 요청 받음
  2. A를 출력 버퍼에 저장
  3. include만나서 sub.jsp 이동 B내용 출력 버퍼에 저장
  4. 다시 main.jsp C내용 출력 버퍼에 저장
  5. 출력 버퍼의 내용을 응답 데이터로 전송

 

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 : 컬렉션 중 현재 루프에서 사용할 객체