基于maven的spring+spring mvc + mybatis的环境搭建

chenzenan 贡献于2013-12-15

作者 Yuan,hong bin(hong bin)  创建于2012-08-14 01:57:00   修改者Yuan,hong bin(hong bin)  修改于2012-08-14 02:29:00字数28475

文档摘要:老大想要做一个TimeSheet的东西,要管理公司员工每年的时间和effort.反正还要个什么报表,老大发话了,很荣幸我有此机会又可以和刚进公司带我的老大一起做东西了,感觉很好。不过这个项目是一个partimejob,自己在工作中抽时间来做。当然啦,堆码的事情肯定我来搞定啦。 
关键词:

老大想要做一个TimeSheet的东西,要管理公司员工每年的时间和effort. 反正还要个什么报表,老大发话了,很荣幸我有此机会又可以和刚进公司带我的老大一起做东西了,感觉很好。不过这个项目是一个partime job,自己在工作中抽时间来做。当然啦,堆码的事情肯定我来搞定啦。       项目开发,需求不是我定,所以在等待需求的时候,我就将环境先搭建起来。上次做了一个Spring + Spring MVC + Mybatis + Log4J +  JUnit Test的环境搭建,这次也差不多,不过就是基于了Maven,同时也添加了事务管理。       首先,可以去了解一下maven,个人觉得这个东西就是JAR包管理方便,不用自己一个个去写,直接添加dependence就行了,不过有时候要注意哟,有可能重复的包含了某个JAR包,会报冲突的哟,亲!因为只有一个POM文件里指定JAR包,所以整个项目都很小的,一般就几MB,只有你在将该项目打成WAR包的时候,maven会自动的把三方JAR包放进项目,然后你就可以去部署到Tomcat的webapp下面了,放进去,重启Tomcat就OK。      1.开始搭建我的环境吧。首先,IDE我用的是eclipse的JEE版本。要保证装上了Maven哟,可以使用eclipse的Install New Software,URL地址是http://m2eclipse.sonatype.org/sites/m2e/,然后一步步走下去,安装好了过了会重启一次。给一个忠告哟,安装好了maven后,不要使用IDE里面的了,而是去官方下载一个,解压,然后让IDE的Maven指向你下载安装的,如图:         2.maven安装成功了,我们用Maven创建一个新的WEB项目。File—> New—> Other—>Maven Project. 选默认,下一步。在Select an  Archetype里面种找到如下图所示         3.然后next,输入groupId:net.yuanmomo;artifactId:Test,然后finish,稍微等待一下,就创建好了。下面的是创建好了的一个初始的项目:    4.但是这个并不是默认的maven项目的标准结构.我们需要进行一些改动.         (1).在项目下创建一个Source Folder.              Folder Name:src/main/java              如下图所示: (当然,还可以添加用于junit测试的src/test/java和src/test/resources  不过在此就不添加了.) (2).在src/main/java中创建3个包(maven标准推荐是3层包结构) (3).如果装的JDK是1.6的,更改JRE System Libary为1.6版本的. (4).就src/main/webapp文件夹看做一个的WebRoot,然后创建js,css,jsp等文件夹。 这样.一个标准的maven web项目创建成功.       5.大家一看上面的项目结构,很熟悉吧。maven的项目结构路径有点讨厌,有点让人很烦。maven打WAR包的时候提取的东西是src/main/webapp下面的文件,然后打成一个WAR的WEB项目就可以部署了,但是,但是,我们在开发的时候,在使用eclipse里面的Tomcat调试的时候,tomcat却不是把src/main/webapp下面的文件部署到服务器。此时,如果你打开Server,然后add and remove,你在左边是找不到Test项目的,如下: 原因是因为Tomcat默认回去Test项目的路径下面去找WebRoot—>WEB-INF-->web.xml(WebRoot文件夹的名字可以不一样,可以使其它的,但是WEB-INF-->web.xml这两个名字不能变),但是当前就找不到这几个目录。这个时候有两个解决办法: (5.1). 在Test项目的路径下面,按照路径规则创建WebRoot,WEB-INF等文件夹,然后把上面的web.xml拷贝到新建的WEB-INF中去。放心吧,我上一个项目就是这样做的,不过这种方式打死都不可取的。你修改JSP的时候改的是下面的,maven打包的时候用的上面的。你还得拷贝过来,拷过去,麻烦,如果再有svn管理,累死你,晕死你,我们经常是调试编写的时候再下面做,最后提交的时候还得一个个拷贝上去,还出很多问题。所以建议采用第二种方式。 (5.2).转换该项目: (1)在Test工程名上右键-->Properties-->Project Facets-->Convet to faceted form, (2)勾上Dynamic Web Module,选择2.4版本。同时点击下方的further configuration available (3)将默认的WebContent改成src/main/webapp (4)一路点OK..此时在server视图中的tomcat server上点右键-->Add and Remove,就能看到该项目于,然后部署啦。 至此,我们已经创建好了一个合格的基于Maven的项目,也可以在Tomcat中部署。接下来,我们开始整合我们的J2EE框架。 6.先给出数据库的创建脚本,方便测试搭建是否成功。 SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; --  -- 数据库: `timesheet`  --  CREATE DATABASE `timesheet` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;  USE `timesheet`; -- -------------------------------------------------------- --  -- 表的结构 `testtable`  -- CREATE TABLE IF NOT EXISTS `testtable` (    `id` int(10) unsigned NOT NULL AUTO_INCREMENT,    `name` varchar(50) COLLATE utf8_bin DEFAULT NULL,    `date` timestamp NULL DEFAULT NULL,    PRIMARY KEY (`id`)  ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=1 ; 7.在pom文件中添加必要的jar包的dependence,可以从两个地方查询: http://mvnrepository.com/ http://search.maven.org/ 添加后的pom文件如下:       4.0.0      net.yuanmomo      Test      war      0.0.1-SNAPSHOT      Test Maven Webapp      http://maven.apache.org                     3.0.0.RELEASE                                                      org.springframework              spring-core              ${org.springframework.version}                                          org.springframework              spring-expression              ${org.springframework.version}                                          org.springframework              spring-beans              ${org.springframework.version}                                          org.springframework              spring-aop              ${org.springframework.version}                                          org.springframework              spring-context              ${org.springframework.version}                                          org.springframework              spring-context-support              ${org.springframework.version}                                          org.springframework              spring-tx              ${org.springframework.version}                                          org.springframework              spring-jdbc              ${org.springframework.version}                                          org.springframework              spring-orm              ${org.springframework.version}                                          org.springframework              spring-oxm              ${org.springframework.version}                                          org.springframework              spring-web              ${org.springframework.version}                                          org.springframework              spring-webmvc              ${org.springframework.version}                                          org.springframework              spring-webmvc-portlet              ${org.springframework.version}                                          org.springframework              spring-test              ${org.springframework.version}              test                                                      org.mybatis              mybatis-spring              1.1.1                                            org.mybatis              mybatis              3.1.1                                          javax.servlet              jstl              1.2                                            javax.servlet              servlet-api              2.5                                            mysql              mysql-connector-java              5.1.21                                            log4j              log4j              1.2.14              runtime                                            commons-dbcp              commons-dbcp              1.4                                  commons-pool              commons-pool              1.4                                          commons-logging              commons-logging-api              1.1                                            commons-fileupload              commons-fileupload              1.2.2                                            org.apache.commons              commons-io              1.3.2                                            dom4j              dom4j              1.6.1                                            org.aspectj              aspectjweaver              1.7.0                                  aopalliance              aopalliance              1.0                                  cglib              cglib-nodep              2.2.2                                          net.sf.json-lib              json-lib              jdk15              2.4                                  commons-beanutils              commons-beanutils              1.8.3                                  commons-collections              commons-collections              3.2.1                                  commons-lang              commons-lang              2.6                                  net.sf.ezmorph              ezmorph              1.0.5                                            junit              junit              3.8.1              test                                Test        修改pom文件后,保存,maven会自动的去download这些jar包到本地。等待的时间可能会很长。上面我把所有我这次项目用到的包都罗列出来了,如果你用不到的,可以自行删除。 下载完成过后,点开项目左侧的Maven Dependencies,你就能看到很多的下载的JAR包了。 8. 修改web.xml,配置Spring,spring MVC,log4j,乱码处理等。                       contextConfigLocation                    classpath:/com/comverse/timesheet/config/ApplicationContext.xml                                          org.springframework.web.context.ContextLoaderListener                                    encodingFilter                    org.springframework.web.filter.CharacterEncodingFilter                                  encoding              UTF-8                                encodingFilter          /*                          log4jConfigLocation                    classpath:/com/comverse/timesheet/config/log4j.properties                                log4jRefreshInterval          60000                                org.springframework.web.util.Log4jConfigListener                                    dispatcher                    org.springframework.web.servlet.DispatcherServlet                                 contextConfigLocation                          classpath:/com/comverse/timesheet/config/dispatcher-servlet.xml                                   1                      dispatcher          *.do        修改后保存该文件。 9.添加 log4j.properties,jdbc.properties等配置文件: 路径位置:   各个配置文件的内容如下: (1). log4j.properties: log4j的配置 #配置了控制台和文本记录两种方式  log4j.rootLogger=DEBUG,CONSOLE,FILEOUT  log4j.addivity.org.apache=true # CONSOLE  log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender  log4j.appender.Threshold=DEBUG  log4j.appender.CONSOLE.Target=System.out  log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout  #log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n  log4j.appender.CONSOLE.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss} \:%m%n #  # FILEOUT  log4j.appender.FILEOUT=org.apache.log4j.RollingFileAppender  log4j.appender.FILEOUT.File=${catalina.home}\\file.log  log4j.appender.fileout.MaxFileSize=100000KB  # default is true,append to the file; if false, the replace the log file whenever restart system  log4j.appender.FILEOUT.Append=true  #RollingFileAppender没有DatePattern这个属性  log4j.appender.FILEOUT.layout=org.apache.log4j.PatternLayout  #log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n  log4j.appender.FILEOUT.layout.ConversionPattern=[%-5p]_%d{yyyy-MM-dd HH:mm:ss} :%m%n (2). jdbc.properties:  数据库连接信息的配置 driver=com.mysql.jdbc.Driver  url=jdbc:mysql://localhost:3306/timesheet  user=root  password=root (3). ApplicationContext.xml:  Spring的配置文件                                                                                                                                                                                                                                                                                                                                                                                                                    (4). dispatcher-servlet:  Spring MVC的配置文件                                                                                                    104857600                                  1024000                  (5). ImplAndBusinessBeans.xml:  这个文件主要放置implementation 和 Business的 bean 对象。                                                 此时,几个主要的配置文件我们已经加进来了,只有mybatis还有几个配置文件没有加进来。 10. 创建包,用于开发系统: bean :  放pojo, java bean business  :  放业务层 conroller   :  放控制层,主要负责接受请求和调用business,返回视图结果 dao          :  放每个bean对应的接口 impl          :  dal 接口的具体实现 interceptor: 过滤器 resource  : 资源包,比如文件路径,配置文件呀 test          :  测试包 util           :  工具包 web          :  是装样子的哟,不是我这次要用的,是个空包。  10. 创建本次测试的java文件 (1). bean : TestTable.java: package com.comverse.timesheet.web.bean; import java.util.Date; public class TestTable {      private int id;      private String name;      private Date birthday;     //setter and getter    ................ } (2). dao : ITestTableDAO.java package com.comverse.timesheet.web.dao; import com.comverse.timesheet.web.bean.TestTable; public interface ITestTableDAO {      public boolean add(TestTable test) throws Exception;  } (3). impl :  ITestTableDAOImpl: package com.comverse.timesheet.web.impl; import com.comverse.timesheet.web.bean.TestTable;  import com.comverse.timesheet.web.dao.ITestTableDAO;  import com.comverse.timesheet.web.util.BasicSqlSupport; public class ITestTableDAOImpl extends BasicSqlSupport implements ITestTableDAO {      @Override      public boolean add(TestTable test) throws Exception {          boolean flag=false;          int count=this.session.insert("com.comverse.timesheet.web.mapper.Test.add",test);          if(count>0){              flag=true;          }          return flag;      }  } (4). business:  TestBusiness.java package com.comverse.timesheet.web.business; import java.util.Date; import javax.annotation.Resource; import org.springframework.transaction.annotation.Transactional; import com.comverse.timesheet.web.bean.TestTable;  import com.comverse.timesheet.web.dao.ITestTableDAO; public class TestBusiness {      private ITestTableDAO testDAO=null;      public ITestTableDAO getTestDAO() {          return testDAO;      }      public void setTestDAO(ITestTableDAO testDAO) {          this.testDAO = testDAO;      }      public void add() throws Exception{          TestTable test=new TestTable();          test.setName("yuanmomo6");          test.setBirthday(new Date());          try {              testDAO.add(test);          } catch (Exception e) {              // TODO Auto-generated catch block              throw e;          }      }  } (5). Controller :   ResultController package com.comverse.timesheet.web.controller; import javax.annotation.Resource;  import javax.servlet.http.HttpServletRequest; import org.springframework.stereotype.Controller;  import org.springframework.ui.ModelMap;  import org.springframework.web.bind.annotation.RequestMapping; import com.comverse.timesheet.web.business.TestBusiness; @Controller  @RequestMapping("/result.do")  public class ResultController {      //将spring 配置文件中的bean 通过setter注入进来      @Resource(name="TestBusiness")      private TestBusiness testBusiness=null;      public void setTestBusiness(TestBusiness testBusiness) {          this.testBusiness = testBusiness;      }     @RequestMapping      public String viewUser(HttpServletRequest request, ModelMap modelMap)              throws Exception {          System.out.println("$$$$$$$$$$$$$$$$$$$$$you want to check the result.jsp+++++++++++++");          System.out.println("$$$$$$$$$$$$$$$$$$$$$ ready to insert   +++++++++++++");          testBusiness.add();          System.out.println("$$$$$$$$$$$$$$$$$$$$$ insert completed +++++++++++++");          return "result";      }  } (6). util : BasicSqlSupport.java所有的implementation类都会继承这个类,在ImplAndBusinessBeans.xml文件中注册的bean,都会注入一个sqlsession。例如上面的implementation就是继承了这个类。 package com.comverse.timesheet.web.util; import org.apache.ibatis.session.SqlSession; public class BasicSqlSupport{      protected SqlSession session;     public SqlSession getSession() {          return session;      }      public void setSession(SqlSession session) {          this.session = session;      }  } 11. 加入mybatis的配置文件: (1). 为 TestTable bean 创建mapper文件,路径为com/comverse/timesheet/mybatis/mapper/Test.xml: Test.xml                         INSERT INTO testtable (NAME,DATE)          VALUES(#{name},#{birthday})        (1). 加入Mybatis的配置文件:在上面的ApplicationContext.xml文件中我们已经包含了SqlMapConfig.xml文件。在/com/comverse/timesheet/mybatis/下创建 SqlMapConfig.xml:                                                                                           12. 框架的整合完成,项目的目录结构如下: 13. 编写一个测试页面,这个页面的路径在dispatcher-servlet.xml中已经确定---/WEB-INF/jsp/: 文件名在controller中已经定义--result, 后缀是 .jsp, 所以就是 result.jsp。 (1). result.jsp: <%@page language="java" contentType="text/html; charset=utf-8"      pageEncoding="utf-8"%>          Insert title here         

你插入数据成功了!!!

        14.至此,我们的项目完成了,部署。部署之前检查一下problem框,看有没有问题。这次我突然遇到一个问题,我上个星期五的时候都没有遇到,今天就奇了怪了。不过没事,问题来就想办法解决它。 (1).在problem处发现这个问题 Description:  Classpath entry org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER will not be exported or published. Runtime ClassNotFoundExceptions may result.   如果部署了项目,启动,会报找不到类异常。     (2).问题的原因参考 Loose classpath web libraries support 在项目上右键-->properties—>deployment Assembly-->add,选择 java build path entries,然后选中Maven dependencies-->finish-->OK,就能解决问题啦。   14. 一点小插曲过后,我们再次的部署项目,重新启动,看日志,项目成功的启动起来啦。 打开浏览器:访问 http://localhost:8080/Test/,看到HelloWord 先查看数据的信息,没有数据,返回0行。   接着访问,http://localhost:8080/Test/result.do   看到结果了,高兴哇!!再看数据库 数据插入成功,至此,我们的项目搭建完整的完成了!!!如有错别字,请原谅,因为打字太痛苦啦!!谢谢大家!!   15. 检查一下我们的日志信息: [DEBUG] 2012-08-13 18:10:34  ispatcherServlet with name 'dispatcher' determining Last-Modified value for [/Test/result.do]  [DEBUG] 2012-08-13 18:10:34 :Mapping [/result.do] to handler 'com.comverse.timesheet.web.controller.ResultController@7056d5'  [DEBUG] 2012-08-13 18:10:34 :Last-Modified value for [/Test/result.do] is: -1  [DEBUG] 2012-08-13 18:10:34  ispatcherServlet with name 'dispatcher' processing GET request for [/Test/result.do]  [DEBUG] 2012-08-13 18:10:34 :Invoking request handler method: public java.lang.String com.comverse.timesheet.web.controller.ResultController.viewUser(javax.servlet.http.HttpServletRequest,org.springframework.ui.ModelMap) throws java.lang.Exception  $$$$$$$$$$$$$$$$$$$$$you want to check the result.jsp+++++++++++++  $$$$$$$$$$$$$$$$$$$$$ ready to insert   +++++++++++++  [DEBUG] 2012-08-13 18:10:34 :Creating new transaction with name [com.comverse.timesheet.web.business.TestBusiness.add]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT,-java.lang.Exception  [DEBUG] 2012-08-13 18:10:34 :Acquired Connection [jdbc:mysql://localhost:3306/timesheet, UserName=root@localhost, MySQL-AB JDBC Driver] for JDBC transaction  [DEBUG] 2012-08-13 18:10:34 :Switching JDBC Connection [jdbc:mysql://localhost:3306/timesheet, UserName=root@localhost, MySQL-AB JDBC Driver] to manual commit  [DEBUG] 2012-08-13 18:10:34 :Creating a new SqlSession  [DEBUG] 2012-08-13 18:10:34 :Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@177e6b4]  [DEBUG] 2012-08-13 18:10:34 :JDBC Connection [jdbc:mysql://localhost:3306/timesheet, UserName=root@localhost, MySQL-AB JDBC Driver] will be managed by Spring  [DEBUG] 2012-08-13 18:10:34  oo Using Connection [jdbc:mysql://localhost:3306/timesheet, UserName=root@localhost, MySQL-AB JDBC Driver]  [DEBUG] 2012-08-13 18:10:34 :==>  Preparing: INSERT INTO testtable (NAME,DATE) VALUES(?,?)  [DEBUG] 2012-08-13 18:10:34 :==> Parameters: yuanmomo6(String), 2012-08-13 18:10:34.122(Timestamp)  [DEBUG] 2012-08-13 18:10:34 :Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@177e6b4]  [DEBUG] 2012-08-13 18:10:34 :Initiating transaction commit  [DEBUG] 2012-08-13 18:10:34 :Committing JDBC transaction on Connection [jdbc:mysql://localhost:3306/timesheet, UserName=root@localhost, MySQL-AB JDBC Driver]  [DEBUG] 2012-08-13 18:10:34 :Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@177e6b4]  [DEBUG] 2012-08-13 18:10:34 :Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@177e6b4]  [DEBUG] 2012-08-13 18:10:34 :Releasing JDBC Connection [jdbc:mysql://localhost:3306/timesheet, UserName=root@localhost, MySQL-AB JDBC Driver] after transaction  [DEBUG] 2012-08-13 18:10:34 :Returning JDBC Connection to DataSource  $$$$$$$$$$$$$$$$$$$$$ insert completed +++++++++++++  [DEBUG] 2012-08-13 18:10:34 :Invoking afterPropertiesSet() on bean with name 'result'  [DEBUG] 2012-08-13 18:10:34 :Rendering view [org.springframework.web.servlet.view.JstlView: name 'result'; URL [/WEB-INF/jsp/result.jsp]] in DispatcherServlet with name 'dispatcher'  [DEBUG] 2012-08-13 18:10:34 :Forwarding to resource [/WEB-INF/jsp/result.jsp] in InternalResourceView 'result'  [DEBUG] 2012-08-13 18:10:34 :Successfully completed request  [DEBUG] 2012-08-13 18:10:34 :Returning cached instance of singleton bean 'sqlSessionFactory' 可以看出我们的事务也添加成功。   Spring MVC的流程: request-->controller-->business-->implementation-->mysql   代码择日放到google code上,欢迎大家下载!! SVN:http://env-build.googlecode.com/svn/trunk/ Goole code URL: http://code.google.com/p/env-build/   转载请注明出处,谢谢:  yuanmomo.net

下载文档到电脑,查找使用更方便

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 6 金币 [ 分享文档获得金币 ] 4 人已下载

下载文档