01. 프로그래밍 스타일 관점에서 서블릿과 JSP는 어떤 차이점이 있나요?
답: 서블릿은 JAVA 코드 내에서 HTML 을 호출하고, JSP는 HTML에서 JAVA 함수를 호출해서 사용한다.
서블릿 | JSP | |
구조 및 역할 | 자바 코드 안에 HTML 코드를 작성하는 형태로 구성됨. 주로 비즈니스 로직이나 데이터 처리와 같은 서버 측의 작업을 처리하는 데 사용됨. | HTML 코드 안에 자바 코드를 삽입하여 동적인 웹 페이지를 생성하는 데 중점을 둠. 주로 클라이언트에게 보여지는 뷰를 생성하는 데 사용됨. |
가독성과 유지보수성 | 자바 코드와 HTML 코드가 섞여 있어 가독성이 낮을 수 있음. 복잡한 비즈니스 로직이 자바 코드에 섞여 있어 유지보수가 어려울 수 있음. | HTML 코드 안에 자바 코드를 삽입하는 형태로, 가독성이 높아짐. 따라서 디자이너와 개발자 간의 협업이 용이하고, 유지보수가 상대적으로 쉬움. |
역할 분리 | 주로 비즈니스 로직이나 데이터 처리와 같은 서버 측의 작업을 처리. | 주로 클라이언트에게 보여지는 뷰를 생성하는 데 중점을 둠. |
배포 및 라이프사이클 | Java 클래스로 컴파일되어 실행되며, 배포 시 서버를 다시 시작해야 할 수 있음. | JSP 파일은 서블릿으로 변환되어 실행됨. 수정된 경우에는 서버를 다시 시작하지 않고 자동으로 재컴파일되어 반영됨. |
사용 시점 | 주로 비즈니스 로직이나 데이터 처리와 같은 서버 측 작업을 처리하는 데 사용됨. | 주로 사용자에게 보여지는 동적인 콘텐 트를 생성하는 데 사용됨. |
02. JSP에 비해 서블릿이 지니는 장점은 어느 것이 있나요?
답: 프록시 서버, HTTP 요청 필터링에 용이하다
- 좀 더 세밀한 제어: 자바 코드를 직접 작성하므로 더 세밀한 제어 가능.
- 재사용성과 모듈화: 자바 클래스로 구현되기 때문에 객체 지향적인 모듈화, 재사용 가능. 다양한 서블릿 조합해 개발 가능
- 클래스 계층 구조 활용: 자바의 클래스 계층 구조 활용하여 상속 통한 확장 가능, 필요한 인터페이스 구현해 더 다양한 기능 추가 가능.
- 데이터 처리 및 비즈니스 로직: 주로 데이터 처리, 비즈니스 로직, 데이터베이스 연동 등 서버 측의 작업을 처리하는 데 강점이 있음.
- HTTP 응답의 전체적인 제어: HTTP 응답의 모든 측면에 대한 제어가 가능. 응답의 헤더, 쿠키, 세션 등을 직접 다룰 수 있음.
- 프로그래밍 언어 특성 활용: 자바 언어의 풍부한 기능, 생태계 활용 가능. 자바의 강력한 객체 지향 기능, 라이브러리 활용 가능
03. 스크립트릿에 정의된 Java 코드는 서블릿으로 변환될 때 어떤 함수에 포함되나요?
답: _jspService()
이 메서드는 JSP에 대응하는 서블릿 클래스에 생성되며, 클라이언트의 요청을 처리하는 중요한 메서드 중 하나.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP to Servlet Example</title>
</head>
<body>
<%
String message = "Hello, JSP to Servlet Example!";
out.println("<h2>" + message + "</h2>");
%>
</body>
</html>
public void _jspService(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
String message = "Hello, JSP to Servlet Example!";
out.println("<html><head><title>JSP to Servlet Example</title></head><body>");
out.println("<h2>" + message + "</h2>");
out.println("</body></html>");
} finally {
out.close();
}
}
_jspService()메서드는 JSP 페이지에서 정의된 스크립트릿 내용을 기반으로 동적인 HTML을 생성하여 클라이언트에게 반환함.
04. HTML 주석과 JSP 주석 중 보안 측면에서 어떤 것이 더 유리한가요? 이유는 무엇인가요?
답: JSP 주석은 개행 문자로 대체되어 HTML 주석과 달리 내용이 유출되지 않는다.
일반적으로 중요한 보안 정보는 서버 측에서 처리되는 JSP 주석을 사용하는 것이 안전.
클라이언트 측에서 확인되지 않기 때문에 중요한 정보가 노출될 우려가 적음.
장점 | 단점 | |
HTML 주석 | 클라이언트 측에서 확인이 가능하므로 디버깅이나 특정 정보 전달에 활용 가능. 웹 브라우저에서 주석을 보여주기 때문에 디자인 및 개발 단계에서 유용할 수 있음. |
보안적인 측면에서는 클라이언트에 노출되어 있어서 보안 정보나 중요한 정보를 포함해서는 안됨. |
JSP 주석 | 서버 측에서 처리되므로 클라이언트에 노출되지 않음. 서버에서 처리되기 때문에 보안 정보나 중요한 정보를 포함해도 클라이언트에 노출되지 않음. |
클라이언트 측에서 주석을 확인할 수 없어 디버깅이나 특정 정보 전달에는 활용이 어려울 수 있음. |
05. 다음 중 Page 지시어에 포함되는 속성과 거리가 먼 것은 무엇인가요?
1) contentType 2) pageEncoding
3) import 4) include
답: include
include 속성은 include 지시어와 연관이 있어서 다른 JSP 파일이나 리소스를 현재의 JSP 페이지에 포함할 때 사용됨.
Page 지시어는 JSP 페이지의 전반적인 속성을 설정하는 데 사용되며, 일반적으로 아래와 같은 속성.
(1) contentType: JSP 페이지의 컨텐츠 타입을 지정하는 데 사용됨.
주로 웹 페이지가 생성하는 콘텐츠의 종류를 나타냄.
예를 들어 "text/html", "text/plain"
(2) pageEncoding: JSP 페이지에서 사용되는 문자 인코딩을 지정하는 데 사용됨. 이 속성을 사용하여 문자 집합을 명시적으로 설정할 수 있음.
(3) import: Java 클래스를 JSP 페이지에서 사용하기 위해 필요한 패키지나 클래스를 import하는 데 사용됨. 이를 통해 JSP 페이지에서 Java 클래스를 사용할 수 있음
06. 표현식 <%=%> 은 서블릿으로 변환될 때 어떤 함수 호출의 형태로 변환되나요?
답: out.write()
out.print() 메서드 형태로 변환된다.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP Expression Example</title>
</head>
<body>
<% String message = "Hello, JSP Expression!"; %>
<h2><%= message %></h2>
</body>
</html>
public void _jspService(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
String message = "Hello, JSP Expression!";
out.println("<html><head><title>JSP Expression Example</title></head><body>");
out.println("<h2>" + message + "</h2>");
out.println("</body></html>");
} finally {
out.close();
}
}
07. GET 방식을 이용할 때 한글을 정상적으로 출력하기 위해 page 지시어에서 정의되어야 하는 속성의 이름은 무엇인가요?
답: pageEncoding="UTF-8"
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
08. 다음 JSP 코드에 대한 서블릿 변환 결과를 작성해 주세요.
(단, _jspService() 함수 내에 입력될 JSP 코드에 대한 1:1 대응 부분만 기술하며, 공백이나 '\r\n' 등의 개행 문자는 생략해도 좋습니다.)
<html>
<h3>
User ID:
<%
String uid = request.getParameter("id");
out.print(uid);
%>
</h3>
</html>
답:
public void _jspService(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
out.println("<html><h3>User ID: ");
String uid = request.getParameter("id");
out.print(uid);
out.println("</h3></html>");
} finally {
out.close();
}
}
JSP에서는 out.print() 메서드를 사용하여 출력을 처리하므로 이를 서블릿으로 변환할 때도 out.print() 를 사용.
JSP 코드에서 사용된 <%%> 블록 내의 코드가 '_jspService' 매서드 내에 위치하게 됨.
09. 다음 JSP 코드에 대한 변환 코드를 작성해 주세요.
(단, 공백이나 개행 문자 변환은 생략해도 좋습니다.)
<html>
<%
String uid = request.getParameter("id");
%>
Input ID: <%= uid %>
<html>
답:
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/YourServletName") // 적절한 서블릿 경로를 지정하세요
public class YourServletName extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 1. request 객체 데이터 인코딩 방식 지정
request.setCharacterEncoding("utf-8");
// 2. 클라이언트에게 전송할 페이지 양식 지정
response.setCharacterEncoding("utf-8");
// 3. 클라이언트에게 전송한 데이터 인코딩 방식 지정
response.setContentType("text/html; charset=utf-8");
// 4. 클라이언트가 보내온 데이터 받기
String uid = request.getParameter("id");
// 5. 클라이언트에게 데이터 확인을 위한 피드백
PrintWriter out = response.getWriter();
out.print("<html>");
out.print("Input ID: " + uid);
out.print("</html>");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
'학교 > JAVA' 카테고리의 다른 글
07) JSP 내장 객체 종류 (0) | 2023.12.14 |
---|---|
모바일 웹 서비스 구현을 위한 JSP 웹 프로그래밍 연습문제_07 JSP 내장 객체 (0) | 2023.12.13 |
모바일 웹 서비스를 위한 JSP 웹 프로그래밍 연습문제_05장 서블릿 (0) | 2023.12.13 |
컬렉션 연습문제 (Student, Main) (0) | 2023.10.27 |
컬렉션(ArrayList<String>, Iterator) 연습문제 (ArrayEx02) (0) | 2023.10.26 |