之前已经提出过这个问题,但是给出的答案要么对我不起作用,要么答案完全回避了这个问题,转而支持不同的基本示例。
我正在尝试使用嵌入在 Jetty 实例中的 Spring MVC servlet 的简单基本示例。我的控制器正在接收页面请求并返回正确的视图名称。正是在寻找 jsp 页面时失败了。我相信,根据我看到的其他答案,问题在于 Servlet 映射,但在我的情况下我看不到解决方案。
码头服务器设置:
public JettyServer(int port) throws JettyServerException {
webServerPort = port;
webServer = new Server(webServerPort);
webServer.setStopAtShutdown(true);
try {
webServer.setHandler(getServletContextHandler(getContext()));
} catch (IOException e) {
throw new JettyServerException("Cannot instantiate JettyServer instance", e);
}
}
private ServletContextHandler getServletContextHandler(WebApplicationContext context) throws IOException {
ServletContextHandler contextHandler = new ServletContextHandler();
contextHandler.setContextPath("/");
contextHandler.addServlet(new ServletHolder(new DispatcherServlet(context)), "/");
contextHandler.addEventListener(new ContextLoaderListener(context));
contextHandler.setResourceBase(new ClassPathResource("webapp").getURI().toString());
return contextHandler;
}
private WebApplicationContext getContext() {
AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
context.setConfigLocation("com.company.webapptemplate.config");
return context;
}
包下的 Web App 配置类com.company.webapptemplate.config
:
@Configuration
@EnableWebMvc
@ComponentScan("com.company.webapptemplate.controller")
public class WebMvcConfig extends WebMvcConfigurerAdapter {
@Bean
public UrlBasedViewResolver setupViewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
resolver.setViewClass(JstlView.class);
return resolver;
}
}
控制器代码:
@Controller
@RequestMapping("/")
public class ApplicationController {
@RequestMapping(method = RequestMethod.GET)
public String welcome(ModelMap model) {
return "index";
}
}
target/classes
运行 maven / IntelliJ 构建后的非 java 类的东西:
|____webapp
| |____WEB-INF
| | |____views
| | | |____index.jsp
| | |____web.xml (unused)
在 IntelliJ 中运行应用程序后将浏览器指向 localhost:8080 时的响应:
Problem accessing /WEB-INF/views/index.jsp. Reason:
Not Found
以及我不知道该怎么办的日志中的确凿证据:
2014-09-11 23:12:54 调试 org.springframework.web.servlet.handler.AbstractHandlerMethodMapping:297 - 查找路径 /WEB-INF/views/index.jsp 的处理程序方法 2014-09-11 23:12:54 调试 org.springframework.web.servlet.handler.AbstractHandlerMethodMapping:305 - 未找到 [/WEB-INF/views/index.jsp] 的处理程序方法 2014-09-11 23:12:54 TRACE org.springframework.web.servlet.DispatcherServlet:1101 - 在名为 'org.springframework 的 DispatcherServlet 中测试处理程序映射 [org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping@5ddbd0c7]。 web.servlet.DispatcherServlet-44175c06' 2014-09-11 23:12:54 TRACE org.springframework.web.servlet.handler.AbstractUrlHandlerMapping:127 - 未找到 [/WEB-INF/views/index.jsp] 的处理程序映射 2014-09-11 23:12:54 TRACE org.springframework.web.servlet.DispatcherServlet:1101 - 在 DispatcherServlet 中测试处理程序映射 [org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport$EmptyHandlerMapping@a67e8f5],名称为 ' org.springframework.web.servlet.DispatcherServlet-44175c06' 2014-09-11 23:12:54 TRACE org.springframework.web.servlet.DispatcherServlet:1101 - 在 DispatcherServlet 中测试处理程序映射 [org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport$EmptyHandlerMapping@2bef3229],名称为 ' org.springframework.web.servlet.DispatcherServlet-44175c06' 2014-09-11 23:12:54 TRACE org.springframework.web.servlet.DispatcherServlet:1101 - 在 DispatcherServlet 中测试处理程序映射 [org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport$EmptyHandlerMapping@64c63847],名称为 ' org.springframework.web.servlet.DispatcherServlet-44175c06' 2014-09-11 23:12:54 WARN org.springframework.web.servlet.DispatcherServlet:1120 - 在名为 'org. springframework.web.servlet.DispatcherServlet-44175c06'
如果有人能告诉我我错过了哪一块拼图,我将不胜感激。
谢谢。