博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringBoot 之jsp
阅读量:5020 次
发布时间:2019-06-12

本文共 2564 字,大约阅读时间需要 8 分钟。

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 是:

javax.servlet
jstl
1.2
taglibs
standard
1.1.2
org.apache.tomcat.embed
tomcat-embed-jasper

这里,我们同时引入了 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);  默认它是空。

 

 

 

posted on
2017-12-08 21:15 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/FlyAway2013/p/7968619.html

你可能感兴趣的文章
更具体的描述JNI
查看>>
数据库——SQL-SERVER练习(6) 数据库安全性
查看>>
Frameset 两页面互调控件技术案例
查看>>
ruby 构建API接口流程代码
查看>>
ASP.NET没有魔法——第一个ASP.NET应用《MyBlog》
查看>>
java web 插件式开发
查看>>
软件工程周总结12
查看>>
DDL对表的操作
查看>>
flutter key
查看>>
iOS 开发常见函数
查看>>
Android: NDK编程入门笔记
查看>>
深刻理解Linux进程间通信(IPC)
查看>>
windows 7中添加新硬件的两种方法(本地回环网卡)
查看>>
javascript 高级程序设计学习笔记(面向对象的程序设计) 2
查看>>
支配集,点覆盖集,点独立集之间的联系
查看>>
SetCapture ReleaseCapture
查看>>
DataGridView ——管理员对用户的那点操作
查看>>
POJ - 1185 炮兵阵地 (状态压缩)
查看>>
ios7 JavaScriptCore.framework
查看>>
算法6-5:哈希表应用之集合
查看>>