سؤال

يظهر أدناه هيكل دليل مشروع maven Spring الخاص بي.أنا أستخدم التكوين القائم على التعليقات التوضيحية Spring-4.أقوم بتكوين الموارد كما هو موضح أدناه.لقد جربت العديد من الطرق المقترحة في العديد من أسئلة Stackoverflow ومواقع الويب الأخرى

الربيع 4 تحميل الموارد الثابتة

http://imwill.com/spring-mvc-4-add-static-resources-by-annotation/#.U5GZlXKs9i4

ولكن لم تتمكن ملفات jsp من تحميل الموارد، وترجع جميع طلبات المحتوى الثابت خطأ 404.لقد جربت هذه الأشياء في jsp،

 <link href="resources/css/bootstrap.css" rel="stylesheet" media="screen">
 <link href="/resources/css/bootstrap.css" rel="stylesheet" media="screen">
 <link href="css/bootstrap.css" rel="stylesheet" media="screen">

يحرر:أنا أستخدم servlet 2.5 لأنه حتى الآن لا أستطيع ترقية مشروعي من JBoss 5 إلى الإصدارات الأعلى.JBoss5 لا يدعم servlets 3، وهل هذا مهم؟

@Configuration
@ComponentScan("com.mgage.mvoice")
public class MyAppWebConfig extends WebMvcConfigurerAdapter {
     public void addResourceHandlers(ResourceHandlerRegistry registry) {  
        // I tried these many combinations separately.

        ResourceHandlerRegistration resourceRegistration = registry
            .addResourceHandler("resources/**");
        resourceRegistration.addResourceLocations("/resources/**");
        registry.addResourceHandler("/css/**").addResourceLocations("/css/**");
        registry.addResourceHandler("/img/**").addResourceLocations("/img/**");
        registry.addResourceHandler("/js/**").addResourceLocations("/js/**");
        registry.addResourceHandler("/resources/**")
                .addResourceLocations("classpath:/resources/"); 
              // do the classpath works with the directory under webapp?
     }

}

Project structure

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

المحلول

هذا يعمل،

giveacodicetagpre.

وفي ملفات JSP التي أشرت إلى الموارد الثابتة مثل

giveacodicetagpre.

نصائح أخرى

أعتقد أنه متأخر بعض الشيء، ومع ذلك كنت تواجه مشكلة مماثلة مؤخرا. بعد عدة أيام من المصارعة، أخيرا، اتضح أن Disatcherservlet لم يتم تكوينه للتعامل مع الطلب، وبالتالي لم يتم النظر إلى الموارد أبدا. لذلك آمل أن يجد الآخرون هذه الإجابة مفيدة.

إذا تم تعيين Servlet المرسل إلى أن فئة التكوين أعلاه قد تم تعيينه على الجذر ("/") ولكن كلمة أعلى (مثل "/ البيانات /")، ثم قد تواجه نفس المشكلة. < / ص>

لنفترض أن لدي رسم خرائط باسم "/ البيانات / *" ل Servlet Probatcher الخاص بي. لذلك تبدو مكالماتي مثل

giveacodicetagpre.

و اعتقدت أنه إذا كان لدي رسم خرائط من الموارد E.G. "/ المحتوى / ** / *"، ثم يمكنني الوصول إليها باسم

giveacodicetagpre.

ولكن ليس صحيحا، يجب أن أستخدم

giveacodicetagpre.

بدلا من ذلك. لم يكن هذا واضحا بالنسبة لي، وبما أن معظم العينات تستخدم الجذر "/" لرسم خرائط المرسل ServaTer، فلن تكون مشكلة هناك. عند النظر في وقت لاحق، يجب أن أعرف ذلك سابقا - / بيانات / يخبر أن Discatcherservlet يجب أن يقوم بتقييم المكالمة، والمحتوى / يروي Servlet أن معالج الموارد هو "وحدة التحكم".

لكنني أريد أن أجعله واضحا جدا في مقدمة بلدي (Angularjs) سواء أبحث عن البيانات (عبر خدمات الراحة) أو محتوى (إرجاع نصوص عادي). تأتي البيانات من قاعدة بيانات، ولكن المحتوى يأتي من الملفات (E.G. PDF Docs). لذلك، قررت إضافة تعيينين إلى سيرفه المرسل:

giveacodicetagpre.

فئة Midtierappconfig فارغة، لكن midtierdispatcherconfig يحدد الموارد الثابتة:

giveacodicetagpre.

الآن عندما أرغب في الوصول إلى جهاز التحكم الخاص بي، استخدم / البيانات / البادئة، وعندما أرغب في الوصول إلى مواردي، يمكنني استخدام / المحتوى / البادئة. التحذير هو أنه إذا كان لدي فئة RecheestMapping ("/ التطبيق") التي تحتوي على طريقة RequestMapping ("/ حول")، ثم سيتصل كل من البيانات / التطبيق / حول المحتوى / التطبيق / حول هذه الطريقة فقط ( ودون محاولة فعلا أعتقد أنني قد الوصول إلى الموارد AS / التطبيقات / الدورات / ما asatery أيضا)، لأن المرسل يستأدر إلى كلا "البيانات /" و "المحتوى /"، والتحليل فقط بقية عنوان URL فقط ("التطبيق / حول "في كلتا الحالتين) للعثور على Controller الصحيح.

بغض النظر، الحل الحالي الذي وصلت إليه مرضية بما فيه الكفاية بالنسبة لي، لذلك سأترك الأمر كما هو.

لقد نجح هذا بالنسبة لي.الملفات متاحة على /resources/js/select.js.انتبه أنك لست في عداد المفقودين @EnableWebMvc حاشية. ملاحظة....

@EnableWebMvc
@EnableTransactionManagement
public class ApplicationContextConfig extends WebMvcConfigurerAdapter {

    @Bean(name = "viewResolver")
    public InternalResourceViewResolver getViewResolver() {
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setPrefix("/WEB-INF/views/");
        viewResolver.setSuffix(".jsp");
        return viewResolver;
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/resources/**")
        .addResourceLocations("/resources/");
    }
}

من الممكن تبسيط URI لصفحة الويب فقط ليحتوي على اسم ملف المورد:
<link href="bootstrap.css" rel="stylesheet" media="screen">
قد يكون التكوين المناسب كما يلي:

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("*.css").addResourceLocations("/resources/css/");
}

يقوم Spring بتسلسل سلسلة "/resources/css/" مع أي اسم ملف مستخرج من URI لتحديد الموقع الفعلي للمورد.

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