문제

우리는 클라이언트를위한 사이트를 호스팅하고 있으며 서버에있는 헤더를 우리가 호스팅하는 페이지에 포함시키기를 원합니다. 따라서 변경할 때마다 사이트에서 자동으로 변경됩니다.

JSP 코드에서 "포함"태그를 사용하려고합니다. 우리가 사용하는 코드는 다음과 같습니다.

< %@ include file = "www.client.com/client2/middlepagefiles/vendor_header.html" %>.

우리는 또한 시도했습니다

< %@ include file = "** http : //**www.client.com/client2/middlepagefiles/vendor_header.html" %>.

불행히도 이것들은 우리를 위해 일하지 않습니다. 일어나고있는 것으로 보이는 것은 코드 가이 파일을 위해 로컬로만 찾고 있고 그것을 찾기 위해 "외부"로 가지 않는 것 같습니다.

우리는 iframe을 사용할 때 헤더를 우리 페이지로 끌어 당길 수 있지만, 헤더가 제작되는 방식으로 인해 드롭 다운 메뉴의 마우스가 iframe을 사용할 때와 같이 작동하지 않습니다. 드롭 다운 메뉴는 페이지의 나머지 콘텐츠 아래에 "계단식"이므로 "상단"으로 가져올 수 없었습니다.

임시 작업으로, 우리의 서버에서 HTML을 호스팅하고있었습니다.

어떤 아이디어?

도움이 되었습니까?

해결책

Java 에서이 작업을 선택하면 Apache Commons의 HTTPCLIEN을 사용하는 것이 좋고 쉽습니다.

public static String fetchSourceHtml( String urlString ) {

  try {
    HttpClient httpClient = new HttpClient();
    GetMethod getMethod = new GetMethod( urlString );
    getMethod.setFollowRedirects( true );

    int httpStatus = httpClient.executeMethod( getMethod );

    if (httpStatus >= 400) {
      return "";
    }

    String sourceHtml = getMethod.getResponseBodyAsString();
    return sourceHtml;
  }
  catch (IOException e) {
    return "";
  }
}

빠르고 더러운 솔루션의 경우 JSP를 직접 호출 할 수 있습니다. 물론 원하는 경우 메소드를 호출하기 위해 Taglib 태그를 만들 수 있습니다.

httpclient의 타임 아웃 및 재 시도 메커니즘을 변경할 수 있습니다. 기본적으로 30 대 이후에 각 시도 타이밍을 통해 최대 3 배까지 자동으로 시도합니다.

그러나 아마도 적절한 시간 동안 문자열을 캐싱하고 싶을 것입니다. 귀하는 각 페이지에 대한 2 개의 차단 외부 HTTP 요청을 사이트에 액세스하고 싶지 않습니다.

다른 팁

JSP는 원격 파일을 포함하여 지원하지 않기 때문에 상대 URL이 필요한 이유입니다. http://java.sun.com/products/jsp/syntax/1.2/syntaxref1214.html

해당 페이지에 대한 연결을 열고 내용을 다운로드 한 다음 자신의 기능을 인쇄하는 기능을 작성하는 것이 좋습니다. out 개울. 그런 다음 해당 기능을 로컬 파일에 넣을 수 있습니다. include 저것.

JSTL Core 라이브러리를 사용하고 수행하는 것은 어떻습니까 :

<c:import url="http://www.CLIENT.com/CLIENT2/MiddlePageFiles/Vendor_header.html" />

요청 시간에 원격 콘텐츠를 포함시킬 수 있어야합니다.

JSP 포함은 외부 서버에서는 이와 같이 작동하지 않습니다. 여기에 문제를 해결하는 완전히 끔찍한 방법이 있지만 비슷한 상황에서 저에게 유일한 옵션이었습니다. 수업을 작성하여 해당 사이트에서 HTML을 실제로 구문 분석 한 다음 인쇄하십시오. 나는 당신이 이와 같은 일을 할 때마다 항상 일종의 인증 메커니즘을 갖는 것이 좋은 생각이라고 덧붙입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top