@WebServlet(name = "requestServlet", urlPatterns = "/method")
public class RequestServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 서블릿 경로 반환
// 클라이언트가 요청한 서블릿 경로 반환
System.out.println("Servlet Path: " + req.getServletPath());
// 웹 애플리케이션 컨텍스트 경로 반환
System.out.println("Context Path: " + req.getContextPath());
// 요청이 보안 프로토콜(HTTPS) 통해 이루어졌는지 여부 반환
System.out.println("is request secure: " + req.isSecure());
// 클라이언트 사용자 이름 반환
System.out.println("Remote User: " + req.getRemoteUser());
// 요청의 프로토콜 스킴(예: http, https)을 반환 클라이언트가 사용한 프로토콜 스킴을 확인
System.out.println("Request scheme: " + req.getScheme());
// 클라이언트의 인증 방식을 반환 클라이언트가 인증된 경우, 기본, 다이제스트 또는 폼 기반 인증 방식이 반환
System.out.println("Authentication Type: " + req.getAuthType());
// 요청 메서드 출력 (GET, POST, PUT, DELETE 등의 HTTP 메서드 확인)
System.out.println("Request Method: " + req.getMethod());
// 요청 URL 정보 출력 (전체 URL을 반환, 프로토콜부터 서버명, 포트, URI까지 모두 포함)
System.out.println("Request URL: " + req.getRequestURL().toString());
// 요청 URI 정보 출력 (요청된 리소스의 경로만 반환, URL에서 도메인 및 프로토콜을 제외한 부분)
System.out.println("Request URI: " + req.getRequestURI());
// 쿼리 스트링 출력 (URL 뒤에 붙은 파라미터 값을 반환, 예: ?user=abc에서 "user=abc" 반환)
System.out.println("Query String: " + req.getQueryString());
// 프로토콜 버전 출력 (요청에서 사용된 HTTP 프로토콜 버전을 반환, 예: HTTP/1.1)
System.out.println("Protocol: " + req.getProtocol());
// 요청 헤더 정보 출력
System.out.println("---- Headers ----");
Enumeration<String> headerNames = req.getHeaderNames();
while (headerNames.hasMoreElements()) {
String headerName = headerNames.nextElement();
String headerValue = req.getHeader(headerName);
System.out.println(headerName + ": " + headerValue);
}
System.out.println("일반적인 for loop를 통해 데이터 호출");
System.out.println("복수 파라미터 조회");
String[] userIds = req.getParameterValues("userId");
if(userIds != null) {
for (String userId : userIds) {
System.out.println("userId" + " = " + userId);
}
}
System.out.println("단일 파라미터 조회");
String userId = req.getParameter("userId");
System.out.println("userId = " + userId);
// 클라이언트 정보 확인
System.out.println("---- Client Info ----");
System.out.println("Remote Addr: " + req.getRemoteAddr());
System.out.println("Remote Host: " + req.getRemoteHost());
System.out.println("Remote Port: " + req.getRemotePort());
System.out.println("Remote User: " + req.getRemoteUser());
// 서버정보 확인
System.out.println("---- Locale ----");
System.out.println("Preferred Locale: " + req.getLocale());
// 쿠키 확인
System.out.println("---- Cookies ----");
if (req.getCookies() != null) {
for (var cookie : req.getCookies()) {
System.out.println("Cookie: " + cookie.getName() + " = " + cookie.getValue());
}
} else {
System.out.println("No cookies found.");
}
// 응답 상태 코드 설정
resp.setStatus(HttpServletResponse.SC_OK); // 200 OK
System.out.println("Response Status Code: " + HttpServletResponse.SC_OK);
// 응답 헤더 설정
resp.setContentType("text/html");
resp.setCharacterEncoding("UTF-8");
resp.setHeader("Custom-Header", "This is a custom header");
// 응답 데이터가 브라우저에 캐시되지 않도록 설정
resp.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
resp.setHeader("Pragma", "no-cache");
resp.setDateHeader("Expires", 0); // 만료 날짜를 과거로 설정하여 캐시 무효화
// 파일 다운로드 헤더 설정 (선택적으로 주석 처리)
resp.setContentType("application/octet-stream");
resp.setHeader("Content-Disposition", "attachment; filename=\"file.txt\"");
// 응답 상태 코드 설정 (404 Not Found 예시)
// resp.sendError(HttpServletResponse.SC_NOT_FOUND, "Resource not found");
System.out.println("Response Headers:");
System.out.println("Content-Type: text/html");
System.out.println("Character-Encoding: UTF-8");
System.out.println("Custom-Header: This is a custom header");
// 응답 본문 작성
PrintWriter writer = resp.getWriter();
writer.println("<html><body>");
// writer.println("<h1>Hello, this is a GET response before</h1>");
// // 버퍼 플러시
// resp.flushBuffer();
// // 지연 추가 (5초 동안 대기)
// try {
// Thread.sleep(5000);
// } catch (InterruptedException e) {
// throw new RuntimeException(e);
// }
writer.println("<h1>Hello, this is a GET response</h1>");
writer.println("</body></html>");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("---- HTTP POST Method ----");
System.out.println("복수 파라미터 조회");
String[] names = req.getParameterValues("name");
if (names != null) {
for (String name : names) {
System.out.println("name = " + name);
}
} else {
System.out.println("No name parameters found.");
}
String age = req.getParameter("age");
System.out.println("age = " + age);
}
@Override
protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("---- HTTP PUT Method ----");
}
@Override
protected void doDelete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("---- HTTP DELETE Method ----");
}
}