KSI일기장
spring initfilter, dofilter 생성 본문
기존에 했던 적이 있지만 기억이 가물가물해 다시 한번 올려봅니다.
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를 어디서나 사용할 수 있게된다!
'Spring' 카테고리의 다른 글
231031 ModelAndView, Model (0) | 2023.10.31 |
---|---|
231031 JPA 이론 (0) | 2023.10.31 |
scope종류(page,request,session,application)와범위 (0) | 2023.06.29 |
0515spring 웹소켓(WebSocket) 이용한 채팅(Chatting) (0) | 2023.05.15 |
spring에러 beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type ..... (0) | 2023.05.15 |