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

首先就是在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配置是可以不需要的。

转载于:https://my.oschina.net/u/3387406/blog/1931954

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值