정의
기능
정의
기능
정의
주의사항
구조와 구성요소
<welcome-file-list> : 메인페이지 목록메인 페이지로 사용할 파일명 목록
webapp 폴더에 파일이 생성해야함
목록에 없으면 404 error
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.jsp</welcome-file>
<welcome-file>default.htm</welcome-file>
</welcome-file-list>
정의
javax.servlet.http.HttpServlet동작과정
1. 사용자가 HTTP 요청을 전송
2. 웹 서버(Apache, Nginx 등)가 요청을 받아 Servlet Container(WAS)로 전달
3. Servlet Container는 두 개의 객체를 생성함.
- HttpServletRequest : 요청 URL, 파라미터, 헤더 등의 정보를 포함한 요청 객체
- HttpServletResponse : 응답 내용, 상태 코드, 헤더 등의 정보를 설정하는 응답 객체
4. 배포 서술자(DD, Deployment Descriptor) 또는 @WebServlet 어노테이션을 이용하여 요청을 처리할 서블릿을 결정
- 과거에는 web.xml 파일을 사용, 현재는 @WebServlet 을 이용하여 URL과 서블릿을 매핑하는 것이 일반적임.
5. 서블릿의 생명주기 메서드 실행
init() : 서블릿이 처음 생성될 때 한 번만 호출되며, 초기화 작업을 수행
service() : 요청이 들어올 때마다 실행되며, 요청 방식(GET, POST 등)에 따라 doGet() , doPost() 등을 호출
6. doGet() 또는 doPost() 메서드에서 동적인 웹 페이지를 생성하고 HttpServletResponse 객체를 통해 응답을 보냄
7. 응답이 완료되면 HttpServletRequest , HttpServletResponse 객체가 소멸됨.
등록
web.xml 파일에 서블릿 매핑을 명시(안 씀)web.xml에 java 파일인 컨트롤러 클래스 직접 등록 <!-- 특정 클래스를 Servlet으로 등록하고 이름을 지정하는 태그 -->
<servlet>
<!-- 등록할 Servlet을 지칭할 명칭 -->
<servlet-name>ex1</servlet-name>
<!-- Servlet으로 등록할 클래스의 패키지명.클래스명 -->
<servlet-class>edu.kh.servlet.controller.ExampleController1</servlet-class>
</servlet>
<!-- 요청 주소를 처리할 Servlet 연결 -->
<servlet-mapping>
<servlet-name>ex1</servlet-name>
<!-- 연결할 요청 주소 -->
<url-pattern>/example1</url-pattern>
</servlet-mapping>PrintWriter 사용) // 서버 -> 클라이언트 응답 처리
// 1) 서버에서 HTML 코드를 만들어
// 클라이언트에게 전달 == 응답(response)
// 2) 클라이언트의 브라우저가
// 응답 받은 HTML 코드를 해석하여
// 화면에 출력해줌
// 서버 -> 클라이언트 응답하기
// HttpServletResponse 객체 이용
// 응답처리 1: 응답하는 문서의 형식과 문자 인코딩 지정
resp.setContentType("text/html; charset=UTF-8");
// 응답처리 2: 서버 -> 클라이언트로 연결되는 출력용 스트림 얻어오기
PrintWriter out = resp.getWriter();
// 응답처리 3: 출력할 HTML 코드 만들기
StringBuilder sb = new StringBuilder();
sb.append("<!DOCTYPE html>");
sb.append("<html>");
sb.append("<head>");
sb.append("<title>서버 응답 페이지</title>");
sb.append("</head>");
sb.append("<body>");
sb.append("<h1>응답페이지 입니다</h1>");
sb.append("<p>입력 받은 이름 : " + name + "</p>");
sb.append("<p>입력 받은 나이 : " + age + "</p>");
sb.append("</body>");
sb.append("</html>");
// 응답 처리 4: 출력 스트림을 이용해
// 클라이언트에게 HTML 코드 출력(응답)
out.write(sb.toString());@WebServlet(Controller.java에 서블릿 등록)@WebServlet("/hello") : HTML에서의 요청을 처리(form action=”/hello”)
extends HttpServlet : 서블렛 클래스 상속 밑 임포트
@Override doGet() : Get 요청 메서드
@Override doPost() : Post 요청 메서드
HttpServletRequest : 클라이언트가 보낸 요청 정보를 담고 있는 객체
주소에 붙은 쿼리 스트링 (?name=kim)
폼 데이터 (input, textarea)
헤더, 쿠키, IP 주소, 요청 방식(GET/POST)
URI, URL 등등…
String param = req.getParameter("name"); // 폼에서 넘어온 name 값
String method = req.getMethod(); // "GET" or "POST"
String uri = req.getRequestURI(); // "/hello"
String context = req.getContextPath(); // "/myapp"
HttpServletResponse : 서버가 클라이언트에게 응답할 때 사용하는 객체
- 콘텐츠 타입 설정 (HTML, JSON 등)
- 문자 인코딩
- 실제 출력 내용 (HTML, 문자열 등)
- 쿠키 설정, 리다이렉트 등
```java
rsp.setContentType("text/html;charset=UTF-8"); // 응답 타입 설정
PrintWriter out = response.getWriter(); // 응답 스트림 얻기
out.println("<h1>Hello!</h1>"); // 클라이언트로 출력
```
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/hello") // 이 서블릿은 /hello로 들어오는 요청을 처리함
public class Hello extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse rsp)
throws IOException {
}
}
메서드
getParameter() : 클라이언트가 보낸 단일 데이터(문자열) 받아옴인자값 : name 의 속성값을 가져옴
String name = req.getParameter("inputName");
getParameterValues() : 여러 개의 값들(checkbox 등) 을 배열로 받아옴인자값 : 같은 name을 가진 값들을 받아옴
String[] optionArr = req.getParameterValues("opt");
getRequestDispatcher() : RequestDispatcher(인터페이스)를 얻어옴RequestDispatcher : 응답을 JSP나 다른 서블릿으로 넘기기 위한 객체
인자값 : 경로(webapp 폴더 기준)
RequestDispatcher dispatcher = req.getRequestDispatcher("/WEB-INF/views/result.jsp");
forward() : 현재 요청/응답을 JSP로 넘김인자값
- req : HttpServletRequest 객체
- resp : HttpServletResponse 객체
dispatcher.forward(req, resp);
setContentType() : MIME 타입과 문자 인코딩을 설정(JSP는 안씀)인자값 : "text/html; charset=UTF-8”
resp.setContentType("text/html; charset=UTF-8");
getWriter() : 클라이언트에게 텍스트(HTML 등)를 직접 출력할 수 있는 출력 스트림을 반환(JSP는 안씀)PrintWriter out = resp.getWriter();
out.write("<h1>응답페이지</h1>");정의
스크립팅 원소
| 구분 | GET | POST |
|---|---|---|
| 목적 | 데이터를 조회할 때 사용 | 데이터를 서버에 전송할 때 사용 |
| 데이터 전송 방식 | URL의 쿼리 문자열로 전송 | HTTP 요청의 본문(body)으로 전송 |
| 보안 | URL에 데이터가 노출되므로 민감한 정보 전송에 부적합 | 본문에 데이터를 담아 전송하므로 비교적 안전 |
| 전송 데이터 크기 | URL 길이 제한이 있음 | |
| (브라우저마다 다름) | 대용량 데이터 전송 가능 | |
| 캐싱 | 브라우저가 요청을 캐싱할 수 있음(ex. 즐겨찾기, 북마크) | 캐싱되지 않음 |
| 사용 예시 | 검색, 조회 | 로그인, 회원가입, 파일 업로드 등 |