本文主要是介绍springboot2.1 使用jsp作为页面,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
本次想在本地试试springboot2.1和jsp的整合,过程中遇到了很多问题,在此处记录一下。
我最后使用的是外部的tomcat来运行项目,不是使用的springboot自带的tomcat。
网上查的 spring-boot-sample-web-jsp 的例子中
<dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId></dependency>
有这个引入,但是我在本地测试将这个去掉后前台依然可以,原来是没有在jsp页面使用jstl标签,若想在页面使用jstl标签的话则,这个是需要引入的。
在application.properties中配置
spring.mvc.view.prefix=/WEB-INF/pages/ # 这个是在webapp目录下
spring.mvc.view.suffix=.jsp
Application类要继承 SpringBootServletInitializer 类,并 Override 其中的
protected SpringApplicationBuilder configure(SpringApplicationBuilder application)
方法,方法内容也很简单:
@Overrideprotected SpringApplicationBuilder configure(SpringApplicationBuilder application) {return application.sources(MainApplication.class);}
若没有继承 SpringBootServletInitializer 类则集成 jsp页面不成功,启动的时候会报 404 的错误,找不到jsp页面。
下面这两个引入是需要的:
<!-- tomcat 的支持.--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId><scope>provided</scope></dependency><!-- jsp 依赖 --><dependency><groupId>org.apache.tomcat.embed</groupId><artifactId>tomcat-embed-jasper</artifactId><scope>provided</scope></dependency>
因为我使用的是外部自己的tomcat所以需要将 springboot中tomcat的 scope 设置为 provided,同样本地的tomcat中也提供了对 jsp的解析jar所以 tomcat-embed-jasper 也要设置为 provided。否则当启动的时候会报一些jar包重复的错误,或者jar包加载失败的错误,因为项目中和tomcat中都有这两个jar包,tomcat不知道要加载哪个,所以会报错。
其实我一开始是想用springboot自带的tomcat通过 MainApplication类来启动项目,但是弄了很长时间也没有弄好,将上面两个jar 的scope注释掉后,项目启动没有问题,但是当访问登录页面的时候会报错:
java.lang.ClassNotFoundException: com.sun.el.ExpressionFactoryImpl
找不到这个类,但是在项目中是引入了这个类所在的 tomcat-embed-el-9.0.12.jar的jar包的,这个类也有,但是就是报这个错,将上面两个jar的scope改为 compile也不行。最后没有办法才改为使用外部tomcat。
其实中间还试过将页面的前后缀配置修改为在代码中使用 配置类来实现,但是仍然会报找不到这个类的错误,所以还是安安心心使用外部自己的tomcat了。
这篇关于springboot2.1 使用jsp作为页面的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!