Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Archives
Today
Total
관리 메뉴

KSI일기장

spring initfilter, dofilter 생성 본문

Spring

spring initfilter, dofilter 생성

MyDiaryYo 2023. 8. 29. 00:08

기존에 했던 적이 있지만 기억이 가물가물해 다시 한번 올려봅니다.

 

jsp에서  js연결을 평소와 똑같이 했는데 할 수 없다고 404가 애러가 나타나서 보니

최상위주소가 필요한데 항상 쓰던 최상위 주소 contextPath가 안먹는듯 하다...

생각해보니 최상위주소를 contextPath라는 변수로 설정해 주지 않았다...

그래서 아래와 같이 filter를 생성해 보겠습니다.

 

 

 

 

 

 

 

-filter를 생성하고 나면 아래와 같이 필터 클래스가 만들어질 것입니다.

package my.company.test.filter;

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpFilter;

/**
 * Servlet Filter implementation class initFilter
 */
@WebFilter("/initFilter")
public class initFilter extends HttpFilter implements Filter {
       
    /**
     * @see HttpFilter#HttpFilter()
     */
    public initFilter() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see Filter#destroy()
	 */
	public void destroy() {
		// TODO Auto-generated method stub
	}

	/**
	 * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
	 */
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		// TODO Auto-generated method stub
		// place your code here

		// pass the request along the filter chain
		chain.doFilter(request, response);
	}

	/**
	 * @see Filter#init(FilterConfig)
	 */
	public void init(FilterConfig fConfig) throws ServletException {
		// TODO Auto-generated method stub
	}

}

 

 

 

 

-위 코드(필터 클래스 생성 후 아무것도 건드리지 않은 상태)에서

public void init은 위로 올려주고 아래와 같이 수정해 줍니다.

package my.company.test.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpFilter;
import javax.servlet.http.HttpServletRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@WebFilter(filterName = "initFilter", urlPatterns = "/*")
// -> /* :모든경로를 의미
public class InitFilter extends HttpFilter implements Filter {
	//Logger / Debug Mode 사용하기

	//Logger객체 생성(해당클래스에 대한 log를 출력하는 객체)
	private Logger logger = LoggerFactory.getLogger(InitFilter.class);
	// LoggerFactory.getLogger(클래스이름);

	//필터가 생성될 때 생성
	public void init(FilterConfig fConfig) throws ServletException {
		logger.info("초기화 필터 생성");
		//logger를 이용해 출력하는 방법
		//trace-debug-info-warn-error
		//-> 주로 debug, info, error 사용
		//debug :개발의 흐름을 파악할 때(해당코드가 실행됬는지, 파라미터가 현재 무슨값인지 확인할 때)
		//info :메소드 실행 파악
	}

	//필터가 파괴될 때 실행(서버는 켜져있는데 백엔드 코드 수정됬을 때)
	public void destroy() {

		logger.info("초기화 필터 파괴");
	}

	
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

		// application 내장 객체 얻어오기
				ServletContext application = request.getServletContext();

				// 최상위 주소 얻어오기
				String contextPath =  ( (HttpServletRequest)request ).getContextPath();
											// 다운캐스팅
				// 세팅
				application.setAttribute("contextPath", contextPath);

		chain.doFilter(request, response);
	}

}

contextPath변수 설정 완료!!

그럼 이제 contextPath를 어디서나 사용할 수 있게된다!