웹 애플리케이션을 사용하다 보면 사용자가 특정 작업을 수행한 후 이전 페이지로 자연스럽게 돌아가야 하는 경우가 자주 있습니다. 예를 들어, 품목을 편집하는 페이지에서 작업을 완료한 후 편집 전 페이지로 돌아가야 하는 경우가 그렇죠. 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을 관리하는 방식은 웹 애플리케이션의 사용성을 크게 향상시킬 수 있습니다.
이 방법은 사용자가 작업을 마친 후 예상한 페이지로 돌아가길 기대할 때 특히 유용합니다.
하지만, 세션을 사용할 때는 항상 서버메모리와 보안을 고려해야 하며, 적절한 시점에 세션을 관리하도록 하면 될거 같습니다.
'Language > JSP' 카테고리의 다른 글
JSP에서 spring security 적용 후 iframe 사용 시 Refused to display in a frame because it set 'X-Frame-Options' to 'deny' 에러 (0) | 2024.03.19 |
---|