Language/JSP

JSP에서 세션 활용하여 이전 페이지url 정보 유지하기

멱군 2024. 3. 18. 20:43

웹 애플리케이션을 사용하다 보면 사용자가 특정 작업을 수행한 후 이전 페이지로 자연스럽게 돌아가야 하는 경우가 자주 있습니다. 예를 들어, 품목을 편집하는 페이지에서 작업을 완료한 후 편집 전 페이지로 돌아가야 하는 경우가 그렇죠. JSP에서 세션을 이용해서 이전페이지 url 정보를 유지 할 수 있습니다. 이번 포스팅에서는 JSP에서 사용자가 방문했던 마지막 URL을 세션에 저장하고, 해당 정보를 활용해 작업 후 이전 페이지로 돌아가는 방법을 사용해볼께요.

 

 

세션에 URL 저장하기

사용자가 특정 페이지에 접근할 때마다 현재의 리퍼러 URL, 즉 이전 페이지의 URL을 세션에 저장하는 것으로 시작합니다. 이렇게 함으로써, 사용자가 다음 작업을 수행할 때 이전 페이지로 쉽게 돌아갈 수 있는 경로를 확보할 수 있습니다.

예를 들면 평소에는 품목을 수정하기 위해서 listItem페이지에서 수정하기 버튼을 눌러서 editItem페이지로 이동을 합니다. 그리고 수정을 완료 하면 다시 listItem페이지로 넘어오게 됩니다. 

하지만 listItem페이지가 아닌 다른 페이지에서 editItem페이지로 넘어갈일이 있습니다. 이때 업데이트 완료 후 listItem페이지가 아닌 이전페이지를 유지해야 하는 것이지요.

 

특정 페이지 접근 시 세션에 URL 저장 예시

@GetMapping("/editItem")
public String editItemPage(HttpServletRequest request, HttpSession session) {
    // 현재 요청의 리퍼러 URL을 세션에 저장
    String referrer = request.getHeader("Referer");
    session.setAttribute("prevPageUrl", referrer);
    return "editItemPage";
}

위 코드는 사용자가 '/editItem' URL로 이동할 때 HTTP 요청에서 'Referer' 헤더를 추출해 세션에 'prevPageUrl'이라는 이름으로 저장합니다.

즉 어디서 접근하든 editItem페이지는 이전페이지에서 접근했던 정보를 모두 알고 있게 됩니다.

 

작업 처리 후 세션에 저장된 URL로 리다이렉트

@PostMapping("/updateItem")
public String updateItem(YourItem item, HttpSession session) {
    // 아이템 업데이트 로직 처리...

    // 세션에서 이전 페이지 URL 가져오기 및 리다이렉트
    String prevPageUrl = (String) session.getAttribute("prevPageUrl");
    return "redirect:" + (prevPageUrl != null ? prevPageUrl : "/listitemPage");
}

사용자가 아이템 업데이트 작업을 마치고 폼을 제출하면, 세션에서 이전 페이지의 URL을 가져와 해당 페이지로 리다이렉트합니다.

만약 세션에 저장된 URL이 없다면 /listitemPage 기본 페이지로 리다이렉트합니다.

그런데 이 루틴이면 항상 이전페이지 값이 계속 있을꺼 같네요.

 

전체소스코드

아래는 JSP에서 세션을 활용해 이전 페이지로 돌아가기 위한 전체소스코드입니다.

서블릿을 이용하여 HTTP 요청을 처리하고, 세션에 이전 페이지의 URL을 저장하며, 사용자가 작업을 완료한 후 해당 URL로 리디렉션을 합니다.

// EditItemController.java
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;

@Controller
public class EditItemController {

    @GetMapping("/editItem")
    public String editItemPage(HttpServletRequest request, HttpSession session) {
        // 현재 요청의 리퍼러 URL을 세션에 저장
        String referrer = request.getHeader("Referer");
        session.setAttribute("prevPageUrl", referrer);
        return "editItemPage";
    }

    @PostMapping("/updateItem")
    public String updateItem(YourItem item, HttpSession session) {
        // 아이템 업데이트 로직 처리...

        // 세션에서 이전 페이지 URL 가져오기 및 리다이렉트
        String prevPageUrl = (String) session.getAttribute("prevPageUrl");
        return "redirect:" + (prevPageUrl != null ? prevPageUrl : "/listitemPage");
    }
}

위의 코드는 YourItem 클래스와 editItemPage 및 listItemPage와 같은 JSP 뷰가 존재한다고 가정하고 작성했답니다. 

실제 사용할 때는 해당 클래스와 뷰 이름을 실제 프로젝트에 맞게 변경해야 해요.

이 코드는 Spring Framework의 @Controller 에서 작성했어요.

JSP/서블릿 기반 프로젝트에서는 HttpServlet을 상속받는 서블릿 클래스를 작성하여 위와 같은 로직을 구현할 수 있습니다.

 

소스코드다운로드

위소스는 아래의 파일에서 다운로드 받을 수 있습니다.

JSP에서 세션 활용하여 이전 페이지url 정보 유지하기.zip
0.00MB

 

결론

JSP에서 세션을 사용해 사용자의 이전 페이지 URL을 관리하는 방식은 웹 애플리케이션의 사용성을 크게 향상시킬 수 있습니다.

이 방법은 사용자가 작업을 마친 후 예상한 페이지로 돌아가길 기대할 때 특히 유용합니다.

하지만, 세션을 사용할 때는 항상 서버메모리와 보안을 고려해야 하며, 적절한 시점에 세션을 관리하도록 하면 될거 같습니다.