首先就是在SpringBoot中你要在Pom中添加几个Tomcat的Jasper的解析包(包括其余配置网上都有教程,不赘述。)
然后记得就是如果要部署到tomcat底下跑的话,记得在Pom包中将那几个Tomcat的包的Scope标记为Provider,否则会和Tomcat服务器中的jar包冲突导致出错()。
接下来就是核心部分:
通常情况下,网上的教程我发现都是把上述依赖设置完,然后就进行访问,不过这种方式往往只能够通过SpringMvc的Controller层接收请求来解析查找Jsp文件,在很多情况下这已经足够了,但是很多场景下其实大家是需要直接通过url访问某个Jsp页面然后返回页面,这就需要进行额外的配置。
详细配置:
由我们手动的注册一个Servlet到SpringBoot,这个Servlet要继承Tomcat的JspServlet,这就相当于我们手动的把Tomcat的Jsp解析器给注册进了容器,这样就可以做到直接访问并且解析Jsp文件,而不是只能通过SpringMVC的视图解析器来调用(关于这个问题也同时要注意一下路径的问题,因为JSP文件其实也是一种静态资源,而SpringBoot和原生Servlet对于静态资源的路径其实是有一些差别的,下面代码会有详细解释。)
package cn.restcloud.rq.config; import org.apache.jasper.servlet.JspServlet; import org.springframework.boot.web.servlet.ServletComponentScan; import javax.servlet.annotation.WebServlet; /** * 配置这个servlet是为了覆盖默认的jasper解析器的映射路径 * 因为springboot默认是不直接支持jsp的 * 必须添加额外的解析器支持,额外的解析器默认也不支持直接 xxx.jsp访问jsp必须通过controller访问 * 所以覆盖JspServlet的映射路径 就可以直接通过url访问xxx.jsp文件并解析了 * 同时 需要注意的是 在Springboot框架中,访问静态资源默认的web项目根目录对应的是 * classpath:static classpath:WEB-INF/resources classpath:public 等 * 而对于原生的servlet来说 web项目的根目录是不一样的 对应的是classpath:/ 或者 部署在Tomcat webapps底下具体webapp对应文件夹的根目录 */ @ServletComponentScan @WebServlet(urlPatterns = "*.jsp",name = "rqjspServlet") public class rqJspServlet extends JspServlet { }
经过后来进一步的研究....发现,也可以不用配置上方的解析器,只是要注意一下路径的问题,jsp解析器的默认路径是web应用根目录开始查找静态资源,以前没有搞清楚Springboot下的Web应用根路径在哪,所以才出现访问不了的情况,实际上,上面的JspServlet配置是可以不需要的。