تحويل تطبيق Stripes لاستخدام عناوين URL ودية

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

  •  05-09-2019
  •  | 
  •  

سؤال

أنا أعمل من خلال كتاب خطوط فريد داود ومحاولة تحويل تطبيق Hello World لاستخدام عناوين URL ودية، لأنني لست معجبا كبيرا من التعيينات القائمة على اللاحقة http: // localhost: 8080 / getting_started / hello.action.

هنا هو قبل ...

index.jsp:

<jsp:forward page="/Hello.action"/>

Web.xml:

<servlet-mapping>
    <servlet-name>DispatcherServlet</servlet-name>
    <url-pattern>*.action</url-pattern>
</servlet-mapping>

وليس لدي أي urlbinding على بلدي helloactionbean. لدي مثال كتاب العمل.

أتساءل عما إذا كان أمثلة الكتاب قد يناسب نسخة سابقة من المشارب، كما قمت بتنزيل 1.5.1 ويحدد Web.xml الخاص بي StripesFilter و StripesPatcher بينما رأيت DynamicMappingFilter يستخدم في مكان آخر، على سبيل المثال هذه المقالة بواسطة فريد على Theserverside.

على أي حال، قمت بإجراء التغييرات التالية:

index.jsp:

<jsp:forward page="/hello"/>

Web.xml:

<servlet-mapping>
    <servlet-name>DispatcherServlet</servlet-name>
    <url-pattern>/*</url-pattern>
 </servlet-mapping>

helloactionbean.java:

**@UrlBinding("/hello")**
public class HelloActionBean implements ActionBean 
{

ومع ذلك، عندما أحاول تحميل التطبيق من خلال http: // localhost: 8080 / getting_started أنا أرى هذا:

net.sourceforge.stripes.exception.ActionBeanNotFoundException: Could not locate an ActionBean that is bound to the URL [/]. Commons reasons for this include mis-matched URLs and forgetting to implement ActionBean in your class. Registered ActionBeans are: {/hello=class stripesbook.action.HelloActionBean, /controller/DefaultView.action=class net.sourceforge.stripes.controller.DefaultViewActionBean, /hello/=class stripesbook.action.HelloActionBean, /controller/DefaultView.action/=class net.sourceforge.stripes.controller.DefaultViewActionBean}
    at net.sourceforge.stripes.controller.AnnotatedClassActionResolver.getActionBean(AnnotatedClassActionResolver.java:341)

وإذا وصلت إلى ذلك http: // localhost: 8080 / getting_started / hello يبدو أن الخادم يذهب إلى حلقة رمي استثناء واحد بعد آخر.

أي اقتراحات تقدر - شكرا.

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

المحلول

لقد كنت أحاول بعض الأشياء الأخرى وحصلت عليها ...

قمت بإزالة تعريفات Servlet RespatcherServlet القائمة على Web.xml واستبدالها باستخدام Dynamicmappingfilter.

ككافأة، لتغيير طريقة مرور أحداث الارتباط، بحيث

http://localhost:8080/getting_started/hello?randomDate=

يصبح

http://localhost:8080/getting_started/hello/randomDate

تغيير URLBIENING على ActionBean إلى:

@UrlBinding("/hello/{$event}")

نصائح أخرى

لم تنجح من أجلي فقط استبدال Servlet المرسل مع DynamicMappingfilter (تلقيت رسالة خطأ حول DynamicMappingFilter يعمل فقط جنبا إلى جنب مع Stripesfilter). لذلك لدي اثنين من المرشحات ورسم خرائط مرشح واحد في Web.xml الخاص بي الآن:

<filter>
    <display-name>Stripes Filter</display-name>
    <filter-name>StripesFilter</filter-name>
    <filter-class>net.sourceforge.stripes.controller.StripesFilter</filter-class>
    <init-param>
        <param-name>ActionResolver.Packages</param-name>
        <param-value>com.package.myactions.package</param-value>
    </init-param>
</filter>

<filter>
    <description>Dynamically maps URLs to ActionBeans.</description>
    <display-name>Stripes Dynamic Mapping Filter</display-name>
    <filter-name>DynamicMappingFilter</filter-name>
    <filter-class>
        net.sourceforge.stripes.controller.DynamicMappingFilter
    </filter-class>
</filter>

<filter-mapping>
    <filter-name>DynamicMappingFilter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
    <dispatcher>INCLUDE</dispatcher>
</filter-mapping>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top