سؤال

لدي المشارب التالية ActionBean:

package myapp;

import net.sourceforge.stripes.action.*;

public class WelcomeActionBean extends MyAppActionBean {
    @DefaultHandler
    public Resolution view() {
        return new ForwardResolution("/welcome.jsp");
    }
}

عندما أقوم بتحميل /MyApp/Welcome.action في متصفح، يتم عرض محتويات Welcome.jsp.

ومع ذلك، عندما أتحرك Welcome.jsp to / Web-inf/jsp/welcome.jsp وقم بتغيير الوسيطة التلقائية المراد أن تعكس هذا التغيير، أي:

return new ForwardResolution("/WEB-INF/jsp/welcome.jsp");

أحصل على الخطأ التالي عندما أحمل /myapp/Welcome.action:

net.sourceforge.stripes.exception.ActionBeanNotFoundException: Could not locate an ActionBean that is bound to the URL [/Welcome.action]. Commons reasons for this include mis-matched URLs and forgetting to implement ActionBean in your class. Registered ActionBeans are: {/controller/DefaultView.action=class net.sourceforge.stripes.controller.DefaultViewActionBean, /myapp/MyApp.action/=class myapp.MyAppActionBean, /myapp/Welcome.action/=class myapp.WelcomeActionBean, /controller/DefaultView.action/=class net.sourceforge.stripes.controller.DefaultViewActionBean, /myapp/MyApp.action=class myapp.MyAppActionBean, /myapp/Welcome.action=class myapp.WelcomeActionBean}
    net.sourceforge.stripes.controller.AnnotatedClassActionResolver.getActionBean(AnnotatedClassActionResolver.java:341)
    net.sourceforge.stripes.controller.NameBasedActionResolver.getActionBean(NameBasedActionResolver.java:264)
    net.sourceforge.stripes.controller.AnnotatedClassActionResolver.getActionBean(AnnotatedClassActionResolver.java:293)
    net.sourceforge.stripes.controller.DispatcherHelper$1.intercept(DispatcherHelper.java:106)
    net.sourceforge.stripes.controller.ExecutionContext.proceed(ExecutionContext.java:158)
    net.sourceforge.stripes.controller.BeforeAfterMethodInterceptor.intercept(BeforeAfterMethodInterceptor.java:113)
    net.sourceforge.stripes.controller.ExecutionContext.proceed(ExecutionContext.java:155)
    net.sourceforge.stripes.controller.ExecutionContext.wrap(ExecutionContext.java:74)
    net.sourceforge.stripes.controller.DispatcherHelper.resolveActionBean(DispatcherHelper.java:102)
    net.sourceforge.stripes.controller.DispatcherServlet.resolveActionBean(DispatcherServlet.java:238)
    net.sourceforge.stripes.controller.DispatcherServlet.service(DispatcherServlet.java:141)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    net.sourceforge.stripes.controller.StripesFilter.doFilter(StripesFilter.java:247)

هل من الضروري إجراء أي تكوين خاص من أجل تخزين ملفات JSP في دليل Web-INF؟

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

المحلول

فهمي هو ما يلي: WelcomeActionBean في ليس في حزمة ([شبكة الويب، www، stripes، الإجراء]) التعامل معها تلقائيا من قبل NameBasedActionResolver (اقرأ Javadoc) لذلك يتم تعيينه في الواقع إلى /myapp/Welcome.action (كما هو مذكور في رسالة الخطأ).

لذلك، عند الطلب /Welcome.action, ، ليس هناك أي موجودة ActionBean ملزمة بهذا عنوان URL وحل العزم /welcome.jsp (مرة أخرى، انظر NameBasedActionResolver جافادوك). وعند نقل JSP الخاص بك تحت /WEB-INF/jsp, حسنا، أنت تنفد من الحظ وكل شيء فشل فقط.

لحل هذا، إما:

  • الوصول إلى عنوان URL "الصحيح" (في الحالة الحالية) IE /myapp/Welcome.action

  • أو، إذا كنت تريد أن يكون التصميم الخاص بك /Welcome.action من قبل الاتفاقيات، حركه في حزمة تعامل من قبل NameBasedActionResolver, ، على سبيل المثال action:

    package myapp.action;
    
    import net.sourceforge.stripes.action.*;
    
    public class WelcomeActionBean extends MyAppActionBean {
        @DefaultHandler
        public Resolution view() {
            return new ForwardResolution("/WEB-INF/jsp/welcome.jsp");
        }
    }
    
  • أو أضف أ @UrlBinding لعملك لتكوين الربط بشكل صريح:

    package myapp;
    
    import net.sourceforge.stripes.action.*;
    
    @UrlBinding("/Welcome.action")
    public class WelcomeActionBean extends MyAppActionBean {
        @DefaultHandler
        public Resolution view() {
            return new ForwardResolution("/WEB-INF/jsp/welcome.jsp");
        }
    }
    

نصائح أخرى

WEB-INF هو دليل خاص، ومحتوياتها غير قابلة للوصول إلى العميل. (من المنطقي - فلن ترغب في أن يكون العميل قادرا على تنزيل web.xml أو الخاص بك .class الملفات.)

تحتاج إلى نقل ملفات JSP خارج WEB-INF.

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