IT虾米网

java之SpringMVC与静态资源

oomusou 2023年09月28日 编程语言 133 0

我是 java 和 spring 的新手。我正在尝试制作 hello world 应用程序,不要理解我做错了什么。

这是我的目录结构:

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 

和来源: 网页.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> 

调度程序-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

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"); 
    } 
} 

索引.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 图像请求

http://localhost:8081/  --- http 200 ok  
http://localhost:8081/static/img/example.jpg - http 404 not found 

当我将 mvc:resources 添加到 dispatcher-servlet.xml 时

<context:annotation-config/> 
<context:component-scan base-package="com.example.web"/> 
<mvc:resources mapping="/static/**" location="/static/" /> 

并重新编译 im 获取 404 到/请求

http://localhost:8081/  --- http 404 not foundok  
http://localhost:8081/static/img/example.jpg - http 200 ok 

请帮我弄清楚我做错了什么

请您参考如下方法:

只需将这两行添加到您的 dispatcher-servlet.xml

<mvc:resources mapping="/static/**" location="/static/" /> 
<mvc:default-servlet-handler /> 

default-servlet-handler 的文档是这样说的:

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 the DefaultServletHttpRequestHandler, which is Integer.MAX_VALUE.


评论关闭
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!