Java Spring MVC - HTTP 405 - 不支持请求方法“GET”加载静态 CSS 文件

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/20173879/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-12 23:43:36  来源:igfitidea点击:

Spring MVC - HTTP 405 - Request method 'GET' not supported loading static CSS File

javaeclipsespringspring-mvc

提问by Carlos Landeras

I have read several post in stackoverflow about configurations and mappings to serve static content like js and css but I can not make it work.

我已经在 stackoverflow 中阅读了几篇关于配置和映射以提供静态内容(如 js 和 css)的帖子,但我无法使其工作。

I have the following files:

我有以下文件:

-> POM.XML

-> POM.XML

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>es.landeSoft</groupId>
        <artifactId>MvcTesting</artifactId>
        <name>SpringMVCTesting</name>
        <packaging>war</packaging>
        <version>1.0.0-BUILD-SNAPSHOT</version>
        <properties>
            <java-version>1.6</java-version>
            <org.springframework-version>3.1.1.RELEASE</org.springframework-version>
            <org.aspectj-version>1.6.10</org.aspectj-version>
            <org.slf4j-version>1.6.6</org.slf4j-version>
        </properties>
        <dependencies>
            <!-- Spring -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>${org.springframework-version}</version>
                <exclusions>
                    <!-- Exclude Commons Logging in favor of SLF4j -->
                    <exclusion>
                        <groupId>commons-logging</groupId>
                        <artifactId>commons-logging</artifactId>
                     </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>${org.springframework-version}</version>
            </dependency>

            <!-- AspectJ -->
            <dependency>
                <groupId>org.aspectj</groupId>
                <artifactId>aspectjrt</artifactId>
                <version>${org.aspectj-version}</version>
            </dependency>   

            <!-- Logging -->
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
                <version>${org.slf4j-version}</version>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>jcl-over-slf4j</artifactId>
                <version>${org.slf4j-version}</version>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
                <version>${org.slf4j-version}</version>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>1.2.15</version>
                <exclusions>
                    <exclusion>
                        <groupId>javax.mail</groupId>
                        <artifactId>mail</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>javax.jms</groupId>
                        <artifactId>jms</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>com.sun.jdmk</groupId>
                        <artifactId>jmxtools</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>com.sun.jmx</groupId>
                        <artifactId>jmxri</artifactId>
                    </exclusion>
                </exclusions>
                <scope>runtime</scope>
            </dependency>

            <!-- @Inject -->
            <dependency>
                <groupId>javax.inject</groupId>
                <artifactId>javax.inject</artifactId>
                <version>1</version>
            </dependency>

            <!-- Servlet -->
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>servlet-api</artifactId>
                <version>2.5</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>javax.servlet.jsp</groupId>
                <artifactId>jsp-api</artifactId>
                <version>2.1</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>jstl</artifactId>
                <version>1.2</version>
            </dependency>

            <!-- Test -->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.7</version>
                <scope>test</scope>
            </dependency>        
        </dependencies>
        <build>
            <plugins>
                <plugin>
                    <artifactId>maven-eclipse-plugin</artifactId>
                    <version>2.9</version>
                    <configuration>
                        <additionalProjectnatures>
                            <projectnature>org.springframework.ide.eclipse.core.springnature</projectnature>
                        </additionalProjectnatures>
                        <additionalBuildcommands>
                            <buildcommand>org.springframework.ide.eclipse.core.springbuilder</buildcommand>
                        </additionalBuildcommands>
                        <downloadSources>true</downloadSources>
                        <downloadJavadocs>true</downloadJavadocs>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>2.5.1</version>
                    <configuration>
                        <source>1.6</source>
                        <target>1.6</target>
                        <compilerArgument>-Xlint:all</compilerArgument>
                        <showWarnings>true</showWarnings>
                        <showDeprecation>true</showDeprecation>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>exec-maven-plugin</artifactId>
                    <version>1.2.1</version>
                    <configuration>
                        <mainClass>org.test.int1.Main</mainClass>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </project>

--> WEB.XML

--> WEB.XML

<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

    <!-- The definition of the Root Spring Container shared by all Servlets and Filters -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/root-context.xml</param-value>
    </context-param>

    <!-- Creates the Spring Container shared by all Servlets and Filters -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <!-- Processes application requests -->
    <servlet>
        <servlet-name>appServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>appServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

</web-app>

--> SERVLET-CONTEXT.XML

--> SERVLET-CONTEXT.XML

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:mvc="http://www.springframework.org/schema/mvc" 
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans     
                        http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
                        http://www.springframework.org/schema/context 
                        http://www.springframework.org/schema/context/spring-context-3.1.xsd
                        http://www.springframework.org/schema/mvc
                        http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd">

        <!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->


            <!-- Enables the Spring MVC @Controller programming model -->
        <mvc:annotation-driven />   

        <!-- Handles HTTP GET requests for /resources/ by efficiently serving up static resources in the ${webappRoot}/resources directory -->

        <mvc:resources mapping="/resources/**" location="/resources/" />


        <!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/WEB-INF/views/" />
            <property name="suffix" value=".jsp" />
        </bean>

        <context:component-scan base-package="es.landeSoft.MvcTesting" />

    </beans>

As you can see in servlet-context I have declared the following line:

正如您在 servlet-context 中看到的,我声明了以下行:

<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->

    <mvc:resources mapping="/resources/**" location="/resources/" />

And I have created a css file inside:

我在里面创建了一个 css 文件:

src/Main/webapp/resources/css/styles.css

src/Main/webapp/resources/css/styles.css

Inside my jsp I reference it like:

在我的 jsp 中,我像这样引用它:

href="<c:url value="/resources/css/styles.css" />" 

It renders like this:

它呈现如下:

   <link href="/MvcTesting/resources/css/styles.css" rel="stylesheet"  type="text/css"/>

But I am getting :

但我得到:

GET http://localhost:8081/MvcTesting/resources/css/styles.css 405 (Method not allowed)

I tried adding servlet-mappings in web.xml but I want to make it work using the new tag

我尝试在 web.xml 中添加 servlet-mappings,但我想使用新标签使其工作

And It works, but I do not want to do it like this. the

它有效,但我不想这样做。这

When tomcat is starting I can read the following line:

当 tomcat 启动时,我可以阅读以下行:

INFO : org.springframework.web.servlet.handler.SimpleUrlHandlerMapping - Mapped URL path [/resources/**] onto handler 'org.springframework.web.servlet.resource.ResourceHttpRequestHandler#0'

.

.

enter image description here

在此处输入图片说明

EDIT:

编辑:

I'm trying using:

我正在尝试使用:

<mvc:annotation-driven />
<mvc:default-servlet-handler/>

NO luck

没运气

回答by Sandhu Santhakumar

You can try mapping <url-pattern>*.css</url-pattern>with DispatcherServletin web.xmllike

您可以尝试映射<url-pattern>*.css</url-pattern>DispatcherServletweb.xml

<servlet>
    <servlet-name>mvc-dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>mvc-dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
    <url-pattern>*.css</url-pattern>
</servlet-mapping>

回答by Kevin Bowersox

I suspect you may not be accessing the .jspfile through a controller. Try adding in this controller and accessing through the .jspthrough this mapping.

我怀疑您可能没有.jsp通过控制器访问该文件。尝试添加此控制器并.jsp通过此映射访问。

Controller

控制器

package es.landeSoft.MvcTesting;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class LoginController {

    @RequestMapping("/")
    public String login(){
        return "login";     
    }
}

To see a full working example view this GitHub repository.

要查看完整的工作示例,请查看此GitHub 存储库

回答by Sotirios Delimanolis

A ResourceHttpRequestHandlerclass' instance cannot produce a 405 Method Not Allowed response.

一个ResourceHttpRequestHandler类的实例不能产生405不允许响应。

You either have a security layer wrapping your requests (doubtful) or you have a @Controllerhandler method mapped to /or /*that handles a request method other than GET.

您要么有一个安全层包装您的请求(可疑),要么您有一个@Controller处理程序方法映射到//*处理除GET.

Since @RequestMappinghandler methods have higher priority than any ResourceHttpRequestHandlermappings, the handler mapped to /*which can handle /MvcTesting/resources/css/styles.csswill be used for handling that request and will respond with 405 because the path is good but the request method isn't.

由于@RequestMapping处理程序方法比任何ResourceHttpRequestHandler映射具有更高的优先级,映射到/*can handle的处理程序/MvcTesting/resources/css/styles.css将用于处理该请求,并将以 405 响应,因为路径是好的,但请求方法不是。

回答by 3ng1n33r

I had the same problem, below code, worked for me. Try to add this to your web.xml

我有同样的问题,下面的代码对我有用。尝试将此添加到您的 web.xml

<servlet-mapping>
  <servlet-name>default</servlet-name>
  <url-pattern>*.js</url-pattern>
</servlet-mapping>

<servlet-mapping>
  <servlet-name>default</servlet-name>
  <url-pattern>*.css</url-pattern>
</servlet-mapping>