我有一个春季MVC项目:这是我的文件
的web.xml
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
调度员的servlet
<mvc:resources mapping="/resources/**" location="/resources/" />
<mvc:default-servlet-handler />
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
MainController.java
@Controller
@RequestMapping(value="/test")
public class MainController {
@RequestMapping(value="/home")
public ModelAndView home()
{
String view="home";
ModelAndView modelAndView=new ModelAndView(view);
return modelAndView;
}
}
针对home.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<link href="resources/css/bootstrap.css" rel="stylesheet" type="text/css" />
</head></html>
我的webaps托管网址
localhost:8080/projectName/test/home
但它并没有加载我的静态资源,即bootstrap.css。它应该工作,因为我已将我的静态资源放在适当的位置webapp/resources/css/bootstrap.css
问:为什么我的静态资源是来自控制器路径的路由..为什么显示404未找到。
localhost:8080/projectName/test/resources/css/bootstrap.css
为什么控制器路径&#34;测试&#34;当spring想要查找静态资源时,会附加URL。
答案 0 :(得分:1)
要避免网址问题,请使用JSTL的<c:url
代码或${pageContext.request.contextPath}
例如在你的情况下:
<link href='<c:url value="/resources/css/bootstrap.css"/>'
rel="stylesheet" type="text/css" />
OR
<link href='${pageContext.request.contextPath}/resources/css/bootstrap.css'
rel="stylesheet" type="text/css" />
<子> 注意:对于第一个示例,在使用之前在jsp顶部导入JSTL标记库。 喜欢:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
答案 1 :(得分:0)
我让它运行..我的home.jsp应该包含我的静态资源:
“../”资源前缀使控制器路由符合静态资源。
答案 2 :(得分:0)
<mvc:resources mapping="/resources/**" location="/resources/" />
因为“/ resources /”的配置指向WebRoot
的“resources”目录,所以问题变得清晰,只需使用
<link href="<%= request.getContextPath() %>/resources/css/bootstrap.css" rel="stylesheet" type="text/css" />
引用静态资源。
此外,还有另一种解决此问题的方法,即配置 base 标记,如下所示,
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<html>
<head>
<base href="<%=basePath %>">
<title></title>
<link href="resources/css/bootstrap.css" rel="stylesheet" type="text/css" />
</head>
....
两者都可以正常工作,希望你能帮忙:)。