【发布时间】:2018-02-06 22:52:26
【问题描述】:
经过 2 天的调查,并查看了很多关于我的问题的答案,我无法解决它。 我不是spring框架的专家。
入口点: 一年前我已经生成了一个 jhipster 项目。我想在我的项目中嵌入 jsp 页面。
我在一个 maven 项目中使用 spring boot 1.4 我包含以下依赖项:
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
我在实现 ServletContextInitializer.onStartup 的 WebConfigurer 类中创建了一个新的 servlet,并在 WEB-INF 资源文件夹中创建了一个名为 servletJsp-servlet.xml 的文件。 xml 实例化 InternalViewResolver 前缀 /mesPages/ 和后缀=.jsp
我还创建了一个控制器:
@Controller
public class TestJspController {
@RequestMapping(value = "/jsp/bbb")
public ModelAndView serveLog4jAdmin() {
return new ModelAndView("log4jAdmin");
}
}
我坚持在这里:(见下面的日志)
日志说:
- 控制器很好用
- 它很好地返回了 ModelAndView
- 从 InternalResourceView 'log4jAdmin' 启动转发到资源 [/mesPagesJsps/log4jAdmin.jsp]
但在那之后,不是获取它并渲染它,而是没有堆栈跟踪并尝试使用另一个 servlet 解析 jsp 页面:dispatcherServlet(我相信这是默认的 spring 自动配置和创建的)spring servlet。 dispatcherServlet 成功获取它,因为我已将我的文件夹 mesPages(其中包含我的 jsps)放在资源和 webapp 的项目(META-INF、WEB-INF、根文件夹)中的每个位置
最后,jsp页面没有被评估,broswer给我下载它作为“application/octet-stream”。 以前在将 jsp 放在所有这些文件夹上之前,我曾经有相同的控制器行为,但以 404 错误(空白页)结束。
我真的不明白为什么应用会这样。 我有另一个运行良好的弹簧(非启动)网络应用程序。 我试图调试,但对我来说很复杂......调试时我只是检测到 requestDispatcher 无法调度 Forward,因为在某些“下一个”变量中没有 FORWARD 类型的处理程序。 我认为这是原因......
如果有人有答案,我会很高兴
我可以提供任何其他需要的信息。
日志相关部分:
[ XNIO-3 task-2] o.s.web.servlet.DispatcherServlet : DispatcherServlet with name 'servletJSP' processing GET request for [/jsps/jsp/bbb]
[ XNIO-3 task-2] s.w.s.m.m.a.RequestMappingHandlerMapping : Looking up handler method for path /jsp/bbb
[ XNIO-3 task-2] s.w.s.m.m.a.RequestMappingHandlerMapping : Returning handler method [public org.springframework.web.servlet.ModelAndView fr.softeam.testify.web.rest.jsp.TestJspController.serveLog4jAdmin()]
[ XNIO-3 task-2] o.s.web.servlet.DispatcherServlet : Last-Modified value for [/jsps/jsp/bbb] is: -1
[ XNIO-3 task-2] o.s.web.servlet.DispatcherServlet : Rendering view [org.springframework.web.servlet.view.JstlView: name 'log4jAdmin'; URL [/mesPagesJsps/log4jAdmin.jsp]] in DispatcherServlet with name 'servletJSP'
[ XNIO-3 task-2] o.s.web.servlet.view.JstlView : Forwarding to resource [/mesPagesJsps/log4jAdmin.jsp] in InternalResourceView 'log4jAdmin'
[ XNIO-3 task-2] o.s.web.servlet.DispatcherServlet : DispatcherServlet with name 'dispatcherServlet' processing GET request for [/mesPagesJsps/log4jAdmin.jsp]
[ XNIO-3 task-2] s.w.s.m.m.a.RequestMappingHandlerMapping : Looking up handler method for path /mesPagesJsps/log4jAdmin.jsp
[ XNIO-3 task-2] s.w.s.m.m.a.RequestMappingHandlerMapping : Did not find handler method for [/mesPagesJsps/log4jAdmin.jsp]
[ XNIO-3 task-2] o.s.w.s.handler.SimpleUrlHandlerMapping : Matching patterns for request [/mesPagesJsps/log4jAdmin.jsp] are [/**]
[ XNIO-3 task-2] o.s.w.s.handler.SimpleUrlHandlerMapping : URI Template variables for request [/mesPagesJsps/log4jAdmin.jsp] are {}
[ XNIO-3 task-2] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapping [/mesPagesJsps/log4jAdmin.jsp] to HandlerExecutionChain with handler [ResourceHttpRequestHandler [locations=[ServletContext resource [/], class path resource [META-INF/resources/], class path resource [resources/], class path resource [static/], class path resource [public/]], resolvers=[org.springframework.web.servlet.resource.PathResourceResolver@1774cad]]] and 1 interceptor
[ XNIO-3 task-2] o.s.web.servlet.DispatcherServlet : Last-Modified value for [/mesPagesJsps/log4jAdmin.jsp] is: -1
[ XNIO-3 task-2] o.s.web.servlet.DispatcherServlet : Null ModelAndView returned to DispatcherServlet with name 'dispatcherServlet': assuming HandlerAdapter completed request handling
[ XNIO-3 task-2] o.s.web.servlet.DispatcherServlet : Successfully completed request
[ XNIO-3 task-2] o.s.web.servlet.DispatcherServlet : Successfully completed request
【问题讨论】:
-
你为什么要创建一个新的
DispatcherServlet? Spring Boot 已经预配置了一个。
标签: spring jsp spring-boot