Spring Dispatcher Servlet, вызывающий проблемы при попытке загрузить мои CSS-таблицы - PullRequest
0 голосов
/ 18 апреля 2019

Когда я загружаю свою страницу JSP home.jsp, я включаю таблицу стилей signIn.css. Но что-то происходит, когда мне не удается загрузить ресурс: сервер ответил со статусом 404 (не найдено) для моей таблицы стилей. Я думаю, что мой сервлет весеннего диспетчера ищет URI /customerPortal/signIn.css, когда мой файл CSS хранится в /customerPortal/src/main/webapp/WEB-INF/signIn.css (без использования Spring у меня нет проблем) , Я думаю, что-то с getServletMappings, где он отрезает расположение файла.

Моя страница CSS находится в том же месте, что и моя страница home.jsp. Я также настроил свой класс SpringMvcInitializer и класс MvcConfiguration, поскольку я использую загрузку Spring. У меня также есть домашний контроллер. Я не использую spring-dispatcher-servlet.xml.

//MvcConfiguration.java

package Configuration;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;

import ShoppingCart.Cart;

@Configuration
@ComponentScan(basePackages="Controllers/")
@EnableWebMvc
public class MvcConfiguration extends WebMvcConfigurerAdapter {

    @Bean
    public ViewResolver getViewResolver()
    {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/");
        resolver.setSuffix(".jsp");

        return resolver;
    }

    @Bean
    public Cart getCart(){
        return new Cart();
    }
}

//SpringMvcInitializer.java

package Configuration;

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

public class SpringMvcInitializer extends AbstractAnnotationConfigDispatcherServletInitializer{

    @Override 
    protected Class<?>[] getRootConfigClasses() {
        return new Class[] {MvcConfiguration.class};
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    protected String[] getServletMappings() {

        return new String[] { "/" };
    }
}

// home.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<%@include file="header.jsp" %>
<link rel="stylesheet" href="/src/main/webapp/WEB-INF/signIn.css">
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
</body
</html>

Мои страницы jsp и css хранятся в /customerPortal/src/main/webapp/WEB-INF/home.jsp /customerPortal/src/main/webapp/WEB-INF/signIn.css

Но на моей консоли затмения я получаю следующее: - DispatcherServlet с именем 'dispatcher', обрабатывающим GET-запрос для [/customerPortal/signIn.css] - Не найден метод обработчика для [/signIn.css] - Не найдено сопоставление для HTTP-запроса с URI [/customerPortal/signIn.css] в DispatcherServlet с именем «dispatcher»

И в браузере Chrome я получаю: GET http://localhost:8035/customerPortal/signIn.css net :: ERR_ABORTED 404 (не найдено)

Почему он ищет URI /customerPortal/signIn.css, когда мой файл CSS хранится в /customerPortal/src/main/webapp/WEB-INF/signIn.css?

1 Ответ

1 голос
/ 19 апреля 2019

Для вашей информации, вы не можете напрямую получить доступ к WEB-INF с помощью URL, Java-сервлеты не позволят этого. более того, не размещайте ресурсы под WEB-INF

Что тебе теперь делать?

Создайте папку с именем resources в webapp, а затем создайте папку для css (resources / css). затем поместите все css в папку css. и создайте другую папку js и поместите туда все файлы JavaScript.

затем добавьте этот метод в ваш класс MvcConfiguration.

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

Теперь у вас есть CSS в ресурсах, затем доступ к нему через

<link rel="stylesheet" href="resources/css/signIn.css" />

Решение для вашей текущей проблемы, но не рекомендуется размещать статические ресурсы под WEB-INF.

измените свой <link rel="stylesheet" href="/src/main/webapp/WEB-INF/signIn.css"> код на этот

<style><%@include file="/WEB-INF/signIn.css"%></style>

удачи ...! Удачного кодирования ..!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...