Time does not change us. It just unfolds us.

Web/Else

[Web]Url 주소 가져오기

소젬 2021. 10. 25. 11:28

웹 프로젝트에서 페이지에 해당하는 목록을 표시할 때 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를 가져오고, 각각의 menuactive 상태를 판단하여 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

 

request.getContextPath() ,request.getRequestURI() 등 url 주소 가져오는 함수

JSP 자바 코딩에서 다양한 url 주소 가져오는 함수를 정리할게요 ㅎ request.getContextPath() 함수 = 프로젝트 Path만 가져옵니다. 예)  http://localhost:8080/project/list.jsp [return]        /proj..

jogakleeron.tistory.com

 

'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