[JSP][국비교육] Day 66

Ga02·2023년 4월 4일

국비교육

목록 보기
60/82

🔍 JSP 액션 태그, Action 태그

JSP문법으로 기본 제공되는 요소

  • JSP페이지에서 수행할 특정 동작(기능)들을 태그로 만들어 놓은 것
  • 자주 개발하여 사용하는 기능들을 기본 태그들로 구현하는 대신 액션 태그를 이용하여 간단히 구현할 수 있음
  • 형식 : <jsp:수행명령어 속성="설정값"></jsp:수행명령어>

    자바코드가 많으면 가독성이 떨어짐 -> 줄일 수 있으면 줄여주기
    자바코드로 구현해야 하는걸 (액션) 태그의 모양으로 바꿔준 것
    자바빈으로 등록하지 않고 자바객체로 사용하는 것도 가능하지만 같은 이유로


🔍 JSP 자바 빈, Java Bean

JSP에서 사용하는 자바 클래스 객체, 인스턴스

  • JSP 컨텍스트 영역에 컨텍스트 정보로 등록된 자바 객체를 자바 빈이라고 부름
  • JSP에서 정보(데이터)를 표현하기 위해 작성된 객체
  • 일반 자바 객체로 만들어진 인스턴스는 자바 영역(스코프)에 보관됨
  • JSP 컨텍스트 영역에 등록하면 컨텍스트 정보로 사용할 수 있음
  • DTO로 만든 클래스를 자바빈 객체로 사용할 수 있음

    Emp emp = new Emp(); 👉🏻 Java 객체
    Java 객체를 JSP라는 컨텍스트 정보로 등록 👉🏻 자바 빈 이라는 개념으로 불리게 됨
    표준적 방법에 맞게 규칙적으로 만들면 자바 빈이 됨

➰ 자바빈 클래스 설계 원칙(규약)

  • 반드시 패키지가 있어야 함 👉🏻 디폴트 패키지에 작성하지 않아야 함
  • public 접근 제한자로 적용
  • 디폴트 생성자가 반드시 있어야 함 👉🏻 매개변수 있는 생성자를 작성한다면 디폴트 생성자를 꼭 직접 작성해야 함
  • 캡슐화가 되어있어야 함
    • 멤버필드의 접근제한자를 private로 지정
    • getter, setter의 접근 제한자를 public으로 지정
  • 모든 멤버필드에 대한 getter, setter를 작성
    getter의 반환타입이 boolean이라면 메소드명의 시작을 get 대신 is로 시작할 수 있음
    JSP 컨텍스트 영역에 등록된 자바 빈의 멤버 필드들은 프로퍼티(Property)라고 부름

➰ <jsp:useBean id="" class="" [scope=""]></jsp:useBean>

id="bean 이름"
class="클래스 이름"
scope="스코프 지정" 👉🏻 생략 가능

자바 빈(Java Bean) 객체로 지정

  • JSP에서 사용할 자바 빈 객체를 생성하고 지정한 스코프 영역에 컨텍스트 정보로 등록
  • scope 속성값
    • page / request / session / application 👉🏻 page가 기본값
<%
	//자바 객체 생성 - 자바 스코프
	Emp emp = new Emp();
    
    //page 컨텍스트 정보로 등록 👉🏻 자바 빈
    pageContext.setAttribute("emp", emp);
    
%>

➰ <jsp:setProperty name="" property="" value="" />

name="bean 이름"
property="필드명"
value="설정값"

자바빈 객체의 프로퍼티 값을 설정

  • DTO클래스의 setter 메소드를 실행
  • DTO클래스의 setter가 정의되어있지 않으면 에러가 발생

➰ <jsp:getProperty name="" property="" />

name="bean 이름"
property="필드명"

자바빈 객체의 프로퍼티 값을 불러옴

  • DTO클래스의 getter메소드를 실행
  • DTO클래스의 getter가 정의되어있지 않으면 에러가 발생

➰ <jsp:include page="" />

page="삽입할 페이지 URL"

<jsp:include page="" >
	<jsp:param value="전달값" name="전달변수이름" />
</jsp:include>

JSP 페이지에서 다른 페이지의 내용을 추가할 때 사용

  • include 지시자와 비슷한 기능을 수행
    • include 지시자 : <%@ include file="" %>
    • include 액션 : <jsp:include page="" />
      ✔ 차이점
  • include 지시자 : JSP코드를 하나의 JSP로 합치고 나서 컴파일을 함
    • 정적인 페이지를 포함시킬 수 있음
    • 전달파라미터를 전달할 수 없음
  • include 액션 : 각각의 JSP코드를 컴파일한 후 결과물을 합침
    • 정적, 동적 페이지를 포함시킬 수 있음
    • 전달 파라미터를 전달할 수 있음

➰ <jsp:forward page="" />

forward page="포워드 페이지"

<jsp:forward page="" >
	<jsp:param value="전달값" name="전달변수이름" />
</jsp:forward>

다른 페이지로 포워드할 때 사용하는 액션 태그
전달 파라미터를 추가할 수 있음


🔍 페이지 이동, 전환

서버 코드를 이용하여 페이지 화면을 전환하는 동작
서버에서 수행하지만 클라이언트 입장에서 보고있는 화면이 변경됨

➰ 포워드, forward

request스코프를 유지하면서 화면을 전환하는 방식
요청 -> 응답이 이루어지는 동안 컨텍스트 정보를 유지
요청 객체(HttpServletRequest), 응답객체(HttpServletResponse)가 유지됨
전달 파라미터가 사라지지 않음(req.getParameter())
request컨텍스트 정보가 유지됨(req.setAttribute(), request.getAttribute())
요청 URL이 변경되지 않음
브라우저의 주소 입력창이 바뀌지 않음
Controller에서 View로 MODEL값을 전달할 때 포워드 방식을 사용해야 함

➰ 리다이렉트, redirect

서버에서 클라이언트에게 새로운 요청을 보내라는 명령으로 응답
request스코프가 새롭게 만들어짐
요청 객체, 응답객체를 새롭게 만듬
URL이 변경됨
전달 파라미터가 이어지지않음
컨텍스트 정보도 없어짐


🔍 지금까지 배운 서버 프로그래밍

  • Servlet / JSP
  • 서블릿 라이프 사이클, 생명주기
    • 서블릿 객체 생성 - init() - service() - destroy()
  • JSP는 WAS에서 Servlet 변환되어 실행됨
  • MVC 패턴
    • Controller : 서블릿 클래스 클라이언트의 요청 & 응답처리
    • Service : 자바클래스 비지니스 로직, 트랜잭션 관리
    • Dao : 자바클래스(JDBC) DB 처리
    • Dto : 자바클래스 계층들 간 데이터 전달
    • View : JSP 화면, 프레젠테이션 로직
      ✔ Controller에서 HTTP 요청을 처리하도록 구현
  • HTTP 요청 메소드, Request Method
    • GET 방식 : 전달파라미터를 URL 뒤에 ?를 붙이고 이어서 쿼리스트링으로 추가
    • POST 방식 : 전달파라미터를 HTTP요청 메시지의 BODY영역에 숨겨서 추가
      ✔ 전달파라미터가 없으면 일반적으로 GET 방식을 이용
  • WEB 서버 : 정적 자원 관리(응답)
  • WAS : 동적 자원 관리
    ✔ WEB서버가 요청을 받고 동적 자원에 대한 처리를 WAS에게 넘김
  • JSP 기본 태그
    • 스크립트릿 <% %> : 자바코드 수행
    • 선언 <%! %> : 자바 정의 코드 작성
    • 지시자 <%@ %> : JSP 설정
    • 표현식 <%= %> : 브라우저 출력될 내용 작성
    • 주석 <%-- --%>
  • JSP 내장 객체
    pageContext, request, session, application 컨텍스트 영역의 정보 객체
    ✔ request는 요청 정보 객체로도 사용됨
  • JSP 액션 태그
    • <jsp:include> : 외부 URL 자원 로드
  • 자바 빈 객체
    JSP 컨텍스트 영역에 등록(저장)된 자바 객체
  • 페이지 전환
    forward, 포워드 : URL 변화 없음, request 영역 유지
    redirect, 리다이렉트 : URL 변화 있음, request 영역 삭제

🔍 파일 업로드

클라이언트(브라우저)가 전송한 파일을 웹 어플리케이션이 받아들여 처리하는 절차

  • 서버에서 업로드된 파일을 처리하기 위한 라이브러리를 이용해야 함
  • 파일 업로드 라이브러리의 종류
  1. commons-fileupload 라이브러리 👉🏻 우린 이거 사용할 것
  2. COS 라이브러리

➰ application/x-www-form-urlencoded 인코딩

쿼리스트링 형식으로 전송
<<Request Message BODY 영역>>
title=a&data1=b&data2=c&upfile=파일이름

➰ multipart/form-data 인코딩

boundary 문자열을 이용하여 각각의 전송 데이터를 구분하는 형식
<<Request Message BODY 영역>>
title=a
----WebKitFormBoundaryBehiZFWmkZ73c3tY
data1=b
----WebKitFormBoundaryBehiZFWmkZ73c3tY
data2=c
----WebKitFormBoundaryBehiZFWmkZ73c3tY
upfile=파일의 내용물

profile
IT꿈나무 댓츠미

0개의 댓글