SpringBoot 之jsp
Boot 内嵌的tomcat 是不支持jsp 的, jetty 也是。
虽然boot也是有默认配置一个InternalResourceViewResolver ,但是它并不像我们在springmvc 中熟悉的那样, 它没有解析 jsp 的功能。 其实InternalResourceViewResolver 的含义只是 内部资源的 视图解析器, 更准确的说, 它是直接把 资源试图的解析交给了 j2ee 容器。 在传统的 springmvc + tomcat 项目中, 很明显就是 tomcat, 具体的工作是我们熟悉的org.apache.jasper.servlet.JspServlet 完成的。但是在内嵌的tomcat环境中, 并没有提供一个默认的jsp 解析器。因为, JspServlet 是 jasper. jar 的 内容。 如果我们想在boot 中使用jsp 的话, 我们需要引入类似的这么一个jar: tomcat-embed-jasper-xxx.jar , 对应的maven 是:
<dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>taglibs</groupId> <artifactId>standard</artifactId> <version>1.1.2</version> </dependency> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> </dependency>
这里,我们同时引入了 jstl,standard 两个jar ,因为他们常常是一起使用的。
boot提供了两个mvc配置, 跟jsp 解析也有直接关系,他们默认是:
spring.mvc.view.prefix= spring.mvc.view.suffix=
WebMvcAutoConfiguration 的配置是这样的:
@Bean @ConditionalOnMissingBean public InternalResourceViewResolver defaultViewResolver() { InternalResourceViewResolver resolver = new InternalResourceViewResolver(); resolver.setPrefix(this.mvcProperties.getView().getPrefix()); resolver.setSuffix(this.mvcProperties.getView().getSuffix()); return resolver; }
可见,很坑爹, 两个都是空。 就是说,默认我们根本访问不到 jsp !
因此, 我们至少需要把suffix 改一下吧:
spring.mvc.view.suffix=.jsp
But !这样做, 我还是不能访问到 jsp, public,static, resources各个目录都放了相同文件,但都访问不到。, 真是郁闷了。后面我发现这是boot 的一个坑, 貌似只有把 jsp 页面 放到META-INF.resources 目录下, 才能访问。 也就是说,boot 只会 去META-INF.resources 目录下查找jsp。 不知道为什么, 有谁知道了, 请告诉我。 除了META-INF.resources目录, 传统的 src/main/webapp/WEB-INF目录 也是可以的。但不知道为什么一定要在WEB-INF 目录下。
除了 修改application.properties 的mvc 配置项, 我们还可以手动的注册一个InternalResourceViewResolver :
@Bean public InternalResourceViewResolver internalResourceViewResolver() { System.out.println("InternalResourceViewResolver 222."); InternalResourceViewResolver resourceViewResolver = new InternalResourceViewResolver(); resourceViewResolver.setSuffix(".jsp"); // resourceViewResolver.setPrefix("/"); resourceViewResolver.setViewClass(JstlView.class); return resourceViewResolver; }
效果是一样的。 不同的是, 我们可以设置 viewclass :resourceViewResolver.setViewClass(JstlView.class); 默认它是空。
相关文章
- JavaWeb-SpringBoot(抖音)_一、抖音项目制作
- 新闻发布项目——后台JSP界面adminManage/addCategory.jsp
- 新闻发布项目——后台JSP界面adminManage/editNews.jsp
- 新闻发布项目——后台JSP界面adminManage/adminIndex.jsp
- 新闻发布项目——后台JSP界面adminManage/modifyCategory.jsp
- 新闻发布项目——后台JSP界面adminManage/modifyNews.jsp
- 新闻发布项目——后台JSP界面adminManage/readNews.jsp
- 新闻发布项目——后台JSP界面adminManage/readNews.jsp
- 新闻发布项目——前台JSP界面newspages/news_read.jsp
- 新闻发布项目——后台JSP界面adminManage/newsPage.jsp
- 新闻发布项目——后台JSP界面adminManage/newsPage.jsp
- Shiro整合springboot,freemaker,redis(含权限系统完整源码)
- jsp学习--JSP运行原理,九大隐式对象和JSP常用标签
- jsp学习--如何定位错误和JSP和Servlet的比较
- jsp学习--JSP运行原理,九大隐式对象和JSP常用标签
- intellij idea2021.2:创建一个springboot项目(springboot 2.5.4)
- jsp文件的请求是如何被服务器的JSP容器转换成静态网页的
- Atitit springboot 上传与下载总结 上传 使用file对象的transferTo保存方法最简单 @RequestMapping(value = "/up", method = R
- 【SpringBoot笔记02】SpringBoot框架配置文件介绍
- 【SpringBoot笔记05】SpringBoot集成JSP、Thymeleaf、Freemarker三种常见的视图模板
- jsp 标签库使用小结 JSTL EL表达式 JSP的标签分类
- Springboot扩展点之ApplicationContextInitializer
- SpringBoot 配置 mapper.xml 文件指定
- SpringBoot 配置log日志持久化
- 【SpringBoot系列】Spring Boot+Redis 分布式锁:模拟抢单
- 在jsp中显示原始html代码,不要渲染 / 在JSP页面中如何将HTML标记显示出来
- Netty(一) SpringBoot 整合长连接心跳机制
- SpringBoot无法访问接口,报错:This application has no explicit mapping for /error, so you are seeing this as a fallback.