spring+springMVC+mybatis整合搭建crud项目日记

来源:互联网 发布:广工数据挖掘试卷 编辑:程序博客网 时间:2024/05/20 11:19
2017.9.26
创建maven项目pom.xml文件报错:Plugin execution not covered by lifecycle configuration: org.apache.maven.plugins
经百度得知要在lifecycle-mapping-metadata.xml中添加未识别的插件,然后不知道该怎么添加。

10.14
前段时间一直在忙和同学合作的一个项目,间隙尝试了百度到的所有解决上述问题的方法依然没有解决问题,
再考虑到maven不是必须的遂决定放弃使用maven
创建一个web project工程,引入相关jar包(spring,springmvc,mybatis,jstlservlet-api,junit),bootstrap和jquery

配置web.xml文件{
   配置ContextLoaderListener,其作用是在启动容器时自动装配Spring applicationContext.xml的配置信息
   配置contextConfigLocation可以给上述Listener指定要加载的xml文件(spring配置文件),若不配置则默认会去/WEB-INF/下加载applicationContext.xml
   
   配置前端控制器DispatcherServlet用于拦截所有请求,可以使用<init-param>指定springmvc的配置文件,
   若不指定,则要在web.xml同级目录下添加 当前servlet名(即DispatcherServlet的<servlet-name>) + -servlet .xml文件配置springmvc.
   
   配置字符编码过滤器及其他需要的过滤器(注意字符编码过滤器必须在所有过滤器之前,一些过滤器必须配置在DispatcherServlet之前
}

10.15
解决了配置xml文件没有自动提示的问题
配置springmvc{
  自动扫描
  视图解析器
  <mvc:default-servlet-handler/>
  <mvc:annotation-driven/>//仅3.0以上版本支持
}



(classpath就是代表  /WEB-INF /classes/  这个路径)
配置spring{
  配置数据源
  配置mybatis整合
  配置扫描将mybatis接口的实现加入到ioc容器中(动态代理,mybatis接口的实现是一个代理对象)
  事务控制
}
创建数据库、mybatis配置文件、db.properties

10.16
mybatis配置
创建数据表
使用逆向工程创建对应的bean类及mapper接口{
  安装mybatis generator插件
  创建一个mbg.xml配置文件,进行相关配置(参照mybatis generator的官方文档)
  (targetProject参数值为相关包所在的src文件夹名称)
  建log4j.properties文件
  创建一个java类运行逆向工程代码(代码从文档拷贝即可)并运行
}

10.17
修改bean,dao,mapper

10.20
搭建spring单元测试环境

10.21
引入pageHelper分页插件
查询,封装分页信息
单元测试分页:报IllegalStateException,无法注入EmployeeMapper,单元测试未成功执行

10.22
使用pagehelper插件要求mybaits版本不能低于3.3,而我引用版本为3.2.7,引用插件报错

使用hiddenhttpmethodfilter过滤器需要引用spring-web-4.2.2以上版本的jar包,而我在项目中引入的是3.2版本,
欲删除却不能删除,在找到项目文件将其替换为5.0版本后报nsupported major.minor version 52.0,原因是用低版本
的jre运行高版本jdk编译的class文件,上面的报错为jdk1.8打印出来的。再替换jar包后java文件出现大量报错,
尝试删除配置文件后项目变为非web工程且报错依旧存在

总结:应注意myeclipse,jdk,tomcat,jar包,插件的版本匹配问题
      版本控制的重要性,及时将项目上传码云,这样出现重大bug时利于版本的恢复
      遇到不知如何解决的问题时可以查看项目搭建过程中未解决的问题,或许就是它引起的


jar包替换出现问题,我删除了一些配置文件.setting以及.project(这个文件以前没注意过)之后,项目变为非web工程
故重建一个工程将原来写好的部分拷贝过来之后

报applicationContext.xml不存在,
原因:classpath不是指向resource路径
解决:在web.xml中配置contextConfigLocation的地方classpath后面加*

报找不到HiddenHttpMethodFilter
原因:spring-web jar包版本过低
解决:使用jdk1.8,引用spring-web-4.2.2以上版本的jar包,仍未解决,使用tomcat7依然报错
      myeclipse 的jdk编译器版本设置最高为1.7,设置eclipse默认jdk1.8,设置tomcat默认jdk1.8

10月31日更新:报此错误的原因是我配置HiddenHttpMethodFilter时出现拼写错误并非jar包版本问题
              被网上信息误导尝试更换jar包版本然后出现jar包版本不兼容的问题,又由于经验所限,
              耽误了很久时间才意识到问题所在。以后要注意myeclipse,jdk,tomcat,jar包,插件的版本匹配问题

10.23
安装jdk1.8后,此项目报错,运行以前的项目均报同样的错误,怀疑是jdk的问题
将系统路径修改为1.7,myeclipse默认jdk修改为1.7,tomcat的jdk修改为1.7,jdk编译器修改为1.7依然报错
仔细查看日志后发现报错都来自这个项目(233,我才发现启动tomcat时webapp下的所有项目都会被加载,
    正常来说在eclipse中remove deployeement,该项目就会在webapp目录下消失,而此次异常移除项目之后该项目仍在webapp目录下)
所以运行其他项目时也报了这个项目的错误
在tomcat\webapp下删除报错项目,解决问题了

认识到jdk1.5(安装版)以后可以不配置JAVA_HOME,安装时自动配置,且安装多个jdk后配置失效,可以直接在eclipse
中切换jdk版本

mvc单元测试报CallableProcessingInterceptor找不到
将spring-web和spring-webmvc的jar包由3.2.0更换到4.2.2报找不到STANDARD_NUMBER_TYPES

mybatis3.2.7 + spring-web3.2.0 +spring-webmvc3.2.0测试mapper通过,测试mvc报错
更换其他jar包版本,两个单元测试均报错
经查资料得知:
mybatis3.4需要mybatis-spring1.3才能支持
mybatis3.3可以用mybatis-spring1.2与spring4整合
我将mybatis升到3.3,以及引入的spring jar统一升至4.2
mvc的测试包空指针错误,
运行项目仍报找不到hiddenhttpmethodfilter,404错误(10.31更:配置hiddenhttpmethodfilter拼写错误所致
将hiddenhttpmethodfilter的配置删除后成功找到欢迎页面,但跳转失败

空指针错误的原因是拿到的pageinfo为null,系单元测试的代码有问题所致
jar包版本暂时没有问题了

总结:抛出异常多为jar包冲突或配置文件书写错误导致
10.25
单元测试未通过,怀疑是单元测试部分的代码问题

运行项目DispatcherServlet找不到对应的处理器,删除<mvc:annotation-driven/>的注释后成功转发//原因在10.31总结

项目成功运行

发现在配置文件中将PageInterceptor错打成PageIntercepter因此报找不到类错误
在网上查资料的过程中发现pageHelper在版本迭代的过程中有出现实现Interceptor接口的类名有变化的情况,这时配置的类需要修改

显示员工列表功能完成

10.26
为实现平台无关性,将以json形式返回数据

10.28
以ajax请求形式获取数据,显示员工列表完成


springMVC可以自动封装表单内容到javaBean,要求是表单的name值与Bean的属性名称一致

添加员工模块完成,但姓名是否可用的校验有问题,可以确定后台的查询没有问题

10.29
解决了姓名校验的问题,调试半天发现没有以json格式返回数据(即checkuser函数忘记加@ResponseBody标签了)

数据合法性的校验前后端都要进行校验的原因:前端校验是为了用户体验,而前端的校验是有许多跳过的方法的,
如果不做后端校验,数据安全就会有隐患

完成前后端的校验

修改员工信息,后台未拿到前台发送的数据并报sql语法错误(批处理中)

10.30
找到数据不能自动封装的原因并修复bug(具体见项目注释

网上查到HiddenHttpMethodFilter为spring3.0新增的过滤器,
其工作过程为:将DELETE、PUT等method不支持的请求方式转化为标准的http请求,然后到Controller中找到对应的方法

找到报找不到HiddenHttpMethodFilter原因,配置时包名拼写错误

完成修改员工信息功能
完成删除员工信息功能

项目完成

10.31
总结:<context:component-scan/>标签是告诉Spring 来扫描指定包下的类,并注册被@Component,@Controller,@Service,@Repository等注解标记的组件
                              (也就是将被注解的类注册为添加到ioc容器的bean。
                               由此系统可以识别这些注解
      <mvc:annotation-driven/>为我们注册RequestMappingHandlerMapping(用于处理@RequestMapping 注解)
                                    以及RequestMappingHandlerAdapter(它是处理请求的适配器,确定调用哪个类的哪个方法,并且构造方法参数,返回值。)
                              这两个类是spring MVC为@Controllers分发请求所必须的。


问题:DispatcherServlet的职责之一不就是通过HandlerMapping,将请求映射到处理器吗?
      DispatcherServlet也可以通过HandlerAdapter把处理器包装为适配器
      而且在很小的测试项目的实验中未配置<mvc:annotation-driven/>也成功分发请求了呀?