美文网首页Springboot核心技术Spring Boot 核心技术java
第二章:SpringBoot与JSP间不可描述的秘密

第二章:SpringBoot与JSP间不可描述的秘密

作者: 恒宇少年 | 来源:发表于2017-04-03 16:54 被阅读19443次

springboot内部对jsp的支持并不是特别理想,而springboot推荐的视图是Thymeleaf,对于java开发人员来说还是大多数人员喜欢使用jsp,接下来我们来讲解下springboot是如何支持jsp的。

本章目标

整合springboot web项目支持jsp作为视图输出。

开始构建项目

我们使用IntelliJ IDEA 工具来构建项目,首先我们需要创建一个springboot项目,如下图1所示.

图1

点击Next后输入一些项目的基本参数(包名,工程名,打包形式,maven形式构建等),如下图2所示:

图2

点击Next后选择我们预先加入到工程的springboot内置的jar包组件,我们这里选择一个web组件。如下图3所示:

图3

点击Next输入项目名称后店家Finish既可以完成了项目的构建。新构建的项目目录结构如下图4所示:

图3

可以看到上图中比我们lessonOne项目中多出来了一个类文件,ServletInitlalizer,打开该类我们不难发现它继承了SpringBootServletInitializer这个父类,而SpringBootServletInitializer这个类是springboot提供的web程序初始化的入口,当我们使用外部容器(后期文章讲解使用外部tomcat如何运行项目)运行项目时会自动加载并且装配。
实现了SpringBootServletInitializer的子类需要重写一个configure方法,方法内自动根据LessontwoApplication.class的类型创建一个SpringApplicationBuilder交付给springboot框架来完成初始化运行配置。

配置springboot支持jsp

我们打开pom.xml(maven配置文件)可以看到我们之前构建项目时已经添加了web模块,而springboot给我们自动添加了spring-boot-starter-tomcat配置引入。springboot内部集成了tomcat组件,这里我们就不需要重复引入tomcat组件。

JSP maven

我们先来添加jsp的maven支持,如下图4所示:

图4

Servlet maven

我们还需要引入jsp对servlet容器的支持,如下图5所示:

图5

JSTL maven

除了上面的jsp,servlet支持以外,如果你还需要在jsp页面使用jstl标签来处理界面逻辑,那么需要引入jstl maven,如下图6所示:

图6

初尝试运行项目

上面配置就是我们本章需要的全部配置,那么我们先来尝试运行下项目是否已经可以正常运行。这里项目运行也可以使用IntelliJ IDEA工具提供的组件来完成,如下图7所示,:
(注意:如果你已经开启了另外一个spring boot项目请先关闭,因为springboot内置的端口号都是8080这样会引起冲突)

图7

点击绿色三角号即可开始运行项目,我们先来尝试下点击后看看控制台输入的日志信息。可以看到项目已经正常运行了,右上角的绿色三角号也变成了重启的按钮,如下图8所示:

图8

项目运行如图9所示:

图9

可以看到项目已经正常运行,但是我们现在还没有配置,创建JSP文件,我们接下来开始配置,创建JSP。

配置视图

基本配置

如果是使用过eclipse工具的人肯定知道jsp文件之前是在/webapp/WEB-INF/jsp目录下,那么我们也沿用eclipse的风格。
1. 在main目录下创建webapp文件夹
2. 在webapp下创建jsp文件夹如下图10所示:

3. 修改application.properties文件让springmvc支持视图的跳转目录指向为/main/webapp/jsp,配置如下图11所示:

图11 图11

创建index.jsp

我们在webapps/jsp目录下创建一个index.jsp用于测试我们的配置是否已经支持了jsp,新建jsp文件如下图12所示:

图12

创建IndexController

上面工作我们已经完成了jsp的所有配置,那么接下来我们需要配置springmvc的控制器,我们新建indexController如下图13所示:

图13

可以看到上图我们在IndexController配置文件内添加了index()方法配置了@RequestMapping注解来描述index()方法是一个可以被springmvc管理的请求视图。我们的index()方法返回值这里是"index"。
为什么我们返回"index",还记得上述步骤中配置的application.properties文件的springmvc请求前缀以及后缀,那么当我们访问/index时springmvc就会去找/webapp/WEB-INF/jsp/index.jsp文件。

重启项目

重启项目我们尝试访问127.0.0.1:8080/index,可以看到如下图14的效果,证明已经完成了springboot与jsp的整合:

图14

总结

上述便是我们本章的全部内容,本章主要是讲解了springboot集成jsp作为渲染视图,结合springmvc来转发请求。

本章内容已经上传到码云:

SpringBoot配套源码地址:https://gitee.com/hengboy/spring-boot-chapter

SpringCloud配套源码地址:https://gitee.com/hengboy/spring-cloud-chapter

SpringBoot相关系列文章请访问:目录:SpringBoot学习目录

QueryDSL相关系列文章请访问:QueryDSL通用查询框架学习目录

SpringDataJPA相关系列文章请访问:目录:SpringDataJPA学习目录

SpringBoot相关文章请访问:目录:SpringBoot学习目录,感谢阅读!

欢迎加入QQ技术交流群,共同进步。

QQ技术交流群

相关文章

网友评论

  • c0e2b406777c:@恒宇少年 我想问下 在application.properties 配置视图解析器的前后缀时,前后缀的属性名是固定的写法吗,必须是 :spring.mvc.view.prefix 吗? 如果不是 ,那么在处理http请求时他是怎么定位到 前缀/index/后缀的页面中的 ,请楼主不吝赐教,谢谢
  • mohaoyang:如果你出现了下面的信息:
    “Whitelabel Error Page
    This application has no explicit mapping for /error, so you are seeing this as a fallback.

    Sat Sep 29 09:11:19 CST 2018
    There was an unexpected error (type=Not Found, status=404).
    /WEB-INF/jsp/index.jsp”
    说明了不是配置依赖问题,是IDEA的内置tomcat问题,这个时候请使用IDEA插件的方式运行程序,具体方式如下(由于评论不能贴图,囧,所以只能描述了):
    1.打开Maven Project,找到maven的依赖菜单
    2.在Lifecycle,Plugins,Dependencies中选择Plugins
    3.在Plugins中找到springboot
    4.spring-boot:run双击运行或者右键(run maven build)都可以!
    希望能够帮助到你!
    恒宇少年:@mohaoyang 404
  • 俞啊:表示我也404 只不过是因为 配置前缀的时候 JSP/ 后面斜杠没有带上
  • 拉风小丸子:有个疑问, webapp下的目录结构到底是怎么样的? 在src/main/webapp/WEB-INF/jsp,还是src/mian/webapp/jsp目录下? application.yml中配置的也是WEB-INF/jsp
    另外,我现在两边都配置成webapp/WEB-INF/jsp,pom.xml、application.yml、代码目录都配置ok了,但现实的是Controller里return的那个字符串。但没有到*.jsp
    拉风小丸子:@恒宇少年 OK 一会再仔细看看源码
    恒宇少年:@拉风小丸子 去看源码
  • coolzpw:好了= = 创建时有个东西没勾选
    coolzpw:@coolzpw 我添加tomcat-embed-jasper 这个依赖还是报红诶= =
    coolzpw:@恒宇少年 恩恩 谢谢了
    恒宇少年:@coolzpw 创建项目选择war类型构建就有那个类了
  • coolzpw:ServletInitlalizer 这个类我没自动创建出来呀?
    coolzpw:而且我这个添加tomcat-embed-jasper idea上说找不到这个
  • peter_puff:出现404的小伙伴们,记得查看一下版本哦 我用的2.0.4版本404,换成了博主的版本1.5.2 直接就OK啦 哈哈哈
    迪奥炸:没有1.5.2,只有1.5.15
  • peter_puff:不得不说,博主的文章确实很棒,但是比较好奇为什么图11和图12目录结构不一致呢,而且看评论中的404现象,我也出现了,不知道如何解决
  • Man_10:您好!我这边遇到一些问题,就是controller映射不到jsp页面,我是按照你的文档写的。但是不知怎么办是好,希望您能抽空解答一下,谢谢
    706a8da1d0a6:我也是这个问题 一直404
    求大神指点一下
    塞尔达And林克:@90d0n 直接使用IDEA按照楼主的教程来创建,应该是没有问题的
    31716b83b8e5:您好, 我也遇到这个问题了, 请问您现在解决了吗?
  • 和风拂柳花香醉人:我用Eclipse建的Maven项目,然后逐步配置Springboot,然后我又参考了别人的博客,发现没有ServletInitlalizer 这个类也能运行起来,没有报错,很神奇。谁知道这是什么原因吗?
    和风拂柳花香醉人:@恒宇少年 明白,谢谢
    恒宇少年:没有当然也可以运行,这个类的作用你可以去看看servlet3.0的特性,这也是为什么没有web.xml可以运行的原因
    恒宇少年:@Conca_Mo 你创建war类型的就有了
  • f0be3167aaef:你好,刚学习想请教一下,不考虑传统公司和旧项目,使用thymeleaf模板引擎的是否超过了jsp呢,替代jsp是必然吗(Spring Boot替代SSM)?
    恒宇少年:@zerotwo 挺简单的,毕竟底层都一样,不过你需要搭建好springboot 框架
    f0be3167aaef:@恒宇少年 谢谢,请问SSM移植spring boot麻烦吗。
    恒宇少年:@zerotwo thymeleaf是springboot 默认支持的模版,也是有趋势替换的
  • 9e9f624b7a18:我自己建一个工程加一个jasper依赖、properties改了下、拷你的controller和webapp,就是好的,但是你的工程不知道为啥怎么也访问不到
    9e9f624b7a18:那个我没忘,我又试了下新new的project,按这个走完全没问题,但如果new的是module就不行,因为你那50多个工程我是一起导入的,它变成了50个module,不知道是不是这个原因
    恒宇少年:@HeyAmigo 你导入工程的时候是否提示你自动添加依赖了?
  • 小宋_ed76:老哥,你写的关于springboot的内容很好,点赞。希望能分享更多干货。
    小宋_ed76:@恒宇少年 嗯嗯 好的谢谢。
    恒宇少年:谢谢你,可以进群,群二维码在文章下面
  • YouGuangFu:2018-04-12 20:14:49.278 INFO 8380 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring FrameworkServlet 'dispatcherServlet'
    2018-04-12 20:14:49.278 INFO 8380 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : FrameworkServlet 'dispatcherServlet': initialization started
    2018-04-12 20:14:49.296 INFO 8380 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : FrameworkServlet 'dispatcherServlet': initialization completed in 18 ms
    楼主呀 这个404 怎么解决呀 新手
    YouGuangFu:@恒宇少年 谢谢群主
    恒宇少年:进群吧,方便解答
  • YouGuangFu:作者您好 很喜欢你分享的技术 请问 我可以将你的文章打印下来用作学习资料吗
    YouGuangFu:@恒宇少年 谢谢你谢谢你
    恒宇少年:@YouGuangFu 可以,不过要标注下版权
  • 41d7d33d1547:hello,为什么我在eclipse中按照上面方式配置的jsp页面,但是访问的时候直接在页面上显示出了jsp文件的名字,并不能显示页面呢
    恒宇少年:你要再熟悉下spring
    41d7d33d1547:@恒宇少年 我该了一下好用了,谢谢啊!我想问一下这是什么原因
    恒宇少年:@selfsalvation 你应该是用了RestController或者ResponseBody注解,你这个要用Controller注解
  • 1338e547a7e6:直接返回的 index 字符串 不知道错在哪里
    Cody__:使用@Controller注解 而不是@RestController
  • f_double:我springboot 整合jsp的时候 通过eclipse run 是可以访问 jsp的。但是打包成jar 运行后, 提示404
  • f6af9f9138f3:There was an unexpected error (type=Not Found, status=404).
    /WEB-INF/jsp/index.jsp
    一直404,源码哪里有错吗
    一碗米汤_bb44:不知道你的问题解决了没。我是根据最下面那位发的根据官方的例子解决的。我的jsp路径是main/webspp/jsp/*.jsp;然后通过yml配置文件配置的。spring:
    mvc:
    view:
    prefix: /jsp/
    suffix: .jsp 然后就可以正常返回了。
    f_double:我springboot 整合jsp的时候 通过eclipse run 是可以访问 jsp的。但是打包成jar 运行后, 提示404
    恒宇少年:@f6af9f9138f3 你先去下载源码看看,如果代码没有问题,考虑项目配置问题
  • ff497ff14e2b:springboot+security怎么访问自定义登录页面 ,在/webapp/WEB-INF/jsp/login.jsp 访问报了404
  • 烈酱:为啥都是返回index字符串
    当把jsp文件放到web-inf的pages文件夹里(相关配置有更改),则是下载了jsp文件

    始终无法直接返回jsp内容,求解
    烈酱:@Touchyoudeepins 最后选择不用jsp,就是这么皮
    647643016d13:解决了么
    恒宇少年:@烈酱 估计应该是浏览器的问题,不识别页面,再检查检查配置
  • 设计者之路:springboot 1.5.8

    报错 网上查了好久未能解决?求作者解答

    baocun

    Whitelabel Error Page

    This application has no explicit mapping for /error, so you are seeing this as a fallback.

    Wed Nov 22 10:20:57 CST 2017
    There was an unexpected error (type=Internal Server Error, status=500).
    No Java compiler available for configuration options compilerClassName: [null] and compiler: [null]
    恒宇少年:@设计者之路 根据后台的错误信息解决问题
    烈酱:在`pom.xml`里把`org.springframework.boot` 改成1.5.2.RELEASE吧,直接抄作者的`pom.xml`
  • a7508a3f7a84:页面报错
    There was an unexpected error (type=Not Found, status=404).
    /WEB-INF/jsp/index.jsp
    将代码写成诗:@恒宇少年 嗯嗯,看到下面的二维码了,所以把评论删了,没想到回复这么及时。谢谢楼主分享
    恒宇少年:@月牙宝宝 文章下面二维码, 扫描加群就可以了
    恒宇少年:@今日沉 下载源码看下,有问题进群问下
  • bfc93cc0a9b6:ServletInitlalizer 这个我创建的时候怎么没有
    恒宇少年:@laughing_9f0d 创建war项目才有
  • meguri:图片里面的路径不一致吧? 图11是在/webapp/WEB-INF/jsp/index.jsp下面,图12\13的路径变成了/webapp/jsp/index.jsp
    706a8da1d0a6:@李泰然 解决了吗?我的也是一直404 求大神啊
    淡若S悠然:@恒宇少年 我的就很奇怪了,和你的一模一样,但是访问的时候提示404
    恒宇少年:@meguri 这个地方是我截图错了,正确的路径是/webapp/WEB-INF/jsp/index.jsp
  • libmi:还是用Thymeleaf吧,文章很棒,正在学习。
    恒宇少年:@libmi 可以,官方推荐使用的前端视图处理
  • 缘意天:我也正在学习spring boot呢,我还在犹豫使用传统的jsp还是推荐的Thymeleaf,文章写的不错,我支持你
    恒宇少年: @缘意天 非常感谢支持,请多多关注。

本文标题:第二章:SpringBoot与JSP间不可描述的秘密

本文链接:https://www.haomeiwen.com/subject/vlcoottx.html