qqjianyue代码工

砌java代码
posts - 62, comments - 9, trackbacks - 0, articles - 10
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

适合入门级看,但其中的错误解决适合大家参考。
在此使用MyEclipse6.0作为编程环境,真正领悟ssh后,就会知道MyEclipse添加spring与hibernate支持的用意只是让MyEclipse自动添加spring与hibernate的包,还有产生一些配置文件代码,在此为节省时间,使用MyEclipse来添加,但是其实自己添加也行。

要填的东西将会指出,其他都是默认

前提:

数据库建库
使用上面SQL语句在MySQL中建立表格,最好使用SQL yog Enterprise工具
安装MySQL与SQL yogEnterprise请自己掌握。

1.创建工程:


file-->web project(习惯使用,貌似dynamic web project也行)
 project name:ssh
J2EE Specification Level选择Java EE5.0(使用新一点的吧)

finish->
菜单Wiindows-->Open Perspective-->MyEclipse Java Enterprise 视图

2.添加Spring支持:


工程名上右键-->MyEclipse-->Add Spring Capabilities
a).在框内选上:
Spring2.0 AOP Libraries(对于面向切面有用,后面会用到配置面向切面的)
Spring2.0 Core Libraries(Spring核心库)
Spring2.0 Persistence Core Libraries(持久层库,要Spring与Hibernate集成,当然就添加啦)
Spring2.0 J2EE Library
Spring2.0 Web Libraries
暂时就只添加这5个
Copy checked Library contents to project folder 选上,这样就可以将库添加到工程内,否则这个工程编译的时候会引用本机的文件系统内的库,工程转移到其它机器就需要重新将每个包改对路径,当然如果只需要本机开发的就不用copy啦。
next->
b).new applicationContext.xml 将路径改为在WebRoot/WEB-INF下面,其实放在src下也行,但是工程编译的时候将src下的东西编译到WebRoot/WEB-INF下的classes目录下,配置applicationContext路径的时候就相应修改就行。
finish->

3.建立数据库连接


菜单Wiindows-->Open Perspective-->MyEclipse Database Explorer
DB Browser中右键-->new,新建一个数据库连接,打开一个对话框
Driver template 选择MySQL connector/J(可以不选,选着只是为了下面显示出连接字符串的模板,让不熟悉的人可以照这模式来填)
Driver name:任意,用于标识这个连接,对我们工程没有任何关系的。
Connection URL:jdbc:mysql://localhost:3306/ssh (意思是本地地址IP的数据库ssh,如果是远程数据库,请写远程地址,当然要确保远程地址是可达的,例如防火墙阻隔等)
User name:你的数据库登录名
password:登录名密码
Add Jars-->打开对话框寻找本地文件系统的MySQL连接驱动包,(提供下载/Files/jianyue/mysqlConnector.rar,解压取里面那个jar)
save password 打上钩,方便点
可以test 测试一下是否能够连接

这步骤的实际意义是在MyEclipse IDE工具上建立一个数据库连接,来管理,对于我们工程其实没有一点影响的,只是这个连接,以后引用或者管理的时候就较方便。
finish-->

4.添加Hibernate支持


切换回原来的视图,其实有多种切换视图的方法,快捷键等,自己学吧。
a).工程名上右键-->MyEclipse-->add Hibernate Capabilities
同样Copy checked Library Jars to project folder and add to build-path

next-->
b).选择Spring configuration file
next->
c).因为原来已经有一个spring配置文件,所以就选择Existing Spring configuration file
sessionFactory ID:sessionFactory(可以自定义名称,使用惯例的吧,随便啦)
next-->
d).DB Driver  选择在MyEclipse DB Explorer中建立的数据库连接名称(这里就体现到同一个IDE工具的好处,方便地引用那个连接的配置)
Bean ID:dataSource(又是惯例的名称)
next-->
取消掉create SessionFactory class
finish-->

5.添加Struts2.0支持


由于MyEclipse没有集成Struts2.0的包,所以自己添加Struts的五个包


由于空间有限,可以上网搜索一个叫struts2-blank的工程包,war文件也可以,可以用rar打开,取其里面lib下的这五个包
struts暂且只添加这5个包,多包反而会导致冲突(后面有说),至于struts想集成meshsite等的话,就另外加包吧。

顺便将原来的那个mysqlConnector的jar包也拿来吧,一起拖到WEB-INF/lib目录下,可以直接拖到IDE工具上的工程浏览框(即Package视图)的lib图标上,MyEclipse支持拖放功能。
还有commons-pool-1.4.jar和commons-dbcp-1.2.2.jar和struts2-spring-plugin-2.0.6.jar也是必须自己加进lib中的
如果有包重复的话,覆盖就行。

6.配置文件web.xml详解


web.xml

struts的过滤器配置是有顺序的:
按照Struts2的API,filter的顺序是
struts-cleanup filter
SiteMesh filter
FilterDispatcher
如果需要配置字符转换过滤器的话,那就安排在FilterDispatcher之前

spring配置文件可以多个,从/WEB-INF/applicationContext*.xml的通配符就可以看出来了

7.struts.xml详解


在src下建立一个struts.xml的文件:
struts.xml


8.applicationContext.xml详解


applicationContext.xml

applicationContextUser.xml

9.构造pojo与dao


先建好包结构如下:

a).切换到MyEclipse DB Explorer视图->双击你建的那个连接来打开数据库连接->Table下user表右键->Hibernate Reverse Engineering->

->finish:这样会产生三个文件,数据库user映射的pojo实体类对象User.java,数据库访问对象UserDAO.java,数据库映射文件User.hbm.xml
将User.java 与 hbm文件移到pojo包下
上面搞错了点,将UserDAO移到dao.hibernate包下吧
这里的东西涉及到applicationContext.xml的改变,没有关系,前面已经详尽讲解了各xml文件的意义。
UserDAO已经自动生成很多数据库访问函数,从字面上可以看出是什么意思,大部分函数是不一定用到的,自己想使用的方法写在下面说的接口上,再实现他吧。
我们为其写个UserDAO接口,在dao包下编写一个IUserDAO.java的接口,并且使UserDAO实现这个接口

10.编写服务


参照代码吧!

11.编写action




12.编写页面


final我遇到的异常
appllicationConotext.xml中的org.apache.commons.dbcp.BasicDataSource not found错误,可能是没有添加commons-pool.jar和commons-dbcp.jar和commons-collections.jar

Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is org.hibernate.MappingException: entity class not found: ssh.dao.User
因为自己在移动产生的User.java类的时候,忘记修改User.hbm.xml文件的映射实体类,需要改成
 <class name="ssh.pojo.User" table="user" catalog="ssh">

Action class [loginAction] not found - action - file:/D:/workspace2/.metadata/.plugins/com.genuitec.eclipse.easie.tomcat.myeclipse/tomcat/webapps/ssh/WEB-INF/classes/struts.xml
因为login action的class我指定为loginAction,所以在spring中的login Bean的id="loginAction"来对应,但是我却写成了login,所以找不到。

org.springframework.orm.hibernate3.HibernateQueryException: unexpected token: model near line 1, column 56 [from ssh.pojo.User as model where model.name= adminand model.password= admin]; nested exception is org.hibernate.hql.ast.QuerySyntaxException: unexpected token: model near line 1, column 56 [from ssh.pojo.User as model where model.name= adminand model.password= admin]
可以从from字符串中看出,我忘记写空格了。

javax.servlet.ServletException: org.springframework.jdbc.UncategorizedSQLException: Hibernate operation: Cannot open connection; uncategorized SQLException for SQL [???]; SQL state [null]; error code [0]; Cannot create PoolableConnectionFactory (Unknown database 'ssh1'); nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Unknown database 'ssh1')
因为spring中的dataSource的  <property name="url" value="jdbc:mysql://localhost:3306/ssh"></property>,我原来指定了ssh1的数据库,我并没有创建这个数据,所以改回ssh

javax.servlet.ServletException: org.springframework.dao.InvalidDataAccessResourceUsageException: could not execute query; nested exception is org.hibernate.exception.SQLGrammarException: could not execute query
这个是因为我忘记把sql字符串中的值用''括起来,例如:
from ssh.pojo.User as model where model.name = admin and model.password = admin
应该要变成:
from ssh.pojo.User as model where model.name = 'admin' and model.password = 'admin'
自己改UserDAO中的字符串吧。

No configuration found. Configuring ehcache from ehcache-failsafe.xml found in the classpath:....
如果有这个问题的话,那就参看:http://www.blogjava.net/jianyue/archive/2008/08/28/225415.html

java.lang.NoClassDefFoundError: org/objectweb/asm/CodeVisitor
java.lang.NoClassDefFoundError: org/objectweb/asm/commons/EmptyVisitor
java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit
CGLIB Enhancement failed
主要是hibernate与spring包冲突问题,可能有多种情况,都参照一下吧,但是最关键的原则是一个同样功能的包,
不要将多个版本都放进来。根据这个原则,自己也能够知道应该删去什么包。
解决方案:参看:http://www.blogjava.net/jianyue/archive/2008/08/28/225246.html

No configuration found for the specified action:  in namespace:
那么一定是action配置得不对,不是包的问题,自己详细参照一下我的那份action配置说明。


代码工程/Files/jianyue/ssh.rar

由于空间有限,去掉了包。包的列表如下:


使用QQ中转站的工程资料:http://xianexs.mail.qq.com/cgi-bin/downloadfilepart/svrid264/ssh.rar?svrid=264&fid=43c7ea2ec48f0ab1df6cf19be93fd207f24f786949adb4ba&&txf_fid=64f2ea7b5eab7021495c997ac5512b1e1556cd97&&txf_sid=aaf1d1ab2dd1c1b7301c3909f4df304167a7e99e有时间限制,尽快下。

只有注册用户登录后才能发表评论。


网站导航: