2017-11-13 7 views
0

Java Spring Webproject에서 ServletContext를 가져오고 을 사용하여 웹 응용 프로그램 프로젝트의 절대 경로를 가져 오려고합니다. 나는 여전히 JavaEE와 Spring에서 초보자이므로 어쩌면 개념이 잘못되었을 수도 있습니다. ServletContext를 사용하고자하는 Java 클래스에서 @Autowired ServletContext 컨텍스트를 사용할 때 빈 개체 만 있습니다. 그러나 WebMvcConfigurerAdapter 클래스를 확장 한 RestConfiguartion 클래스에서 ServletContext를 얻었으며 ServletContext의 반환 유형 인 Java Bean에서 을 사용할 수 있습니다. 하지만 난 전혀 모른다. 다른 클래스에서 Bean을 사용하여 ServletContext를 얻는 것이 가능 한가?Spring에서 ServletContext를 가져 와서 Bean으로 제공

@Configuration 
@EnableWebMvc 
@Import({ ServiceConfiguration.class, SecurityConfiguration.class }) 
@ComponentScan(basePackages = { "de.rest", "de.security" }) 
public class RestConfiguration extends WebMvcConfigurerAdapter { 

    @Autowired 
    ServletContext context;  

    @Bean 
    public ServletContext getServletContext() { 
    System.out.println("*** Context path: *** " + context.getRealPath("/")); 
    return context; 
    }} 

답변

0

너무 다른 콩 주석 클래스에서

@Autowired 
ServletContext context; 

를 작성할 수 있습니다. 당신은 같은 맥락을 갖게 될 것입니다. 그 때문에 지정할 필요가 없습니다 : 예를 들어

@Bean 
    public ServletContext getServletContext() { 
    System.out.println("*** Context path: *** " + context.getRealPath("/")); 
    return context; 
    }} 

(어노테이션 @ComponentScan에 지정된 디렉토리에있는 모든 클래스) : 내가 해결 한 당신의 도움에

@Bean 
class X { 
    @Autowired 
    ServletContext context; 

    ... 
} 
0

감사합니다 @ComponentScan에 내 대상 클래스의 패키지를 추가하고 내 대상 클래스 @Component를 선언하고 이전에 사용한 Bean을 삽입했습니다. 결과 코드 스 니펫은 다음과 같습니다.

... 
@ComponentScan(basePackages = { "de.rest", "de.security", "de.targetPackage" }) 
public class RestConfiguration extends WebMvcConfigurerAdapter { 
... 



@Component 
public class targetClass { 

    private static String absoluteServletContextPath; 

    @Autowired 
    ServletContext context; 

    @Bean 
    public ServletContext getServletContext() { 
    absoluteServletContextPath = context.getRealPath("/"); 
    System.out.println(absoluteServletContextPath); 
    return context; 
    } 

    @Override 
    public void myMethod { 

     absoluteServletContextPath = absoluteServletContextPath.replaceAll("webapp\\\\", "") 
      .replaceAll("\\\\", "/");}}