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가지 종류와 범위
page: 현재 페이지 내에서만 유효 (가장 좁은 범위)request: 한 번의 요청과 응답 동안만 유효 (forward로 전달 가능)session: 브라우저가 종료되기 전까지 유효 (로그인 정보 유지)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이 바뀌지 않습니다. (브라우저 주소창은 그대로)
- 같은
request와response객체를 공유합니다.
- 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개 파라미터:request: 원래의HttpServletRequest객체.path: 파일을 실제로 저장할 서버 상의 경로.maxSize: 업로드할 최대 파일 크기 (Byte 단위).encoding: 파라미터 값의 인코딩 방식 (한글 깨짐 방지).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 |