长大后想做什么?做回小孩!

0%

初识Maven(一)——调通SSM整合

从MyEclipse转到IDEA的同时学习Maven构建项目着实令人抓狂,今天用IDEA+Maven简单地搭建一个我最熟悉的SSM框架并整体调通。中间遇到了不少问题再次记录一下。

搭建的过程简单记录一下:

  1. 利用Maven的webapp骨架创建项目,手动补齐缺少的目录(三层架构)。
  2. 在pom.xml中引入项目所需依赖(JSTL、Log4j、mybatis、mysql、C3P0、Spring MVC、SpringCore、SpringContext、SpringBean等等)、还有一些maven配置(具体见第三条异常解决)。
  3. 加入并编写配置文件:db.properties、log4j.xml、SpringMVC.xml、mybatis-config.xml、applicationContext-dao/service.xml、web.xml。
  4. 简单的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框架时基本都遇到过的错误,因为粗心大意或者不熟练而导致的错误的原因有:

  1. mapper文件中的namespace没写或者写错。
  2. dao接口中的方法在mapper文件中没有或者接口名和mapper文件中标签的name属性不一致。
  3. spring容器配置时没有配置映射扫描或者映射扫描器的basepackage属性没有写对接口所在的包。
  4. 等等。。。

这次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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<build>
<resources>
<!-- maven项目中src源代码下的xml等资源文件编译进classes文件夹,
注意:如果没有这个,它会自动搜索resources下是否有mapper.xml文件,
如果没有就会报org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.pet.mapper.PetMapper.selectByPrimaryKey-->
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>

<!--将resources目录下的配置文件编译进classes文件 -->
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
</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 可以解决时区错误的问题。

也可以选择修改数据库的配置文件解决问题。