我无法让我的spring mvc webapp工作。 我正在使用带有嵌入式jetty服务器的Spring MVC。
问题是我的mvc:resources标签不起作用,我不明白为什么。
以下是标签:
<mvc:resources mapping="/css/**" location="/css/"/>
<mvc:resources mapping="/js/**" location="js/"/>
我的目录结构:
现在当我转到http://localhost:8080/css/main.css
时,我在调试输出中看到了这一点:
Looking up handler method for path /css/main.css
Did not find handler method for [/css/main.css]
URI Template variables for request [/css/main.css] are {}
Mapping [/css/main.css] to HandlerExecutionChain with handler [org.springframework.web.servlet.resource.ResourceHttpRequestHandler@223c78ba] and 1 interceptor
Last-Modified value for [/css/main.css] is: -1
Trying relative path [main.css] against base location: ServletContext resource [/css/]
No matching resource found - returning 404
为什么这不起作用?这是我的目录结构,还是我错过了一些配置?
感谢您的帮助。
编辑更多信息
我使用Maven用阴影插件构建一个胖罐。我现在在我的pom.xml中添加了这个
<resources>
<resource>
<directory>src/main/webapp</directory>
</resource>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
现在我的最后一个jar确实包含了css目录,但仍然没有运气。
这是启动嵌入式jetty服务器的代码
int port = config.getInt("server.port");
final Server server = new Server();
final ServerConnector serverConnector = new ServerConnector(server);
serverConnector.setPort(port);
server.setConnectors(new Connector[]{serverConnector});
final DispatcherServlet servlet = new DispatcherServlet();
servlet.setContextConfigLocation("classpath:META-INF/web-context.xml");
ServletContextHandler context = new ServletContextHandler();
context.setContextPath("/");
context.addServlet(new ServletHolder("defaultServlet", servlet), "/*");
HandlerCollection handlers = new HandlerCollection();
handlers.setHandlers(new Handler[]{context, new DefaultHandler()});
server.setHandler(handlers);
server.start();
server.join();
答案 0 :(得分:3)
你可能需要为你的servlet上下文添加一些额外的配置,以便在你通过你正在构建的jar运行时为类路径设置正确的设置:
final Resource base = Resource.newClassPathResource(".");
if (base != null) {
context.setBaseResource(base);
} else {
// running in a jar
final URI uri = Service.class.getProtectionDomain().getCodeSource().getLocation().toURI();
context.setBaseResource(Resource.newResource("jar:" + uri + "!/"));
}
答案 1 :(得分:0)
也许您错过了网址中的上下文路径?
http://localhost:8080/<<context>>/css/main.css
答案 2 :(得分:0)
确保您的应用程序上下文中提到了mvc schema xsd。
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
基本应用程序xml文件与mvc,上下文模式应该像:
<beans:beans xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
//your beans go here
</beans:beana>