Java 弹簧&x27;s ResourceHttpRequestHandler返回带NullPointerException的500
简短问题:当向我的spring mvc应用程序请求静态资源时,我在请求处理结束时在Java 弹簧&x27;s ResourceHttpRequestHandler返回带NullPointerException的500,java,spring,maven,spring-mvc,Java,Spring,Maven,Spring Mvc,简短问题:当向我的spring mvc应用程序请求静态资源时,我在请求处理结束时在org.apache.coyote.Response.setContentType(Response.java:452) 长问题: 我在用Netbeans开发的Maven项目中使用Spring3.2.5 这是我的pom.xml http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 <groupId>net.pluce</groupId> &l
org.apache.coyote.Response.setContentType(Response.java:452)
长问题:
我在用Netbeans开发的Maven项目中使用Spring3.2.5
这是我的pom.xml
http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
<groupId>net.pluce</groupId>
<artifactId>WorkTime</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>WorkTime</name>
<properties>
<endorsed.dir>${project.build.directory}/endorsed</endorsed.dir>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-web-api</artifactId>
<version>6.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>3.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId>
<version>1.3.2.RELEASE</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.5</version>
</dependency>
</dependencies>
<build>
... build infos
</build>
这是我的AppConfig类:
@Configuration
public class AppConfig {
private String mongoUrl = "localhost";
private String mongoDb = "worktime";
public @Bean MongoFactoryBean mongo() {
MongoFactoryBean mongo = new MongoFactoryBean();
mongo.setHost(mongoUrl);
return mongo;
}
public @Bean MongoTemplate mongoTemplate() throws Exception {
return new MongoTemplate(mongo().getObject(), mongoDb);
}
@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
}
@Configuration
@EnableWebMvc
@ComponentScan({"net.pluce.worktime"})
public class MvcConfig extends WebMvcConfigurerAdapter {
@Bean
public ViewResolver getViewResolver(){
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/JSP/");
resolver.setSuffix(".jsp");
return resolver;
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/assets/**").addResourceLocations("/assets/");
}
}
以及我的MvcConfig类:
@Configuration
public class AppConfig {
private String mongoUrl = "localhost";
private String mongoDb = "worktime";
public @Bean MongoFactoryBean mongo() {
MongoFactoryBean mongo = new MongoFactoryBean();
mongo.setHost(mongoUrl);
return mongo;
}
public @Bean MongoTemplate mongoTemplate() throws Exception {
return new MongoTemplate(mongo().getObject(), mongoDb);
}
@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
}
@Configuration
@EnableWebMvc
@ComponentScan({"net.pluce.worktime"})
public class MvcConfig extends WebMvcConfigurerAdapter {
@Bean
public ViewResolver getViewResolver(){
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/JSP/");
resolver.setSuffix(".jsp");
return resolver;
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/assets/**").addResourceLocations("/assets/");
}
}
我有一个映射到根目录并正确服务于jsp的控制器:
@Controller
public class IndexCtrl {
@Autowired
private MongoOperations ops;
@RequestMapping("/")
public String renderIndex(Model mav){
return "index";
}
}
当我尝试获取我的资产时:gethttp://localhost:8080/MyContextPath/assets/js/jquery.js
,我得到一个500错误:
exception
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.NullPointerException
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:948)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:827)
javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
cause mère
java.lang.NullPointerException
org.apache.coyote.Response.setContentType(Response.java:452)
org.apache.catalina.connector.Response.setContentType(Response.java:806)
org.apache.catalina.connector.ResponseFacade.setContentType(ResponseFacade.java:245)
org.springframework.web.servlet.resource.ResourceHttpRequestHandler.setHeaders(ResourceHttpRequestHandler.java:240)
org.springframework.web.servlet.resource.ResourceHttpRequestHandler.handleRequest(ResourceHttpRequestHandler.java:146)
org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:49)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:936)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:827)
javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
阅读日志(相关部分):
我读到:
-我的请求由Spring dispatcher servlet处理
-请求被映射到ResourceHttpRequestHandler
-ResourceHttpRequestHandler在我的文件中找到匹配的资源
-它决定了好的媒体类型“application/javascript”
-写入响应时会引发NullPointerException
我看了一下,没有发现任何值得一看的NullPointerException
提前感谢彻底而清晰的问题。你能在
org.springframework.web.servlet.resource.ResourceHttpRequestHandler.setHeaders上设置一个断点吗
,并观看它尝试设置内容类型
?似乎很清楚Spring正确地识别了必要的值。感谢你的回答,出现了一些问题y奇怪:我从安装的tomcat(使用apt get)切换到安装的tomcat netbeans,它工作正常。我无法用我的tomcat进行调试,应用程序不再部署,tomcat完全不可用。有了netbean的tomcat,我可以调试,但我没有更多的bug。。。
17:15:00,652 DEBUG DispatcherServlet:823 - DispatcherServlet with name 'dispatcher' processing GET request for [/WorkTime/assets/js/jquery.js]
17:15:00,657 TRACE DispatcherServlet:1088 - Testing handler map [org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping@4bbc3c6] in DispatcherServlet with name 'dispatcher'
17:15:00,658 DEBUG RequestMappingHandlerMapping:220 - Looking up handler method for path /assets/js/jquery.js
17:15:00,659 DEBUG RequestMappingHandlerMapping:230 - Did not find handler method for [/assets/js/jquery.js]
17:15:00,660 TRACE DispatcherServlet:1088 - Testing handler map [org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping@4331fe97] in DispatcherServlet with name 'dispatcher'
17:15:00,660 TRACE BeanNameUrlHandlerMapping:127 - No handler mapping found for [/assets/js/jquery.js]
17:15:00,660 TRACE DispatcherServlet:1088 - Testing handler map [org.springframework.web.servlet.handler.SimpleUrlHandlerMapping@7418df8] in DispatcherServlet with name 'dispatcher'
17:15:00,660 DEBUG SimpleUrlHandlerMapping:169 - Matching patterns for request [/assets/js/jquery.js] are [/assets/**]
17:15:00,661 DEBUG SimpleUrlHandlerMapping:194 - URI Template variables for request [/assets/js/jquery.js] are {}
17:15:00,661 DEBUG SimpleUrlHandlerMapping:124 - Mapping [/assets/js/jquery.js] to HandlerExecutionChain with handler [org.springframework.web.servlet.resource.ResourceHttpRequestHandler@60cf9880] and 1 interceptor
17:15:00,662 TRACE DispatcherServlet:1122 - Testing handler adapter [org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter@5d252d27]
17:15:00,662 TRACE DispatcherServlet:1122 - Testing handler adapter [org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter@33b78b37]
17:15:00,662 DEBUG DispatcherServlet:912 - Last-Modified value for [/WorkTime/assets/js/jquery.js] is: -1
17:15:00,663 DEBUG ResourceHttpRequestHandler:173 - Trying relative path [js/jquery.js] against base location: ServletContext resource [/assets/]
17:15:00,674 DEBUG ResourceHttpRequestHandler:178 - Found matching resource: ServletContext resource [/assets/js/jquery.js]
17:15:00,674 DEBUG ResourceHttpRequestHandler:132 - Determined media type 'application/javascript' for ServletContext resource [/assets/js/jquery.js]
17:15:00,675 DEBUG ResponseStatusExceptionResolver:132 - Resolving exception from handler [org.springframework.web.servlet.resource.ResourceHttpRequestHandler@60cf9880]: java.lang.NullPointerException
17:15:00,676 DEBUG DefaultHandlerExceptionResolver:132 - Resolving exception from handler [org.springframework.web.servlet.resource.ResourceHttpRequestHandler@60cf9880]: java.lang.NullPointerException
17:15:00,676 TRACE DispatcherServlet:1028 - Cleared thread-bound request context: org.apache.catalina.connector.RequestFacade@16fd089a
17:15:00,677 DEBUG DispatcherServlet:959 - Could not complete request
java.lang.NullPointerException
at org.apache.coyote.Response.setContentType(Response.java:452)
at org.apache.catalina.connector.Response.setContentType(Response.java:806)
at org.apache.catalina.connector.ResponseFacade.setContentType(ResponseFacade.java:245)
at org.springframework.web.servlet.resource.ResourceHttpRequestHandler.setHeaders(ResourceHttpRequestHandler.java:240)
at org.springframework.web.servlet.resource.ResourceHttpRequestHandler.handleRequest(ResourceHttpRequestHandler.java:146)
at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:49)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:936)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:827)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)
17:15:00,680 TRACE AnnotationConfigWebApplicationContext:332 - Publishing event in WebApplicationContext for namespace 'dispatcher-servlet': ServletRequestHandledEvent: url=[/WorkTime/assets/js/jquery.js]; client=[127.0.0.1]; method=[GET]; servlet=[dispatcher]; session=[C2D001FA38DB36BD6286C598E46652D2]; user=[null]; time=[38ms]; status=[failed: java.lang.NullPointerException]
17:15:00,681 TRACE AnnotationConfigWebApplicationContext:332 - Publishing event in Root WebApplicationContext: ServletRequestHandledEvent: url=[/WorkTime/assets/js/jquery.js]; client=[127.0.0.1]; method=[GET]; servlet=[dispatcher]; session=[C2D001FA38DB36BD6286C598E46652D2]; user=[null]; time=[38ms]; status=[failed: java.lang.NullPointerException]