Spring 4 - MVC - URL参数和静态资源路径

时间:2014-08-18 10:40:30

标签: java spring jsp spring-mvc spring-4

我有一个spring mvc应用程序,在页面中我列出了从数据库中获取的表中的“组”详细信息。每个组的url设置为“/ viewgroup / 410”,其中410是将从数据库加载并显示在viewgroup.jsp页面中的groupid。

<td><a href="viewgroup/${group.groupid}">${group.name}</a></td>

因此,控制器方法具有

@RequestMapping("/viewgroup/{groupid}") 
public String viewGroup() {
    ...
}
像这样。 jsp页面无法加载我在目录结构中的静态资源

+webapp
  +resources
     +css
     +js
     +images
  +views
    +login.jsp

jsp页面具有image / js / css的以下路径。

<link href="resources/css/bootstrap.css" rel="stylesheet" media="screen">

我尝试添加

@Controller
@RequestMapping("/viewgroup/**")
public class ViewGroupController {
   ...
}

这在jsp

<link href="viewgroup/resources/css/bootstrap.css" rel="stylesheet" media="screen">

jsp页面加载仍然无法加载静态资源。当我在url中传递params时,如何在jsp页面中提供静态资源的资源路径?

1 个答案:

答案 0 :(得分:1)

通过项目的任何URL传递查询参数这一事实不会影响它处理静态资源的方式。您只需要包含指向静态资源的链接(例如,作为相对路径),如下所示:

<link href="/resources/css/bootstrap.css" rel="stylesheet" media="screen">

此类静态资源的解析完全独立于您当前正在查看的网页,无论是/viewgroup/410还是/foo/bar。这就是为什么你不需要链接href开头的“viewgroup”的原因。

但是你需要告诉Spring MVC它应该如何解决这些静态资源。通常,这是在Spring配置中完成的。例如,如果您通过WebMvcConfigurer实例使用Spring MVC java配置,则应以这种方式覆盖addResourceHandlers方法:

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
    }


编辑:我的不好,我认为Spring MVC +任何视图技术(JSP,Thymeleaf等)会自动解决链接的href与web-app的根路径,但这显然对于raw根据当前路径解析相对链接的href的HTML。 所以最后,正如OP所发现的那样,如果使用正在使用的视图技术处理链接,那么只能根据根路径解析链接(在JSP的例子中:<c:url value="/resources/css/bootstrap.css"/>