웹 프로젝트에서 페이지에 해당하는 목록을 표시할 때 Url 주소를 가져와 인식하였다.
네이버 페이지로 예시를 보자면, 아래와 같이 책방에 관련된 페이지를 보고 있을 때 책방 메뉴를 시각적으로 표현해주는 기능을 구현했다.
url을 주소를 가져오는 함수들은 다음과 같다.
예) http://localhost:8080/project/list.jsp
함수 | 예시 | 내용 |
request.getContextPath() | /project | 프로젝트 Path만 가져온다 |
request.getRequestURI() | /project/list.jsp | 프로젝트 + 파일경로까지 가져온다. |
request.getRequestURL() | http://localhost:8080/project/list.jsp | 전체 경로를 가져온다. |
request.ServletPath() | /list.jsp | 파일명만 가져온다. |
request.getRealPath("") |
c:\project\webapps\projectname\ | 서버 or 로컬 웹 애플리케이션 절대경로를 가져온다. |
이 중 getRequestURI() 함수를 사용하여 uri를 가져오고, 각각의 menu의 active 상태를 판단하여 html에서 표시한다.
RequestFilter.java
package com.poscoict.posmaster.config.filter;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.HashMap;
@Slf4j
@WebFilter(urlPatterns = {"/main", "/user/*"})
public class RequestFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
String uri = request.getRequestURI();
request.setAttribute("uri", uri);
String uriRoot = uri.substring(1);
if (uriRoot.contains("/")) {
String[] uris = StringUtils.split(uri.substring(1), "/");
if (uris != null) {
uriRoot = uris[0];
}
}
HashMap<String, String> activeMap = new HashMap<>();
activeMap.put(uriRoot, "menu-item-active");
request.setAttribute("activeMap", activeMap);
filterChain.doFilter(servletRequest, servletResponse);
}
}
layout.ftl
<li class="menu-item ${activeMap.apps!} menu-item-submenu" aria-haspopup="true" data-menu-toggle="hover">
/user인 경우 menu-item-active 클래스가 적용된다.
<li class="menu-item ${activeMap.user?if_exists}" aria-haspopup="true">
참고
https://jogakleeron.tistory.com/16
'Web > Else' 카테고리의 다른 글
[Web]Maven LifeCycle (0) | 2021.11.04 |
---|---|
[Web]multipart/form-data (0) | 2021.10.28 |
[Web]사용자 정의 예외 클래스 (0) | 2021.10.25 |
[Web]@ContollerAdvice, @ExceptionHandler 예외처리 (0) | 2021.10.22 |
[Web]WAS (0) | 2021.10.22 |