SpringMVC和静态资源 [英] SpringMVC and static resources
问题描述
我是Java和spring的新手.我正在尝试制作hello world应用程序,但没有弄错我做错了.
Im new in java and spring. I'm trying to make hello world app and don't get what i'm doing wrong.
这是我的目录结构:
test_app
-pom.xml
-src
--main
---java
----com.example.web
-----IndexController.java
---webapp
----static
-----img
------example.jpg
----WEB-INF
-----web.xml
-----dispatcher-servlet.xml
-----jsp
------index.jsp
和来源:web.xml
and sources: web.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>Movie Reminder WebApp</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/dispatcher-servlet.xml</param-value>
</context-param>
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>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>
</web-app>
dispatcher-servlet.xml:
dispatcher-servlet.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<context:annotation-config/>
<context:component-scan base-package="com.example.web"/>
<bean id="viewResolver"
class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
IndexController.java
IndexController.java
package com.example.web;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class IndexController {
@RequestMapping(value = "/")
public ModelAndView index() {
return new ModelAndView("index");
}
}
index.jsp
index.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>Hello Spring!</title>
</head>
<body>
<img src="<c:url value="/static/img/example.jpg" />" />
</body>
</html>
当我部署我的应用程序和请求时,我收到404图像请求
when i deploy my app and request , i get 404 on image request
http://localhost:8081/ --- http 200 ok
http://localhost:8081/static/img/example.jpg - http 404 not found
当我将mvc:resources添加到dispatcher-servlet.xml中时
when i add mvc:resources to dispatcher-servlet.xml
<context:annotation-config/>
<context:component-scan base-package="com.example.web"/>
<mvc:resources mapping="/static/**" location="/static/" />
并重新编译404到/请求
and recompile im getting 404 to / request
http://localhost:8081/ --- http 404 not foundok
http://localhost:8081/static/img/example.jpg - http 200 ok
请帮助我找出我做错了什么
Help me please to figure out what i'm doing wrong
推荐答案
只需将这两行添加到您的 dispatcher-servlet.xml
Just add both these lines to your dispatcher-servlet.xml
<mvc:resources mapping="/static/**" location="/static/" />
<mvc:default-servlet-handler />
这是 default-servlet-handler
的文档所说的:
通过转发到Servlet容器的默认Servlet.使用此处理程序允许在
DispatcherServlet
中使用"/"映射,同时仍在使用Servlet容器提供静态资源.该处理程序将将所有请求转发到默认Servlet.因此它是重要的是,它应保持在所有其他URL的末尾HandlerMappings.如果您使用注释驱动"元素,或者如果要设置您自定义的HandlerMapping实例一定要设置其顺序"属性的值要小于DefaultServletHttpRequestHandler
的值,即Integer.MAX_VALUE
.
Configures a handler for serving static resources by forwarding to the Servlet container's default Servlet. Use of this handler allows using a "/" mapping with the
DispatcherServlet
while still utilizing the Servlet container to serve static resources. This handler will forward all requests to the default Servlet. Therefore it is important that it remains last in the order of all other URL HandlerMappings. That will be the case if you use the "annotation-driven" element or alternatively if you are setting up your customized HandlerMapping instance be sure to set its "order" property to a value lower than that of theDefaultServletHttpRequestHandler
, which isInteger.MAX_VALUE
.
这篇关于SpringMVC和静态资源的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!