서블릿(Servlet)과 JSP
서블릿이란?
서블릿은 클라이언트의 요청을 처리하고 동적 웹 콘텐츠를 생성하는 Java 프로그램입니다. 서블릿은 순수 자바 코드로 작성되며, 클라이언트 요청에 따라 HTML 응답을 생성합니다. 서블릿은 자바 쓰레드를 이용하여 다수의 요청을 효율적으로 처리할 수 있는 강력한 구조를 가지고 있습니다.
URL 매핑
서블릿은 여러 개가 있을 수 있으며, 브라우저에서 웹 컨테이너에 요청할 때 서블릿을 구분하기 위해 URL 매핑이 필요합니다. URL 매핑을 통해 보안을 강화하고, 사용자에게 이해하기 쉬운 URL을 제공할 수 있습니다.
WebServlet 어노테이션
@WebServlet 어노테이션을 사용하여 서블릿 클래스를 선언하고 구성할 수 있습니다. 이를 통해 다음과 같은 작업을 수행할 수 있습니다:
- URL 매핑: 특정 URL 패턴에 서블릿을 매핑하여 해당 URL로 요청이 오면 서블릿이 실행되도록 설정합니다.
- 서블릿 이름 설정: 서블릿의 이름을 지정합니다.
- 로드 순서 지정: 여러 서블릿을 로드하는 순서를 조정할 수 있습니다.
GET과 POST 방식
1. GET 방식
- 개념: 서버에서 데이터를 요청할 때 사용됩니다.
- 특징:
- URL에 데이터를 포함하여 전송합니다 (주소에 노출됨).
- 데이터 크기 제한이 있으며 (약 255자), 캐시 및 히스토리에 저장될 수 있습니다.
- 민감한 데이터 전송에는 부적합합니다.
2. POST 방식
- 개념: 서버로 데이터를 전송할 때 사용됩니다.
- 특징:
- URL에 데이터가 포함되지 않아 주소에 노출되지 않습니다.
- 데이터 크기 제한이 없으며, 캐시 및 히스토리에 저장되지 않습니다.
- 대용량 데이터 전송에 적합합니다.
GET과 POST 방식의 차이
GET 방식 | POST 방식 |
---|---|
URL에 데이터 포함 | URL에 데이터 포함 안 됨 |
데이터 크기 제한 있음 | 데이터 크기 제한 없음 |
캐시 및 히스토리에 저장 | 캐시 및 히스토리에 저장 안 됨 |
보안에 취약 | 보안에 강함 |
서블릿의 주요 메서드
doGet(HttpServletRequest request, HttpServletResponse response)
: GET 요청 처리doPost(HttpServletRequest request, HttpServletResponse response)
: POST 요청 처리service(HttpServletRequest request, HttpServletResponse response)
: 클라이언트 요청에 따라 doGet 또는 doPost 메서드 호출
서블릿 예제
@WebServlet("/banana")
public class ServletBasic extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html; charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<body>");
out.println("오 이게 서블릿이야?");
out.println("</body>");
}
}
웹.xml 설정
<servlet>
<servlet-name>basic</servlet-name>
<servlet-class>kr.co.koo.ServletBasic</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>basic</servlet-name>
<url-pattern>/peach</url-pattern>
</servlet-mapping>
URL 매핑
URL 매핑을 통해 사용자가 이해하기 쉽고 간결한 URL을 생성할 수 있습니다. 예를 들어, URL 매핑 전에는 http://localhost:8181/JSPBasic/servlet/kr.co.park.HelloWorld
와 같이 길고 복잡한 URL을 사용해야 하지만, URL 매핑 후에는 http://localhost:8181/JSPBasic/HelloWorld
와 같이 간단한 URL을 사용할 수 있습니다.
GET과 POST 방식의 한글 처리
GET 방식 한글 처리
- 방법:
server.xml
파일에서URIEncoding="utf-8"
속성 추가.<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="utf-8" />
POST 방식 한글 처리
- 방법: 서블릿 코드에서
request.setCharacterEncoding("utf-8");
메서드 호출.protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); // 나머지 코드 }
HTTP 프로토콜
HTTP(하이퍼텍스트 전송 프로토콜)는 클라이언트와 서버 간의 요청/응답 프로토콜입니다. 클라이언트가 서버에 요청을 보내면 서버는 이를 처리하고 응답을 생성합니다. 요청과 응답은 여러 헤더 필드로 구성되어 있으며, 이로 인해 통신의 내용과 형식을 제어할 수 있습니다.
주요 헤더 필드
- Request Header:
Host
: 요청한 서버의 호스트명과 포트 번호.User-Agent
: 클라이언트 소프트웨어 정보.Accept
: 클라이언트가 수락할 수 있는 MIME 타입.
- Response Header:
Content-Type
: 응답 본문의 MIME 타입.Set-Cookie
: 서버가 클라이언트에 전송한 쿠키.
요청 객체 관련 주요 메서드
getContextPath()
: 웹 애플리케이션의 컨텍스트 루트 경로를 반환.getMethod()
: 사용한 HTTP 요청 방식 반환 (예: "GET", "POST").getParameter(name)
: 요청 파라미터의 값을 반환 (없으면 null).
HttpRequest 방식 비교 정리
1. GET 방식
- 목적: 서버에 데이터를 요청
- 보안: 취약 (데이터가 URL에 노출)
- 장점: 간단하고 사용하기 쉬움, 캐싱 가능
- 단점: 보안 취약, 전송 가능한 데이터 크기 제한
2. POST 방식
- 목적: 서버에 데이터 전송
- 보안: 비교적 안전 (데이터가 URL에 노출되지 않음)
- 장점: 높은 보안성, 대용량 데이터 전송 가능
- 단점: GET 방식보다 복잡, 캐싱 불가능
JSP 태그
JSP 태그 종류
- 스크립트릿(Scriptlet):
<% %>
- 모든 자바 코드를 기술 가능. - 지시자(Directive):
<%@ %>
- 페이지 속성을 지정. - 표현식(Expression):
<%= %>
- 결과 값을 출력할 때 사용. - 주석(Comments):
<%-- --%>
- 코드 주석 처리 시 사용.
JSP 태그 사용 예시
<%
if(num > 0) {
%>
<p>참!</p>
<%
} else {
%>
<p>거짓!</p>
<%
}
%>
경로(PATH)
경로(Path)는 웹 개발에서 파일이나 폴더의 위치를 지정하는 방법으로, 상대 경로와 절대 경로로 나뉩니다.
상대 경로와 절대 경로
- 상대 경로: 현재 위치한 파일을 기준으로 경로를 지정.
- 절대 경로: 웹 서버의 루트(root) 디렉토리부터 시작하여 경로를 지정.
JSP와 서블릿을 이용한 웹 개발은 동적인 웹 콘텐츠를 생성하는 데 필수적입니다.
이 두 기술은 HTTP 프로토콜을 통해 클라이언트와 서버 간의 효율적인 통신을 가능하게 하며,
웹 애플리케이션의 구조를 탄탄하게 만들어 줍니다.
'🗄️ Backend > JSP' 카테고리의 다른 글
JSP와 MVC2 패턴 (1) | 2024.10.18 |
---|---|
JSP와 MVC 패턴: DAO/DTO, 커넥션 풀, EL, JSTL (1) | 2024.10.18 |
쿠키(Cookie)와 세션(Session) 완벽 가이드 (0) | 2024.10.18 |
HTML 기초 및 태그 정리 (2) | 2024.10.17 |
웹 프로그래밍 기초 (SERVER/CLIENT/HTML) (0) | 2024.10.17 |