سؤال

وأنا محاولة لدمج SiteMesh في تطبيق القديمة باستخدام القط 5 لي في وعاء. لدي main.jsp أنني تزيين الديكور بسيط.

في decorators.xml، لقد حصلت للتو مصمم واحد يعرف:

<decorators defaultdir="/decorators">
  <decorator name="layout-main" page="layout-main.jsp">
    <pattern>/jsp/main.jsp</pattern>
  </decorator>
</decorators>

وهذا الديكور يعمل إذا أنا يدويا الذهاب إلى http://example.com/my-webapp/jsp/main.jsp. ومع ذلك، هناك عدد قليل من الأماكن حيث بريمج، بدلا من القيام إعادة توجيه إلى التخطيط الاستراتيجي المشترك، يقوم <لأ href = "http://java.sun.com/javaee/5/docs/api/javax/servlet/RequestDispatcher أتش تي أم أل # قدما (javax.servlet.ServletRequest،٪ 20javax.servlet.ServletResponse) "يختلط =" noreferrer "> إلى الأمام :

getServletContext().getRequestDispatcher("/jsp/main.jsp").forward(request, response);

وهذا يعني أن URL يبقى في شيء من هذا القبيل http://example.com/my-webapp/servlet/MyServlet بدلا من ملف التخطيط الاستراتيجي المشترك، وبالتالي لا يتم تزيين، أفترض أنها لا تتطابق مع نمط في decorators.xml.

وأنا لا يمكن أن تفعل <pattern>/*</pattern> لأن هناك صفحات JSP الأخرى التي لا تحتاج إلى أن زينت بها layout-main.jsp. لا أستطيع القيام <pattern>/servlet/MyServlet*</pattern> لMyServlet قد تحيل إلى main.jsp في بعض الأحيان وربما error.jsp في أوقات أخرى.

هل هناك طريقة للتغلب على هذه دون تغييرات موسعة لكيفية عمل السيرفلتس؟ وبما أنه من التطبيق إرث ليس لدي الكثير من الحرية في تغيير الأشياء، لذلك أنا على أمل لشيء التكوين الحكمة التي سيتم إصلاح هذا.

وثائق SiteMesh هو في الحقيقة لم تكن كبيرة. لقد تم العمل في الغالب قبالة تطبيق المثال التي تأتي مع التوزيع. أنا حقا مثل SiteMesh، وأنا على أمل يمكنني الحصول على عمل في هذه القضية.

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

المحلول

وما أفهمه هو أن SiteMesh ودمجها في تطبيق كعامل تصفية بريمج. افتراضيا، يتم استدعاء المرشحات بريمج فقط ضد الطلب الوارد الأصلي (في الحالة الخاصة بك، وطلب إلى بريمج). لا يتم تمرير طلبات اللاحقة إلى الأمام أو تضمين throuh التصفية، وبالتالي لن تكون مرت sitemesh.

ويمكنك، ومع ذلك، تكليف مرشح لطلبه على المهاجمين، وذلك باستخدام شيء من هذا القبيل:

<filter-mapping>
    <filter-name>sitemesh</filter-name>
    <servlet-name>MyServlet</servlet-name>
    <dispatcher>FORWARD</dispatcher>
</filter-mapping>

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

وهكذا خياراتك هي إما تغيير فلتر التكوين الخاص بك لتحديد FORWARD، أو لتغيير فلتر رسم خرائط لتتناسب مع مسار بريمج، بدلا من المسار JSP. أي واحد يجب أن تعمل.

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