SpringMVC3.0.5+Spring3.0.5+MyBatis3.0.4全注解实例详解(一)2012-07-3115:35198人阅读评论(0)收藏举报Spring更新到3.0之后,其MVC框架加入了一个非常不错的东西——那就是REST。它的开放式特性,与Spring的无缝集成,以及Spring框架的优秀表现,使得现在很多公司将其作为新的系统开发框架。大象根据实际的项目经验,以之前SSH2例子为基础,对其进行一次大改造,详细的为大家讲解如何实现SSM3全注解式的开发。这次大象将采取两种构建方式,一是很多人喜欢用的MyEclipse,另一个,则是用Eclipse+Maven。这一篇,将主要讲解开发环境设置与Maven构建方式。1、开发环境JDK1.6.0_18Eclipse3.2.1MyEclipse5.1.0Eclipse-JEE-HELIOS-SR2Maven3.0.1m2eclipse0.12.1.20110112-1712Tomcat6.0.10maven-jetty-plugin6.1.26MySQL5.0.27NavicatLiteforMySQL8.1.20每个人的开发环境可能会有差异,但有一点我需要说明的是,JDK的版本不得低于1.5,因为用到了很多1.5版才支持的新特性。Tomcat、Jetty、Maven和MySQL请不要低于我所用的版本,因为我没在其它的版本上进行测试。Navicat则是MySQL数据库的图形化操作工具。接下来我将介绍如何在Eclipse3.6中,使用m2eclipse插件构建web应用及测试开发环境。2、设置MavenMaven的安装很简单,只需要解压即可,请设置PATH变量,这样可以使用命令行进行操作,然后就要在%MAVEN_HOME%\conf目录下,对settings.xml作下修改这就是设置本地仓库,目录可以根据自己的实际情况更改,不过请使用/正斜杠,因为我在实际使用中,发现反斜杠有时候获取不到资源。对于个人使用,设置好这个就OK了,至于Nexus配置不在本文讨论范围内,大家如有兴趣可以去看看juvenxu的博客,他是目前公认的Maven专家。3、安装m2eclipse选择Help-InstallNewSoftware...在弹出的窗口中,点击Add...又会弹出一个小窗口,输入m2eclipse的安装地址,如下图所示:输入完成后,点击OK,这时Eclipse就开始查找这个插件了,请耐心等一会。插件找到后,请勾选要安装的内容,接下来就是一般的安装流程了,此处省略500字。安装完成请重新启动Eclipse,然后再对这个插件进行一番设置。4、设置m2eclipse进入Perferences,选择Maven,去掉Downloadrepositoryindexupdatesonstartup前的勾,默认情况是会在每次启动Eclipse的时候自动去Maven中央仓库下载索引,这无疑是非常不好的,要知道Maven中央仓库所包含的jar资源非常庞大,而且每天都会有很多新的项目上传,弄不好Eclipse还没开始用,就被这些东西搞挂掉了。接下来选择Installations将这个插件自带的Maven换成之前安装的Maven,这样就保证了版本的一致性。设置好这个之后,再点击UserSettings,用本机maven的settings.xml替换默认的配置文件,因为默认的设置是会将本地仓库放到系统盘符\DocumentsandSettings\用户目录\.m2\repository这个目录下面。大家可以看到,用maven中的配置文件替换后,下面的LocalRepository自动变更为settings.xml中的设置。5、创建maven工程做完这些,我们就可以开始创建Maven工程了。选择New-other...-Maven-MavenProject,然后选择下一步请设置工作空间路径,大象的默认工作空间放在eclipse的根目录下面,这里的Location显示的应该为空,为了进行说明,特将路径显示出来。确定没问题后,Next这个列表显示的就是maven支持的所有项目创建类型,我们是开发web应用,所以请选择maven-archetype-webapp最后一步输入我们要创建的项目,在Maven世界中,使用坐标来唯一标识一个构件,可以理解为项目,资源等等。GroupId表示当前项目所属的实际项目,ArtifactId定义实际项目中的一个Maven项目,根据名字就可以看出来,GroupId是一个大范围,而ArtifactId是一个小范围。比如大家都很熟悉的spring,就分成了spring-core.jar、spring-beans.jar、spring-context.jar等等。在maven里面,它的GroupId就是org.springframework,而ArtifactId则为spring-core、spring-beans、spring-context。怎么样?理解了没有?到此,项目生成了,请展开src/main,在main目录下新建一个java文件夹,打开ssm3的项目属性,选择JavaBuildPath-Source-AddFolder...-勾选java,这样做的目的,就是将src/main/java这个路径作为源文件的文件夹,这和以往用MyEclipse做开发的目录结构是不同的。而maven的规则也是这样定义的,假如你不进行这个设置,就算你在main下面创建了java目录,再添加包或类时,就会有问题,大家试试,看会出现什么错误。6、运行ssm3接下来,在pom.xml里面加入maven-jetty-plugin插件,默认生成的配置都可以去掉,整个pom就只有下图所示的配置。打开RunConfigurations,这有多种方式打开,可以从菜单Run里面选,也可以从工具栏选择,还可以在项目点击右键选择。在弹出的窗口,MavenBuild里面设置运行参数,点击BrowseWorkspace...会弹出下图那个小窗口,设定Basedirectory,加入jetty:run,点击Run,启动jetty在浏览器中输入会显示HelloWorld!,调用的是ssm3/main/webapp/index.jsp,大象加了点内容,结果就是这样的到这里,关于在Eclipse里搭建maven环境,配置,创建,运行,测试就全部讲完了,大家动手做做,熟悉一下这种开发方式,接下来就会在这个骨架上开发SSM3示例。恩,我们下次继续。SpringMVC3.0.5+Spring3.0.5+MyBatis3.0.4全注解实例详解(二)2012-07-3115:37345人阅读评论(0)收藏举报在上一篇文章中我详细的介绍了如何搭建maven环境以及生成一个maven骨架的web项目,那么这章中我将讲述SpringMVC的流程结构,SpringMVC与Struts2的区别,以及例子中的一些配置文件的分析。一、SpringMVC3.0介绍SpringMVC是一个典型的MVC框架,是Spring内置的Web框架,可以作为应用项目的展示层,继Spring2.0对SpringMVC进行重大升级后,Spring2.5又为SpringMVC引入了注解驱动功能,再到3.0时代,全面支持REST的网络服务和更容易的网络编程。这一系列的变革,无疑吸引着我们走进SpringMVC3.0的世界。REST功能是SpringMVC3.0新增的,它通过不带扩展名的URL来访问系统资源。REST是把访问的所有资源看成静态的,一个或一组,每个不同的URL地址都是一个静态资源。那么SpringMVC3.0是如何支持REST的呢?简单的说,它是通过@RequestMapping及@PathVariable注解提供的,在@RequestMapping中指定value与method,就可以处理对应的请求。另外springmvc框架还做了很多很多工作。二、SpringMVC流程大象根据官方文档的介绍,以及自己的理解,画了一个SpringMVC的流程结构图,大家可以参考下。1、SpringMVC的核心是DispatcherServlet,当客户端发送一个请求时,这个请求经过一系列过滤器处理。然后DispatcherServlet会接收到这个请求。2、DispatcherServlet会从HandlerMapping对象中查找与请求匹配的Controller,并将结果返回给DispatcherServlet。3、DispatcherServlet将请求转发给目标Controller,如果定义有拦截器,则会经过这些拦截器处理。4、标Controller处理完成业务逻辑后,会返回一个结果给DispatcherServlet。5、DispatcherServlet根据结果查询ViewResolver,找到与之对应的视图对象,同样将结果返回给DispatcherServlet。6、DispatcherServlet根据指定的显示结果,调用模板对象渲染view。7、将view返回给客户端。根据上面的说明,可以很很明显的看出,SpringMVC的核心是Servlet,并且创建的Controller其实也是一个Servlet。三、Spring与struts2比较另一个非常有名的MVC框架是Struts2,SpringMVC的核心是Servlet,而Struts2的核心则是Filter。下表列出SpringMVC与Struts2的主要区别与比较结果。通过上面的综合比较,SpringMVC3.0的优势要比Struts2大得多,虽然它还有些不足的地方,但随着后期版本的升级,必然会进行改进,会做的更好。所以采用SpringMVC3.0作为系统的展示层要比Struts2好。四、线程安全由于SpringMVC默认是Singleton的,所以会产生一个潜在的安全隐患。根本核心是instance变量保持状态的问题。这个问题有两种解决办法:a)在控制器中不使用实例变量b)将控制器的作用域从单例改为原型这两种做法有好有坏,第一种,需要开发人员拥有较高的编程水平与思想意识,在编码过程中力求避免出现这种BUG,而第二种则是容器自动的对每个请求产生一个实例,由JVM进行垃圾回收,因此做到了线程安全。使用第一种方式的好处是实例对象只有一个,所有的请求都调用该实例对象,速度和性能上要优于第二种,不好的地方,就是需要程序员自己去控制实例变量的状态保持问题。第二种由于每次请求都创建一个实例,所以会消耗较多的内存空间。五、配置文件SpringMVC是Spring的一个组成部分,所以配置文件就会变得简单许多。以下就是本例子中最重要的几个配置文件。1、pom.xml管理项目依赖,编译,发布,插件配置等等。所有的依赖包都由配置决定,另外所需依赖包的其它依赖,无需配置,maven会自动获取并进行管理,这无疑帮我们减少了很多工作量,再也不用为到处找jar包,或版本不一致而头疼了。定义依赖版本属性Spring依赖,本例是一个很基础的例子,所以有这些就够了,以后有扩展再增加。MyBatis依赖,iBatis从3.0版之后就改名为MyBatis。这个例子,大象没有使用Hibernate,而是采用更轻量级的MyBatis来作为持久层框架,使用很简单,也很灵活。另外,本例还用到了一个mybatis-spring插件,这是因为spring3.0.5仅支持ibatis2.0,所以需要这个插件来处理底层数据源等工作。本例用到了AOP,所以需要这两个依赖下面是其它一些必须的依赖,值得说明的就是,因为在本例中,大象对Service还是用的类,没有进行基于接口的实现方式,所以需要cglib这个依赖。另外,页面使用html作为展示层,使用freemarker标签处理动态数据。2、web.xml与ssh2的web.xml主要的区别就是替换Struts2的启动配置,改为S