从MyEclipse转到IDEA的同时学习Maven构建项目着实令人抓狂,今天用IDEA+Maven简单地搭建一个我最熟悉的SSM框架并整体调通。中间遇到了不少问题再次记录一下。
搭建的过程简单记录一下:
- 利用Maven的webapp骨架创建项目,手动补齐缺少的目录(三层架构)。
- 在pom.xml中引入项目所需依赖(JSTL、Log4j、mybatis、mysql、C3P0、Spring MVC、SpringCore、SpringContext、SpringBean等等)、还有一些maven配置(具体见第三条异常解决)。
- 加入并编写配置文件:db.properties、log4j.xml、SpringMVC.xml、mybatis-config.xml、applicationContext-dao/service.xml、web.xml。
- 简单的controller处理器用来测试。
接下来进入正题:
一、缺少JSTLjar包报错:
这是个很简单的问题。。。报错信息:org.apache.jasper.JasperException: The absolute uri: [http://java.sun.com/jsp/jstl/core] cannot be resolved in either web.xml or the jar files deployed with this application
报错信息很直接。。很明了。。就是因为缺少JSTLjar包,导入后解决问题。
但是依然记录的一点是:jstl-1.2.jar之前的jar包需要同时引入standard.jar jar包才能使用。
二、同时导入jstl1.2.jar和standard的jar包之后:
报错信息:javax.servlet.ServletException:java.lang.NoClassDefFoundError:javax/servlet/jsp/jstl/core/LoopTag
更换了jstl的jar包版本之后问题解决。(应该是两个jar包版本不匹配吧,应该是。。)
百度上也有说增加另外两个jar包可以解决问题(没有尝试)
三、Invalid bound statement(not found):
这是一个初学SSM框架时基本都遇到过的错误,因为粗心大意或者不熟练而导致的错误的原因有:
- mapper文件中的namespace没写或者写错。
- dao接口中的方法在mapper文件中没有或者接口名和mapper文件中标签的name属性不一致。
- spring容器配置时没有配置映射扫描或者映射扫描器的basepackage属性没有写对接口所在的包。
- 等等。。。
这次Maven构建项目时遇到了语句绑定无效的错误:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):nynu.li.dao.UserDao.findAllUser
首先检查了上面所说的问题,排除了粗心大意不熟练所导致的错误之后,经过好一段时间的摸索和搜索。。。发现target目录的classes文件夹下没有dao包中的mapper配置文件,应该是maven项目没有扫描到dao包下的xml文件,在pom.xml中加入一下配置代码可以解决:
1 | <build> |
四、因为java和数据库时区不一致报错:
第一次遇到这个问题,以前没考虑过。。。
报错信息:Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException:
错误细节。。。吧啦吧啦。。。
com.mysql.cj.exceptions.InvalidConnectionAttributeException: The server time zone value ‘ ‘ is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.
错误细节。。。吧啦吧啦。。。
在jdbc的url参数后加上serverTimezone=Asia/Shanghai 可以解决时区错误的问题。
也可以选择修改数据库的配置文件解决问题。