我是Spring boot(和servlet 3.0)的新手。我试图用JSP作为视图创建spring mvc项目。当我从我的控制器返回一个视图时,它没有被解析为JstlView。
这是我做的:
@SpringBootApplication
public class MyApp extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(MyApp.class, args);
}
}
@Controller
public class MainController {
@RequestMapping( value="/main" , method = RequestMethod.GET )
public String main(){
return "main";
}
@RequestMapping( value="/" , method = RequestMethod.GET )
public String welcome(){
return "welcome";
}
}
在src\main\webapp\WEB-INF\jsp
中创建了两个.jsp文件。
谷歌搜索后我发现我需要在application.properties中指定这个,所以我在道具中添加了以下内容:
spring.mvc.view.prefix: /WEB-INF/jsp/
spring.mvc.view.suffix: .jsp
logging.level.org.springframework: TRACE
logging.level.com: TRACE
即使在此之后它也无法正常工作。这是跟踪。
2016-04-24 19:54:49.016 TRACE 7880 --- [nio-8080-exec-1] .w.s.m.m.a.ServletInvocableHandlerMethod : Invoking [MainController.welcome] method with arguments []
2016-04-24 19:54:49.016 TRACE 7880 --- [nio-8080-exec-1] .w.s.m.m.a.ServletInvocableHandlerMethod : Method [welcome] returned [welcome]
2016-04-24 19:54:49.020 DEBUG 7880 --- [nio-8080-exec-1] o.s.w.s.v.ContentNegotiatingViewResolver : Requested media types are [text/html, application/xhtml+xml, image/webp, application/xml;q=0.9, */*;q=0.8] based on Accept header types and producible media types [*/*])
2016-04-24 19:54:49.020 DEBUG 7880 --- [nio-8080-exec-1] o.s.w.servlet.view.BeanNameViewResolver : No matching bean found for view name 'welcome'
2016-04-24 19:54:49.022 DEBUG 7880 --- [nio-8080-exec-1] o.s.b.f.s.DefaultListableBeanFactory : Invoking afterPropertiesSet() on bean with name 'welcome'
2016-04-24 19:54:49.022 TRACE 7880 --- [nio-8080-exec-1] o.s.w.s.v.InternalResourceViewResolver : Cached view [welcome]
2016-04-24 19:54:49.022 DEBUG 7880 --- [nio-8080-exec-1] o.s.w.s.v.ContentNegotiatingViewResolver : Returning [org.springframework.web.servlet.view.InternalResourceView: name 'welcome'; URL [/WEB-INF/jsp/welcome.jsp]] based on requested media type 'text/html'
2016-04-24 19:54:49.022 DEBUG 7880 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Rendering view [org.springframework.web.servlet.view.InternalResourceView: name 'welcome'; URL [/WEB-INF/jsp/welcome.jsp]] in DispatcherServlet with name 'dispatcherServlet'
2016-04-24 19:54:49.022 TRACE 7880 --- [nio-8080-exec-1] o.s.w.servlet.view.InternalResourceView : Rendering view with name 'welcome' with model {} and static attributes {}
2016-04-24 19:54:49.026 DEBUG 7880 --- [nio-8080-exec-1] o.s.w.servlet.view.InternalResourceView : Forwarding to resource [/WEB-INF/jsp/welcome.jsp] in InternalResourceView 'welcome'
2
正如您在跟踪中看到的,这是尝试将/jsp/welcome.jsp解析为InternalResourceView而不是JstlView。最终它失败为404.
我需要遵循哪些其他步骤?是否有任何SpringBoot-mvc与jsp的教程?
P.S。我可以使用web.xml使用jsp创建spring mvc app(在我的配置文件中使用JstlView)。但是我找不到任何有关使用jsp的Spring boot mvc的教程。
答案 0 :(得分:16)
@Bean
public ViewResolver getViewResolver(){
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/jsp/");
resolver.setSuffix(".jsp");
resolver.setViewClass(JstlView.class);
return resolver;
}
也需要,您的网页应位于/ webapp / WEB-INF / jsp /
+
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
答案 1 :(得分:4)
假设它是嵌入式Tomcat,
您需要在pom.xml
<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>
嵌入式Tomcat核心包没有JSP渲染支持。
答案 2 :(得分:2)
您不需要ViewResolver。 pom.xml需要Yura讲述的上述依赖项,并将jsp文件放在src \ main \ webapp \ WEB-INF \ jsp中。
答案 3 :(得分:0)
如果我们想在春季启动时使用jsp作为视图(默认情况下具有tomcat服务器),则需要在pom.xml中添加以下内容:
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
我们需要在其中添加页面
src / main / webapp / WEB-INF / view
此后,我们可以在application.properties中为jsp页面指定位置
spring.mvc.view.prefix=/WEB-INF/view/
spring.mvc.view.suffix=.jsp
答案 4 :(得分:-1)
添加jstl jar
在application.properties
中添加以下两行spring.mvc.view.prefix:/ WEB-INF /视图/ spring.mvc.view.suffix:.jsp
Run As Spring Boot App ..U很高兴!
For More你可以在github上咨询我的这个项目: https://github.com/SudipBiswasRana/Using-JSP-As-View-For-Spring-Project