起一个新项目,SpringMVC + mybatis + mysql,常规选项,用SpringBoot(2.1.3)来搭。
官网用Spring Initializr(为啥不是Initializer,拼写错误,还是有意为之?)创建代码框架后,写Controller,不起作用(用了jsp做模板文件)。
查资料,反复对比官方例程,才解决。
1. pom文件,缺少一个dependency
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
加上这个依赖,运行DemoApplication.java,Controller就生效了。
2. 加了依赖后,在IDE里"Run on Server"还是无法映射,且打成war包部署到tomcat也不行。
Main Application Class需要继承 SpringBootServletInitializer,并 override configure(SpringApplicationBuilder ...) 方法。
3. jsp文件的位置
在application.properties里面设置:
spring.mvc.view.prefix: /WEB-INF/jsp/
spring.mvc.view.suffix: .jsp
这个目录放哪里,试了src/main/resources和其中的templates目录都不对。应该是 src/main/webapp
4. jstl 标签的支持
pom.xml 需要增加依赖
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
5. eclipse 上的设置
增加了 src/main/webapp 目录之后,project被自动设置为 Dynamic Web Module 4.0(Project facets),需要tomcat 9.0+
6. tomcat console 字符集设置
把jsp文件的字符集都设为UTF-8之后,tomcat启动的日志自动切换到中文了。在IDE里面没问题,打war包部署,在windwos上启动tomcat,console是乱码。需要修改 conf/logging.properties
java.util.logging.ConsoleHandler.encoding = GBK
小结:
web应用,jsp做模板这种方式,已被视为陈旧的技术,应用会越来越少。或使用其他技术,或前后端分离,后端只以json的方式返回数据,由前端完成界面渲染。
web应用的部署运行方式,容器化管理,打包成jar,运行jar这种方式,越来越普遍。
Spring Initializer生成的代码框架里面,只包含最小子集。
于是我这种使用old技术的old man,就踩坑了 ^_^
附:spring官方例程
2019-03-28
oldcrane