JSP 개념 복습 문제


JSP 개념 복습 문제

[문제 1] JSP 출력 방법

JSP에서 변수 값을 화면에 출력하는 방법 3가지를 쓰시오.

1-1: 표현문 태그: __________
1-2: out 객체 사용: __________
1-3: EL 태그: __________

🔍 정답 및 해설

정답:

1-1: <%= %>
1-2: <% out.print(); %>
1-3: ${ }

💡 쉬운 설명:

  • ** 선언문 ** <%! int count = 5; %>
  • 표현문 <%= %>: 값을 바로 출력할 때 (계산 결과, 변수값)
    • <%= name %> → name 변수의 값 출력
    • <%= 3+5 %> → 8 출력
  • out 객체: 조건문 안에서 출력할 때 주로 사용
    • <% out.print("안녕"); %> → 안녕 출력
    • if문 안에서 출력할 때 유용
  • EL 태그 ${ }: 간단하게 변수 출력 (자동으로 scope 찾음)
    • ${name} → name 변수 출력
    • null이면 빈 문자열로 출력

[문제 2] import와 Date 클래스

2-1: JSP에서 Date 클래스를 사용하기 위한 import 구문을 작성하시오.
2-2: 현재 날짜를 출력하는 코드를 표현문으로 작성하시오.

📄 2-1 `_________________________________`

<p>현재 시간: 📄 2-2 `_________________` </p>
🔍 정답 및 해설

정답:

2-1: <%@ page import="java.util.Date" %>
2-2: <%= new Date() %>

💡 쉬운 설명:

  • import 구문: 자바 클래스를 JSP에서 사용하려면 반드시 import 필요
    • <%@ page import="패키지.클래스명" %>
    • Date는 java.util 패키지에 있음
  • 객체 생성: new 클래스명()으로 객체 생성
    • new Date() → 현재 날짜/시간 객체 생성
    • 표현문 <%= %> 안에 넣어서 바로 출력

📝 다른 예시:

<%@ page import="java.util.Random" %>
<%= new Random().nextInt(10) %> <!-- 0~9 랜덤 숫자 -->

[문제 3] include 디렉티브

3-1: header.jsp 파일을 정적으로 포함하는 디렉티브를 작성하시오.
3-2: include 디렉티브는 언제 포함되는가? __________ 시점

📄 3-1 `_________________________________`
<h1>메인 페이지</h1>
🔍 정답 및 해설

정답:

3-1: <%@ include file="header.jsp" %>
3-2: 컴파일 시점

💡 쉬운 설명:

  • include 디렉티브: <%@ include file="파일명" %>
    • 정적 포함 = 미리 합쳐놓고 컴파일
    • 마치 복사+붙여넣기 하는 것처럼!
  • 컴파일 시점: JSP가 서블릿으로 변환될 때 이미 내용이 합쳐짐
    • 한 번 합쳐지면 포함된 파일이 바뀌어도 반영 안 됨
    • 서버 재시작해야 변경사항 적용

📝 비유:

  • 요리하기 전에 재료를 미리 다 섞어놓는 것과 같음

include 디렉티브 vs 액션태그 비교

정적 포함 (디렉티브): <%@ include file="header.jsp" %>

  • 컴파일 시점에 포함 (미리 합쳐놓고 컴파일)
  • 마치 복사+붙여넣기 하는 것처럼 소스 코드가 합쳐져 하나의 서블릿 파일로 만들어집니다.
  • 비유: 요리 전에 재료를 미리 다 섞어놓기

동적 포함 (액션태그): <jsp:include page="menu.jsp"/>

  • 실행 시점에 포함 (페이지가 요청될 때마다 포함)
  • 실행 흐름이 해당 페이지로 넘어갔다가 다시 돌아옵니다. 별도의 파일로 존재합니다.
  • 비유: 요리할 때마다 그때그때 재료를 꺼내 넣기


[문제 4] useBean 액션태그와 scope

4-1: User 클래스로 user 객체를 생성하는 useBean 태그를 완성하시오.
4-2: scope는 session으로 설정하시오.

📄 4-1 `<jsp:useBean id="____" class="____" scope="____"/>`
🔍 정답 및 해설

정답:

4-1: <jsp:useBean id="user" class="User" scope="session"/>

💡 쉬운 설명:

  • useBean: 자바빈 객체를 생성하고 관리하는 액션태그
    • id: 객체의 변수명 (JSP 내에서 사용할 이름)
    • class: 클래스명 (어떤 클래스로 만들지)
    • scope: 범위 (어디까지 객체를 공유하며 사용할지)
  • session scope: 브라우저를 끄기 전까지 객체가 유지됩니다.
    • 로그인 정보처럼 여러 페이지에서 공유해야 하는 데이터에 주로 사용됩니다.

scope 4가지 종류와 범위

  1. page: 현재 페이지 내에서만 유효 (가장 좁은 범위)
  2. request: 한 번의 요청과 응답 동안만 유효 (forward로 전달 가능)
  3. session: 브라우저가 종료되기 전까지 유효 (로그인 정보 유지)
  4. application: 서버가 종료되기 전까지 유효 (모든 사용자가 공유)

📝 비유:

  • page = 지금 이 교실에서만 쓰는 메모지
  • request = 오늘 수업시간 동안만 돌려보는 쪽지
  • session = 이번 학기 동안 사용하는 개인 사물함
  • application = 학교 전체에서 사용하는 공지 게시판


[문제 5] forward와 param 액션태그

5-1: welcome.jsp로 페이지를 이동시키는 forward 태그를 작성하시오.
5-2: 이동할 때 name 파라미터에 "홍길동" 값을 전달하시오.

📄 5-1 `<jsp:forward page="________">`
📄 5-2 `    <jsp:param name="____" value="____"/>`
</jsp:forward>
🔍 정답 및 해설

정답:

5-1: <jsp:forward page="welcome.jsp">
5-2:     <jsp:param name="name" value="홍길동"/>

💡 쉬운 설명:

  • forward: 서버 내부에서 페이지로 실행 흐름을 이동시킵니다.
    • URL이 바뀌지 않습니다. (브라우저 주소창은 그대로)
    • 같은 requestresponse 객체를 공유합니다.
  • param: forward 또는 include 할 때 데이터를 전달하는 태그입니다.
    • name: 파라미터 이름
    • value: 파라미터
    • welcome.jsp에서 request.getParameter("name")으로 "홍길동" 값을 받을 수 있습니다.

[문제 6] request 파라미터와 redirect

6-1: id 파라미터 값을 받아서 변수에 저장하는 코드를 작성하시오.
6-2: id"admin"이면 admin.jsp로 이동(리다이렉트)하는 코드를 작성하시오.

<%
📄 6-1 String id = _________________________;
if(📄 6-2 _________________________________) {
    response.sendRedirect("admin.jsp");
}
%>
🔍 정답 및 해설

정답:

6-1: String id = request.getParameter("id");
6-2: if("admin".equals(id))

💡 쉬운 설명:

  • getParameter(): HTML 폼(form)이나 URL 쿼리스트링으로 전송된 데이터를 받는 메소드입니다.
    • request.getParameter("파라미터명") 형태로 사용합니다.
    • 값은 항상 String 타입으로 반환되며, 값이 없으면 null을 반환합니다.
  • equals(): 문자열의 내용이 같은지 비교할 때 사용합니다.
    • "비교할문자열".equals(변수) 형태로 쓰는 것이 null 에러를 방지하는 안전한 방법입니다.
  • sendRedirect(): 브라우저에게 "다른 페이지로 다시 접속해!" 라고 명령을 내리는 것입니다.
    • URL이 바뀝니다. (브라우저 주소창이 변경됨)
    • 새로운 요청이 발생하므로 기존 request 객체는 사라집니다.

📝 주의사항:

  • 문자열 비교는 id.equals("admin") ✅, id == "admin" ❌ (주소값 비교이므로 사용 금지)

redirect vs forward 완벽 정리

redirect (response.sendRedirect())

  • URL: 바뀜
  • 요청 횟수: 2번 (클라이언트가 서버에 재요청)
  • 데이터 공유: request 객체 공유 불가능
  • 동작 주체: 클라이언트(브라우저)
  • 비유: 다른 회사 번호를 알려주고 "여기로 다시 전화하세요"라고 하는 것.

forward (<jsp:forward> 또는 RequestDispatcher)

  • URL: 안 바뀜
  • 요청 횟수: 1번 (서버 내부에서 처리)
  • 데이터 공유: request 객체 공유 가능
  • 동작 주체: 서버
  • 비유: 회사 내부에서 다른 부서로 전화를 바로 연결해주는 것.


[문제 7] 파일 업로드의 필요성

파일 업로드를 위해서는 일반적인 request.getParameter()로는 불가능하며
📄 7-1 __________ 클래스를 사용해야 한다.
이 클래스를 사용하기 위해서는 📄 7-2 __________ 라이브러리가 필요하다.

🔍 정답 및 해설

정답:

7-1: MultipartRequest
7-2: cos.jar

💡 쉬운 설명:

  • 일반 request: 텍스트 데이터만 처리할 수 있습니다. (e.g., application/x-www-form-urlencoded)
  • 파일 업로드: 텍스트와 바이너리(파일) 데이터가 섞인 multipart/form-data 형식으로 전송됩니다.
  • MultipartRequest: 이 multipart/form-data 형식의 요청을 해석해서 파일과 텍스트 데이터를 분리해주는 특별한 클래스입니다.
  • cos.jar: MultipartRequest 클래스를 포함하고 있는 외부 라이브러리 파일입니다. WEB-INF/lib 폴더에 추가해야 사용할 수 있습니다.

📝 비유:

  • 일반 request = 편지봉투 (종이 같은 텍스트만 넣을 수 있음)
  • MultipartRequest = 택배상자 (물건 같은 파일도 넣을 수 있음)

[문제 8] MultipartRequest 객체 생성

8-1: MultipartRequest 객체를 생성하는 코드를 5개의 필수 인자를 사용하여 완성하시오.
8-2: 업로드된 파일의 실제 저장된 이름을 가져오는 메소드를 쓰시오.

<%
String path = request.getRealPath("/upload");

📄 8-1 MultipartRequest multi = new MultipartRequest(
    _______, // ① 요청 객체
    _______, // ② 저장 경로
    _______, // ③ 최대 파일 크기
    _______, // ④ 인코딩
    _______  // ⑤ 파일명 중복 처리 정책
);

📄 8-2 String fileName = multi.________________("uploadFile");
%>
🔍 정답 및 해설

정답:

8-1: MultipartRequest multi = new MultipartRequest(
    request,
    path,
    1024*1024*10, // 10MB
    "UTF-8",
    new DefaultFileRenamePolicy()
);

8-2: String fileName = multi.getFilesystemName("uploadFile");

💡 쉬운 설명:

  • MultipartRequest 생성자 5개 파라미터:
    1. request: 원래의 HttpServletRequest 객체.
    2. path: 파일을 실제로 저장할 서버 상의 경로.
    3. maxSize: 업로드할 최대 파일 크기 (Byte 단위).
    4. encoding: 파라미터 값의 인코딩 방식 (한글 깨짐 방지).
    5. policy: 파일명 중복 처리 정책. DefaultFileRenamePolicy는 같은 이름의 파일이 있으면 file.txt -> file1.txt 처럼 자동으로 숫자를 붙여줍니다.
  • getFilesystemName(): 서버에 실제 저장된 파일명을 반환합니다. (중복 처리 후의 이름)
  • getOriginalFileName(): 사용자가 업로드한 원본 파일명을 반환합니다.

'잡담' 카테고리의 다른 글

자료소실을 확인했다  (0) 2025.12.01
병원 가느라 학원에 빠졌는데 놀지는않았다.  (0) 2025.07.10
문제 풀다가 틀렸는데.  (0) 2025.05.23
집에서 JSP 환경 구축했다  (0) 2025.05.20
코드 채우기/작성  (0) 2025.05.19