كيف يمكنني تضمين رأس في موقعي التي يتم استضافتها خارجيا؟

StackOverflow https://stackoverflow.com/questions/187188

  •  06-07-2019
  •  | 
  •  

سؤال

ونحن استضافة موقع لعميل ويريدون منا أن تشمل رأس لديهم على الخادم الخاص بهم إلى الصفحات التي تستضيف. لذلك كلما يغيروا ما، وسوف تتغير تلقائيا على موقعنا.

ونحن تحاول استخدام "تشمل" علامة في التعليمات البرمجية JSP لدينا. رمز نحن نستخدم كما يلي:

<٪ @ تضمين ملف = "www.CLIENT.com/CLIENT2/MiddlePageFiles/Vendor_header.html"٪>.

ولقد حاولنا أيضا

<٪ @ تضمين ملف = "** HTTP: //**www.CLIENT.com/CLIENT2/MiddlePageFiles/Vendor_header.html"٪>.

ولسوء الحظ هذه لا تعمل بالنسبة لنا. ما يبدو أنه يحدث هو أن الرمز هو يبحث فقط محليا لهذا الملف، ويبدو أبدا أن يذهب "خارج" للبحث عن ذلك.

ونحن قادرون على سحب رأس إلى صفحتنا عندما نستخدم علامة iframe لكن بسبب الطريقة التي يتم بناؤها رأس / ترميز الماوس فوق القوائم المنسدلة لا تعمل كما يجب عندما نستخدم إطار iframe. القوائم المنسدلة و"المتتالية" تحت بقية المحتوى على الصفحة، وكنا غير قادرين على جلب منهم إلى "أعلى".

وكما عمل مؤقت حولها، وكانت تستضيف في HTML على خوادم الخاصة بنا.

وأي أفكار؟

هل كانت مفيدة؟

المحلول

إذا اخترت القيام بذلك في جاوة، انها لطيفة وسهلة باستخدام HttpClient وإصلاحه من العموم أباتشي.

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 وإصلاحه. افتراضيا انها ستحاول تلقائيا بحد أقصى 3 مرات مع كل توقيت محاولة الخروج بعد 30S.

ولكن، ربما كنت ترغب في النظر في التخزين المؤقت سلاسل للفترة مناسبة من الوقت. هل حقا لا تريد أن تجعل 2 حظر طلبات HTTP الخارجية لكل صفحة وصول إلى موقع الويب الخاص بك.

نصائح أخرى

وJSP يتضمن لا تدعم بما في ذلك ملفات عن بعد، وهذا هو السبب مطلوب URL النسبي: <لأ href = "http://java.sun.com/products/jsp/syntax/1.2/syntaxref1214.html" يختلط = "نوفولو noreferrer"> http://java.sun.com/products/jsp/syntax/1.2/syntaxref1214.html

وأقترح كتابة وظيفة والذي يفتح اتصال إلى تلك الصفحة وتنزيل محتويات ثم يطبع عليها إلى تيار out الخاصة بك. ثم يمكنك وضع تلك الوظيفة في ملف محلي وعادل include ذلك.

وماذا عن استخدام المكتبة الأساسية JSTL والقيام:

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

وهذا ينبغي أن يكون قادرا على تضمين محتوى البعيد في وقت الطلب.

وJSP يشمل ليس المقصود للعمل من هذا القبيل مع خوادم خارجية. هنا هو وسيلة رهيبة تماما لإصلاح مشكلتك، ولكنه كان الخيار الوحيد بالنسبة لي في وضع مماثل. كتابة فئة تحليل الواقع HTML من هذا الموقع، ومن ثم طباعته. وأود أن أضيف أنه كلما كنت تنوي القيام به شيء من هذا القبيل، هو دائما فكرة جيدة أن يكون نوعا من آلية المصادقة في المكان.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top