当前位置:  开发笔记 > 编程语言 > 正文

使用Spring,在web.xml中映射到root,找不到静态资源

如何解决《使用Spring,在web.xml中映射到root,找不到静态资源》经验,为你挑选了2个好方法。

我要做的是将请求映射到servlet根目录(正确的术语?).我正处于将URL映射到正确视图的位置,但无法找到作为页面一部分的所有静态内容--css,javascript,images.

所以在我的web.xml中,我的servlet标签看起来像这样


    springapp
    /

我的控制器看起来像这样:

@RequestMapping("/shop")
public class TheShopController extends MyBaseController {

    public static String VIEW = "Tile.Shop";

    @Override
    @RequestMapping(method = RequestMethod.GET)
    protected ModelAndView processRequest(HttpServletRequest req, HttpServletResponse resp) {
        ModelAndView mav = new ModelAndView(VIEW);
        return mav;
    }

}

MyBaseController非常简单.它看起来像这样:

public abstract class MyBaseController extends AbstractController {

    protected Logger log = Logger.getLogger(getClass());

    @Override
    protected ModelAndView handleRequestInternal(HttpServletRequest req, HttpServletResponse resp) 
        throws Exception {

        ModelAndView mav = processRequest(req, resp);
        return mav;
    }

    protected abstract ModelAndView processRequest(HttpServletRequest req, HttpServletResponse resp);
}

我在视图层中使用Tiles.我的配置如下:

/WEB-INF/tiles-defs.xml

正如我所提到的,找到了视图,但找不到作为页面端口的静态资源.这是一些典型的退出:

2010-01-24 17:25:01,777 DEBUG [http-8080-7] servlet.DispatcherServlet(DispatcherServlet.java:690) - 名为'springapp'的DispatcherServlet处理[/springapp/static/css/account.css的GET请求] 2010-01-24 17:25:01,778 WARN [http-8080-4] servlet.DispatcherServlet(DispatcherServlet.java:962) - 找不到带URI的HTTP请求的映射[/springapp/static/css/shop.css]在名为'springapp'的DispatcherServlet中2010-01-24 17:25:01,778 DEBUG [http-8080-6] servlet.FrameworkServlet(FrameworkServlet.java:677) - 已成功完成请求2010-01-24 17:25:01,778 WARN [http-8080-5] servlet.DispatcherServlet(DispatcherServlet.java:962) - 在DispatcherServlet中找不到带有URI [/springapp/static/css/offers.css]的HTTP请求的映射,名称为"springapp"2010-01-24 17:25:01,778 WARN [http-8080-3] servlet.DispatcherServlet(DispatcherServlet.java:962) - 在DispatcherServlet中找不到带有URI [/springapp/static/css/scrollable-buttons.css]的HTTP请求的映射名称"SPRI ngapp"

转到 http:// localhost:8080/springapp/shop工作正常,但缺少css和图像.

我认为使用Tiles在某种程度上使事情变得复杂但我不愿意摆脱它.我想知道我是否需要调整我的视图分辨率配置需要以某种方式调整?链接视图解析器可能吗?我只是不是那样的这样做经验丰富.



1> axtavt..:

问题是对静态内容的请求转到dispatcherServlet,因为它被映射为/.在具有"RESTful"URL的应用程序中(即DispatcherServlet映射中没有任何前缀),这是一个非常常见的问题.

有几种方法可以解决此问题:


既然Spring 3.x中访问静态资源的首选方法是使用: web.xml:

 
    springapp 
    / 

Spring配置:

 
 

另请参见Spring 3中的MVC简化


1.使用URL重写过滤器
请参见此处的mvc-basic示例

2.为defaultservlet 设置前缀:


    default
    /static/*

也就是说,请求/static/images/image.png将返回名为的文件/images/image.png 但是,这种方式在不同的servlet容器之间是不兼容的(在Jetty中不起作用),请参阅此处的变通方法

3.为defaultservlet 设置静态内容扩展:


    default
    *.png
    *.js
    *.css

4.不要使用RESTful URL,使用带前缀的URL:

 
    springapp 
    /app 

5.不要使用RESTful URL,使用带扩展名的URL:

 
    springapp 
    *.do 



2> Solubris..:

有没有人考虑使用这个:



以下是最新的春季文档:http: //static.springsource.org/spring/docs/3.1.2.RELEASE/spring-framework-reference/htmlsingle/spring-framework-reference.html#mvc-default-servlet -handler

推荐阅读
Chloemw
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有