我有一个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页面中提供静态资源的资源路径?
答案 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"/>
)