23.01.30

이동욱·2023년 8월 6일
0

NaverCloudCamp

목록 보기
20/42

학습내용

  1. jsp 기본 객체
  2. errorPage/isErrorPage
  3. <jsp:include>, <%@ include %>
  4. <%!>
  5. static context, dynamic context
  6. 주석
  7. MVC
  8. object scope
  9. forward/redirect(navigation)

jsp

<% %> 태그안에 작성하면 servlet에 service()안에 구현된다.
<%@ page session = "true" %> session 자동으로 생성
<%@ page language="java"%> 변환규칙으로 java로 만들어라
<%@ page isThreadSafe="true" %> singlethreadsafe deprecate 이유
extends는 사용 못한다.

errorPage, iserrorPage

*에러가 발생 할 수 있는 페이지에 작성*
<%@ page errorPage="03JSPErrorPage.jsp"%>

해당 태그가 존재할때 에러가 발생하면 그 전까지 호출한 jsp를 실행하다 해당 에러 페이지로 보낸다.

*에러 발생 시 보여줄 페이지에 작성*
<%@ page isErrorPage="true"//default는 false %>

에러가 발생하면 보여 줄 페이지이며 isErrorPage = true여야지 servlet으로 변환시 excpetion 객체를 생성하고 발생 한 예외를 담는다.

buffer

<@page buffer = "8kb" autoFlush="true">

jsp에서 servlet으로 변환 될 때 기본으로 생성되는 객체이며 client로 parsing된 html을 매번 보내는것이 아닌 버퍼에 담았다가 버퍼가 가득 차면 보내주는 역할을 한다.
excpetion 발생하면 buffer는 clear된다.

<jsp:include>, <%@ include %>

<jsp:include  page="05JSPActionInclude.jsp"/>
  1. jps include
  • 기존 jsp를 실행하다 해당 태그를 만나면 05JSPActionInclude.jsp를 실행 한 뒤 다시 돌아와 나머지를 jsp code를 실행한다.
    기존의 jsp 위에서 실행하는 것이 아닌 독립적으로 실행하는것이기에 호출한 jps의 필드들을 사용 할 수 없다.
    명시한 jsp를 실행할때 request와 response out 객체들을 넘겨준다.
<%@include  page="05JSPActionInclude.jsp"%>
  1. include
    해당 태그가 존재하면 servlet으로 변환시 05JSPActionInclude.jsp의 코드를 복사하여 그래도 실행한 jsp에 붙혀넣는다.
    변환되며 붙혀넣기에 호출한 jsp의 필드들을 사용 가능하다.

<%!>

  1. <%%> 태그는 변환시 servlet service()내에 java code로 생성되기에 local variable만 선언이 가능하며 field는 선언이 불가능하다.

  2. <%!> 태그를 통해 service() 외부에 field나 method를 생성 할 수 있다.(생성한 field나 method는 모든 thread에서 접근 가능하기에 동기화 문제 발생!!)

static context, dynamic context

1
<% 
	for(int i=1;i<10;i++){	
		out.println ( i+" 단을 출력합니다. <br/>");
		for(int j=1;j<10;j++) {
			out.println( i+" X "+j+ " = "+ i*j+"<br/>" );
		} 
	}
%>

jsp는 servlet에서 처리하기 힘든 tag를 담당하기 위해 만든 기술이다 따라서 1번 코드처럼 한 tag 안에 모든 java코드를 넣는것은 권장하는 방법이 아니다.

2
<% for(int i=1;i<10;i++){ %>	
	<%=i%>단을 출력합니다.<br/>
	<% for(int j=1;j<10;j++) {%>
	<%=i%> X <%=j%> = <%=i*j%><br/>
	<%}} %>

따라서 2번처럼 요청에 따라 변하는 dynamic context에만 <%%>를 사용하여 처리하는것을 권장한다.

주석(왜 안보이는지 동작 원리, 변환 과정을 생각하면서 보기)

  • jsp(o) => .java(o) => .class(o) => browser(x) => source보기(o)
  • <% //java 주석 %>
    jsp(o) => .java(x) => .class(x) => browser(x) => source보기(x)
  • <%-- jsp 주석 -->
    jsp(x) => .java(x) => .class(x) => browser(x) => source보기(x)

MVC

기존 model1 web arch는 view는 jsp, busniss logic은 bean으로 처리했다 그러나 아직 request.getParameter()과 같은 java code들이 존재한다.
model2 web arch는 view는 오직 화면 출력에만 bean은 busniss logic에만 집중 가능하게 중간에 controller라는 계층을 추가하여 사용자의 입력에 맞는
적절한 bean을 호출해 busniss logic을 처리하고 view를 만드는데 필요한 데이터만을 jsp에 넘겨주어 view 처리에만 집중 가능하게 만들어준다.
요약하자면 model1 web arch에 controller를 추가하여 model은 데이터만을 담당, view는 html만을 담당, controller는 연결과 상태변화를 반영하는 역할을 하게 만들어 모듈화를 하였다.

object scope

  1. request
  • thread가 request를 요청하면 servlet의 service method를 실행한다 이때 service() 로직동안 request라는 객체는 유지되고 여기에 object를 넣거나 뺄 수 있다.
    service가 끝나면 해당 request는 소멸한다
  1. session
  • servlet에서 getSession(jsp에서는 기본적 객체로 존재한다)을 통해 session을 생성하면 session을 제거하거나 만료시간전까지 object를 넣거나 뺄 수 있다.
    오직 session id를 가지는 client만 접근 가능하다.
  1. application
  • was의 메모리에 생성되는 저장 공간이며 모든 thread가 사용 가능하기에 동기화 문제가 발생 할 수 있다!

forward/redirect(navigation)

% request.setAttribute("aaa",new String("connect")); %>
<jsp:forward page="09JSPActionForward.jsp"/>
  1. forward
  • forward 태그를 만나기 전까지 지금까지 진행한 내용의 버퍼를 비우고 해당 페이지로 보낸다(request scope 사용 가능)
<% request.setAttribute("aaa", new String("connect")); %>
<% response.sendRedirect("09JSPActionForward.jsp"); %>
  1. redirect
  • sendRedirect 태그를 만나기 전까지 코드를 실행하고 redirect 태그를 만나면 브라우저에 해당 경로로 다시 요청하라는 response를 보낸다.
    이후 브라우저는 response안의 경로로 다시 requets를 보낸다.(브라우저에 response를 보내기에 request scope는 사용할 수 없다)
profile
Backend Developer

0개의 댓글