关于SpringBoot与JSP整合的问题,url直接访问Jsp

首先就是在SpringBoot中你要在Pom中添加几个Tomcat的Jasper的解析包(包括其他配置网上都有教程,不赘述。)java

而后记得就是若是要部署到tomcat底下跑的话,记得在Pom包中将那几个Tomcat的包的Scope标记为Provider,不然会和Tomcat服务器中的jar包冲突致使出错()。web

接下来就是核心部分:spring

一般状况下,网上的教程我发现都是把上述依赖设置完,而后就进行访问,不过这种方式每每只可以经过SpringMvc的Controller层接收请求来解析查找Jsp文件,在不少状况下这已经足够了,可是不少场景下其实你们是须要直接经过url访问某个Jsp页面而后返回页面,这就须要进行额外的配置。apache

详细配置:tomcat

由咱们手动的注册一个Servlet到SpringBoot,这个Servlet要继承Tomcat的JspServlet,这就至关于咱们手动的把Tomcat的Jsp解析器给注册进了容器,这样就能够作到直接访问而且解析Jsp文件,而不是只能经过SpringMVC的视图解析器来调用(关于这个问题也同时要注意一下路径的问题,由于JSP文件其实也是一种静态资源,而SpringBoot和原生Servlet对于静态资源的路径实际上是有一些差异的,下面代码会有详细解释。)springboot

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配置是能够不须要的。服务器

相关文章
相关标签/搜索