Wanna be Brilliant Full-Stack Developer

HttpServletRequest 과 HttpServletResponse 의 역할 본문

Back-End/Spring Boot

HttpServletRequest 과 HttpServletResponse 의 역할

Flashpacker 2023. 5. 15. 13:43

HttpServletRequest는 HTTP 요청 정보를 캡슐화하는 객체입니다. 이 객체는 클라이언트에서 서버로 전송된 요청 메시지의 내용과 속성을 확인하고 수정할 수 있습니다. 예를 들어, 클라이언트의 IP 주소, 요청 메소드(GET, POST 등), 요청 헤더와 바디 등의 정보가 포함됩니다.

 

HttpServletResponse는 Http 응답 정보를 캡슐화하는 객체 입니다. 이 객체는 서버에서 클라이언트로 전송되는 응답 메시지의 내용과 속성을 확인하고 수정할 수 있습니다. 예를 들어, 응답코드, 응답 헤더와 바디등의 정보가 포함됩니다. 

 

package com.mes.Common.Interceptor;

import com.mes.Common.DataTransferObject.Page;
import com.mes.mesSystem.SystemService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.ObjectUtils;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;

@Slf4j
@Component
public class Handler extends HandlerInterceptorAdapter {

    @Autowired
    private SystemService systemService;

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws IOException {
        HttpSession session = request.getSession();


        Session userData = (Session) session.getAttribute("userData");

        response.setHeader("pragma", "No-cache");
        response.setHeader("Cache-Control", "no-cache");
        response.addHeader("Cache-Control", "No-store");
        response.setDateHeader("Expires", 1L);

        try {
            //세션 회원 정보 검증
            if (ObjectUtils.isEmpty(userData)) {
                if (!request.getServletPath().equals("/")) {
                    response.setContentType("text/html; charset=UTF-8");
                    PrintWriter out = response.getWriter();
                    out.println("<script>alert(' 회원데이터가 존재하지않습니다.\\n 로그인페이지로 이동합니다.'); location.href='/login';</script>");
                    out.flush();
                    out.close();
                    return false;
                } else {
                    response.setContentType("text/html; charset=UTF-8");
                    PrintWriter out = response.getWriter();
                    out.println("<script>location.href='/login';</script>");
                    out.flush();
                    out.close();
                    return false;
                }
            //ajax요청 검증
            } else if ("XMLHttpRequest".equals(request.getHeader("X-Requested-With"))) {
                String path = request.getParameter("menu_code");
                if (path != null) {
                    String log_check = request.getParameter("menu_check");
                    if (log_check != null) {
                        Page p = new Page();
                        p.setKeyword(path);
                    }
                }
            //아이콘(favicon), error 예외
            } else if (request.getServletPath().equals("/icon.ico") || request.getServletPath().equals("/icon2.ico") || request.getServletPath().equals("/favicon.ico") || request.getServletPath().equals("/error")) {

            } else {
                session.setMaxInactiveInterval(60 * 60 * 24);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return true;
    }
}

 

 

 

else if ("XMLHttpRequest".equals(request.getHeader("X-Requested-With"))) {
                String path = request.getParameter("menu_code");
                if (path != null) {
                    String log_check = request.getParameter("menu_check");
                    if (log_check != null) {
                        Page p = new Page();
                        p.setKeyword(path);
                    }
                }
            //아이콘(favicon), error 예외
            }

HttpServletRequest 인터페이스는 클라이언트에서 전송된 HTTP 요청 정보를 저장합니다. preHandle 메서드에서는 HttpServletRequest 인스턴스를 통해 클라이언트 요청의 HTTP 헤더, 파라미터, 쿠키 등의 정보를 읽어옵니다. 예를 들어, 아래 코드는 클라이언트가 전송한 X-Requested-With 헤더 값을 가져와서 Ajax 요청인지 확인하는데 사용됩니다.

 

 

response.setHeader("pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.addHeader("Cache-Control", "No-store");
response.setDateHeader("Expires", 1L);

HttpServletResponse 인터페이스는 서버에서 클라이언트로 전송할 HTTP 응답 정보를 저장합니다. preHandle 메서드에서는 HttpServletResponse 인스턴스를 통해 HTTP 응답 헤더와 바디를 설정합니다. 예를 들어, 아래 코드는 클라이언트에게 'no-cache' 캐시 헤더를 전송하여 캐싱을 방지합니다.

 

response.setContentType("text/html; charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<script>alert(' 회원데이터가 존재하지않습니다.\\n 로그인페이지로 이동합니다.'); location.href='/login';</script>");
out.flush();
out.close();

그리고 이 코드에서는 PrintWriter 객체를 사용하여 HTML을 직접 생성하여 클라이언트로 보내고 있습니다. 이는 서버에서 발생한 에러 및 인증 문제를 클라이언트에게 전달하는 역할을 하고 있습니다.

 

 

 

 

 

HttpServletRequest:
- HttpServletRequest는 웹 애플리케이션에서 클라이언트의 HTTP 요청에 대한 정보를 제공하는 객체입니다.
- 웹 브라우저에서 서버로 전송되는 HTTP 요청에 대한 다양한 정보를 HttpServletRequest를 통해 얻을 수 있습니다.
- HttpServletRequest를 통해 요청 메서드, 헤더, 쿠키, 세션, 파라미터, 경로, URL 등의 정보를 확인할 수 있습니다.
- 이 정보를 활용하여 클라이언트의 요청에 맞는 서비스를 제공하고, 요청 처리 결과를 생성하여 HttpServletResponse로 전달할 수 있습니다.

HttpServletResponse:
- HttpServletResponse는 웹 애플리케이션에서 클라이언트로 응답을 보내는데 사용되는 객체입니다.
- 서버에서 클라이언트로 보내는 응답에 대한 설정과 내용을 HttpServletResponse를 통해 조작할 수 있습니다.
- HttpServletResponse를 사용하여 응답 상태 코드, 헤더, 쿠키, 출력 스트림 등을 설정할 수 있습니다.
- 서버에서 생성한 응답 결과를 HttpServletResponse를 통해 클라이언트에게 전송할 수 있습니다.
- 이를 통해 클라이언트에게 HTML 페이지, 이미지, 파일 등을 제공하고, 클라이언트의 요청에 대한 응답을 생성할 수 있습니다.

위 코드에서 HttpServletRequest와 HttpServletResponse는 인터셉터의 `preHandle` 메서드의 매개변수로 사용됩니다. 이를 통해 클라이언트의 요청 정보를 확인하고, 필요한 경우 응답을 생성하거나 요청을 가로채는 등의 작업을 수행할 수 있습니다.

`preHandle` 메서드는 핸들러(컨트롤러)의 실행 전에 호출되는 메서드로, 클라이언트의 요청이 핸들러에 전달되기 전에 실행됩니다. 이 메서드에서 HttpServletRequest와 HttpServletResponse를 통해 다음과 같은 작업이 수행됩니다:

1. 세션 정보 확인:
   - HttpSession을 사용하여 세션 정보를 확인합니다.
   - `session.getAttribute("userData")`를 통해 "userData"라는 이름의 세션 속성 값을 가져옵니다.
   - 세션 정보를 활용하여 로그인 여부나 인증 상태 등을 확인할 수 있습니다.

2. 응답 헤더 설정:
   - `response.setHeader()`를 통해 응답 헤더 값을 설정합니다.
   - 여기서는 캐시 관련 헤더 값을 설정하여 브라우저에서 페이지 캐시를 사용하지 않도록 합니다.

3. 요청 유효성 검증:
   - 클라이언트의 요청이 유효한지 검증합니다.
   - 세션 정보