2017-11-21 2 views
1

낙타 경로에서 정적 파일을 제공하려고합니다.낙타 경로가있는 정적 파일 검색

public final void configure() throws Exception { 
    // declaring camel routes 
    // match on uri prefix must be true when parameters are passed as part of the uri 
    // for example, "http://localhost/hello/rick" 
    // http.port is in local.properties file user-api 

    from("jetty:http://0.0.0.0:{{http.port}}/user/dist/?matchOnUriPrefix=true") 
     .process(new StaticProcessor("help", "index.html", "dist")) 
     .routeId("static"); 

    from("jetty:http://0.0.0.0:{{http.port}}/user?matchOnUriPrefix=true") 
    .to("cxfbean:userService"); 
    } 

이 잘 작동합니다

내 주요 클래스의 노선이 코드 조각이 포함되어 있습니다. URL : http://xxxx:8086/user/dist/index.html을 누르면 내 색인 페이지가 렌더링되고 URL은 인 것으로 표시됩니다. 내가 페이지 (F5 키)를 다시로드 할 때

는하지만, URL은된다 : http://xxxx:8086/user/dist//와 나는 같은 오류가 발생합니다 :

이 페이지는 자신감으로 대체되어 있어야합니다. swagger-maven-plugin에 대한 유일한 참조로 응용 프로그램의 pom.xml에 다음과 같은 내용이 있습니까?

<build> 
     <plugins> 
      <plugin> 
       <groupId>com.github.kongchen</groupId> 
       <artifactId>swagger-maven-plugin</artifactId> 
       <executions> 
        <execution> 
         <id>swagger</id> 
         <phase>compile</phase> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 

나는 나의 효과적인 POM이 의존성을 가지고있다. 그래서 나는 무엇을 놓치고 있습니까?

나는 http://clv035sl-8947d6:8888/user/dist을 가진 어떤 URL이라도 index.html으로 전화를 걸어야한다는 것을 알고 싶다. 왜 내가 URL의 끝에 index.html을 명시 적으로 작성해야합니까?

도움이나 의견을 보내 주시면 감사하겠습니다.

+0

안녕하세요! "jetty : http : ///.0.0.0 : {{http.port}}/user/dist? matchOnUriPrefix = true"와 같이 "dist"에서 슬래시 바 "/"를 제거하려고 했습니까? 아니면 서블릿을 처리하는 중에 경로에서 허풍이 생길 수도 있습니다. 결과를 보려면 제거하려고하십시오. –

+0

@RicardoZanini, dist 뒤에 "/"를 제거하려고했으나 작동하지 않았습니다. : –

답변

1

this blog post을 기반으로 시나리오를 테스트하기 위해 간단한 JUnit 테스트 케이스를 만들었습니다.

StaticProcessor 클래스의 구현은 어디에 있습니까? 나는 매우 유사이 시나리오의 어떤 (IMHO)을 구현했습니다 :

public void configure() throws Exception { 

    from("jetty:http://0.0.0.0:8080/user/dist?matchOnUriPrefix=true").process(new Processor() { 

     public void process(Exchange exchange) throws Exception { 
      Message in = exchange.getIn(); 

      String relativepath = in.getHeader(Exchange.HTTP_PATH, String.class); 
      String requestPath = in.getHeader("CamelServletContextPath", String.class); //CamelServletContextPath 

      if (relativepath.isEmpty() || relativepath.equals("/")) { 
       relativepath = "index.html"; 
      } 

      final String formattedPath = String.format("%s/%s", requestPath, relativepath); 
      InputStream pathStream = this.getClass().getResourceAsStream(formattedPath); 
      Path path = FileSystems.getDefault().getPath(this.getClass().getResource(formattedPath).getPath()); 

      Message out = exchange.getOut(); 
      try { 
       out.setBody(IOUtils.toByteArray(pathStream)); 
       out.setHeader(Exchange.CONTENT_TYPE, Files.probeContentType(path)); 
      } catch (IOException e) { 
       out.setBody(relativepath + " not found."); 
       out.setHeader(Exchange.HTTP_RESPONSE_CODE, "404"); 
      } 
     } 
    }).routeId("static"); 
} 

그것은 필요한 자원이 노출 될 수있는 클래스 경로에서 받아 응답에 밖으로 메시지를 설정합니다. 제발, test case 전체를 한번보세요. 나는 다음과 같은 URL을 테스트 한

:

난 당신이 그랬던 것처럼 자신감 플러그인 종속성을 추가 있습니다.

StaticProcessor 구현을 테스트하고 내 대답을 편집하는 것이 도움이되는지 알려주십시오.

건배

+0

이 Rnd에 노력을 기울여 주셔서 감사합니다.하지만 여전히 나는 확실하지 않습니다. 무엇이 누락 되었습니까? –

+0

안녕하세요! 문제는 StaticProcessor에 있습니다. 구현은 어디에 있습니까?나 한테 맡겨 줄 수있어? –

+0

이것은 정말 잘 작동합니다. 하지만 url : http : // localhost : 8080/user/dist/index.html을 누르면 콘솔에있는 모든 js 파일의 이름이 생깁니다. 내 네트워크 탭에는 index.html을 포함하여로드 된 모든 js 파일이 표시됩니다. 그러나 index.html은 제공되지 않습니다 (브라우저에 내용이로드되지 않음을 의미). 브라우저가 비어 있습니다. 어떤 도움이 필요합니까? –