1

我正在尝试将 Twitter Bootstrap 与我的 Spring Web 应用程序一起使用。不提供静态内容。我已经查看了关于 SO 的一堆答案,但仍然无法解决这个问题。

mvc-调度程序-servlet.xml

 <mvc:resources mapping="/resources/**" location="/resources/" />
 <mvc:annotation-driven />
 <context:annotation-config/>
 <context:component-scan base-package="com.indie.stock.controllers" />
 <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <property name="maxUploadSize" value="250000"/>
</bean>

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix">
        <value>/WEB-INF/pages/</value>
    </property>
    <property name="suffix">
        <value>.jsp</value>
    </property>
</bean>

web.xml

 <web-app>
<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>
</servlet-mapping>

<listener>
    <listener-class>
        org.springframework.web.context.ContextLoaderListener
    </listener-class>
</listener>

<listener>
    <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        /WEB-INF/spring-security.xml
        classpath:com/indie/stock/applicationContext.xml
    </param-value>
</context-param>

<!-- Spring Security -->
<filter>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>
        org.springframework.web.filter.DelegatingFilterProxy
    </filter-class>
</filter>

<filter>
    <filter-name>noCacheFilter</filter-name>
    <filter-class>
        com.indie.stock.filters.NoCacheFilter
    </filter-class>
</filter>

<filter-mapping>
    <filter-name>springSecurityFilterChain</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

<filter-mapping>
    <filter-name>noCacheFilter</filter-name>
    <url-pattern>/login</url-pattern>
</filter-mapping>

在我的 jsps 中,我以这种方式引用静态内容

<link rel="shortcut icon" href="/resources/bootstrap-3.0.0/assets/ico/favicon.png">

在此处输入图像描述

我错过了什么?

编辑:这是我尝试访问静态资源时得到的

2013-09-01 23:46:37 DEBUG DispatcherServlet:823 - DispatcherServlet with name 'mvc-dispatcher' processing GET request for [/resources/1122.jpg]
2013-09-01 23:46:37 DEBUG RequestMappingHandlerMapping:220 - Looking up handler method for path /resources/1122.jpg
2013-09-01 23:46:37 DEBUG ExceptionHandlerExceptionResolver:132 - Resolving exception from handler [null]: org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'GET' not supported
2013-09-01 23:46:37 DEBUG ResponseStatusExceptionResolver:132 - Resolving exception from handler [null]: org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'GET' not supported
2013-09-01 23:46:37 DEBUG DefaultHandlerExceptionResolver:132 - Resolving exception from handler [null]: org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'GET' not supported
2013-09-01 23:46:37 WARN  PageNotFound:194 - Request method 'GET' not supported
2013-09-01 23:46:37 DEBUG DispatcherServlet:999 - Null ModelAndView returned to DispatcherServlet with name 'mvc-dispatcher': assuming HandlerAdapter completed request handling
2013-09-01 23:46:37 DEBUG DispatcherServlet:966 - Successfully completed request
2013-09-01 23:46:37 DEBUG DispatcherServlet:823 - DispatcherServlet with name 'mvc-dispatcher' processing GET request for [/favicon.ico]
2013-09-01 23:46:37 DEBUG RequestMappingHandlerMapping:220 - Looking up handler method for path /favicon.ico
2013-09-01 23:46:37 DEBUG ExceptionHandlerExceptionResolver:132 - Resolving exception from handler [null]: org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'GET' not supported
2013-09-01 23:46:37 DEBUG ResponseStatusExceptionResolver:132 - Resolving exception from handler [null]: org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'GET' not supported
2013-09-01 23:46:37 DEBUG DefaultHandlerExceptionResolver:132 - Resolving exception from handler [null]: org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'GET' not supported
2013-09-01 23:46:37 WARN  PageNotFound:194 - Request method 'GET' not supported
2013-09-01 23:46:37 DEBUG DispatcherServlet:999 - Null ModelAndView returned to DispatcherServlet with name 'mvc-dispatcher': assuming HandlerAdapter completed request handling
2013-09-01 23:46:37 DEBUG DispatcherServlet:966 - Successfully completed request
4

4 回答 4

0

基于 Servlet 的 Web 应用程序被部署到某些上下文中,因此它们的每个 url 都必须在前面加上上下文名称。

例如,在 tomcat 中,默认情况下,上下文与 war 文件名相同,除非调用了 war ROOT.war(或者除非您更改 context.xml 并自己配置名称)。如果是,ROOT.war则将其部署在根上下文中。

要排除该问题,请尝试使用

<link rel="shortcut icon"  href="<c:url value='/resources/bootstrap-3.0.0/assets/ico/favicon.png' />" />

它会自动将上下文名称添加到 url,无论它是什么。

于 2013-09-01T18:05:38.800 回答
0

这是一个带有引导程序的简单项目,因此您可以轻松查看缺少的内容:https ://github.com/m4nuv/easy-bank/tree/dev/src/main/webapp/WEB-INF

这是一段使用的代码(其余的似乎还可以):

        <c:url value="/resources/bootstrap" var="bootstrap" />
        <spring:message var="siteTitle" code="site.title" />

        <title>${siteTitle}</title>
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <!-- Bootstrap -->
        <link href="${bootstrap}/css/bootstrap.min.css" rel="stylesheet" media="screen">

        <link href="${bootstrap}/css/custom.css" rel="stylesheet" media="screen">

编辑1:(好吧,这与灵魂检查告诉您的完全相同,只需一段代码即可查看,因为您说他的提示没有帮助)

edit2:
如果您使用 spring-security 来保护您的应用程序,请小心从资源中删除安全性:<security:http pattern="/resources/**" security="none" />

于 2013-09-01T18:37:01.857 回答
0

我认为您的 servlet 映射是错误的:

<servlet-mapping>
    <servlet-name>mvc-dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

此映射意味着您的调度程序 servlet 只会在应用程序的上下文路径 URL 中提供请求(例如/app-name//。它应该是这样的:

<servlet-mapping>
    <servlet-name>mvc-dispatcher</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

因此它可以为您的应用程序中的任何 URL 提供服务,因此您的静态内容映射在 URL 中被调用,就像/resources/bootstrap-3.0.0/**由您的 mvc-dispatcher servlet 处理一样。

于 2013-09-01T19:07:54.013 回答
0

最后,问题是我应该处理用户注册表单的控制器处理程序方法之一没有使用请求 url 注释,而仅使用请求方法“POST”。在调试时,我注意到选择此处理程序方法来处理资源请求。但由于它只处理 POST 请求 - 结果我得到了 HTTP 状态 405“不支持 GET 请求”。因此,一旦我指定了请求 url,一切正常。

于 2013-09-08T15:53:22.283 回答