步骤一:准备
1.下载
sqlJDBC.jar的下载地址:http://www.microsoft.com/en-us/download/details.aspx?id=21599
Hibernate4下载地址:http://www.hibernate.org/downloads
将sqlJDBC中的sqljdbc4.jar + Hibernate/lib/required中的jar文件 + Struts2里面的必备的jar包拷贝到WebRoot/WEB-INF/lib文件夹下面。
2.创建工程
1) 创建一个Web工程,添加三个页面:index.jsp(默认存在,如下所示),Complete.html(简单的文字显示), Error.html
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <%@taglib prefix="s" uri="/struts-tags" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> … <body> <s:form action="creat"> <s:submit value="Click To Insert Data"/> </s:form> </body> </html>
步骤二:配置Struts
1. 配置Struts
1) 首先在WebRoot/WEB-INF下面在web.xml中指定filter(负责前台S标签解析)
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>2) 然后创建struts.xml(负责后台Action映射)放到src的下面
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <constant name="struts.enable.DynamicMethodInvocation" value="false" /> <constant name="struts.devMode" value="true" /> <constant name="struts.configuration.xml.reload" value="true"/> <package name="default" namespace="" extends="struts-default"> <action name="create" class="org.WebHibernate.OperationAction" method="CreateUsedH4"> <result name="success">/Complete.html</result> <result name="error">/Error.html</result> </action> </package> <!-- Add packages here --> </struts>
这里用一下Struts2里面的新鲜货,可以指定Action对应的方法名,Struts1里面开始只能调用Execut的方法的哦。
3) 添加Struts的引用,右键工程,Build Path->config build path…-> Libraries –> Add External Jars…。添加Struts必备文件。
注:struts2必备jar文件有common-fileupload.jar;common-io.jar;commons-logging-X.jar;commons-lang3-3.1;freemarker-X.jar;ognl-X.jar;
strus2-core-X.jar;x-work-core-X.jar;javassist-3.11.0.GA
2. 创建action/业务类
1) 右键src创建新的包,取名org.WebHibernate,再在下面创建一个新的类,叫做OperationAction
package org.WebHibernate; import com.opensymphony.xwork2.ActionSupport; public class OperationAction extends ActionSupport { public String CreateUsedH4() { return SUCCESS; } }
3. 在Tomcat中创建虚拟目录并运行网站。
%System%Program FilesApache Software FoundationTomcat 7.0confServer.xml中添加如下:
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> …
<Context path="/wh" docBase="D:JavaSpaceWebHibernateWebRoot"/> </Host>
至此,Struts配置成功,能够实现页面的跳转。
步骤三:配置Hibernate
1. 配置DB Driver
Windows菜单->Show view->DB Browser->右键New,填写内容如下,点击“Finish”,OK,数据库驱动配置完毕。
1)连接字符串:jdbc:sqlserver://localhost:1433; DatabaseName=dbname ;
2)Driver Jars”里面要首先选sqljdbc.jar,然后是sqljdbc4.jar,顺序不能变,两个一个都不能少。其实对于JRE1.7而言sqljdbc.jar是会引发代码异常的,但是如果仅仅是导入sqljdbc4.jar,“Driver classname”将无法自动识别,所以需要先通过选择sqljdbc来获取“Driver Classname”,后来还需要把他从Library中删掉。
2. 配置Hibernate
1)右键工程->My Eclipse->Add Hibernate Capibilities…不需要选择Library,因为我是用的是myEclipse6.5,只支持到H3,没有H4的包,所以这里不需要导入任何已经存在的jar包,否则会导致后面代码执行混淆;另外需要注意的是“Jar Library Installation”,选择的是“Copy”项目,这样后面导入的Jar包会自动添加到Library Folder中。点击“Next”,保持默认的即可。
2)选择数据源的驱动器,这里选择JDBC Driver,然后选择刚才创建的SQL Server的数据源(DB Driver)即可。下一步,取消勾选“Creatre SessionFactory class?”然后“Finish”,这样Hibernate的基本配置就完成了。
3. 创建表映射
1)创建一个包用来盛放映射信息,在src下面创建一个包“org.Web.WebHibernate.bean”;
2)在DB Browser中,右键刚才创建的Driver,选择“Open Connection…”,就会自动加载到表信息,定位到你的数据库的表信息,右键表,点选“Hibernate Revenue Engineering…”;分别指定“Java src folder”和“Java Package”的路径,其他的维持默认;点击下一步,在这个页面中只需要指定“ID generation”即可,选择“assigned”代表主键是代码指定的,而不是自动生成。点击Finish,完成映射关系。
注:经过此番配置将会在src的根目录生成一个*.cfg.xml文件,这个文件主要是用来描述连接数据库的信息,以及对应的表的映射文件;还会在“org.Web.WebHibernate.bean”包中创建*.hbm.xml文件,这个文件定义了针对某张表的每个字段和实体类的映射关系。
4. 编写代码
1)将hibernate-release-4.2.2.Finallib
equired下面的jar包放到WebRootWEB-INFlib下面;
2)创建实体类(POJO)用来保存数据,类名和*.hbm.xml的配置保持一致。
package org.Web.WebHibernate.bean; public class Table1 { private String aa = null; private String bb = null; private String id ; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getAa() { return aa; } public void setAa(String aa) { this.aa = aa; } public String getBb() { return bb; } public void setBb(String bb) { this.bb = bb; } }
3)创建实现类,就在上面OperationAction的CreateUsedH4()中添加如下代码:
package org.WebHibernate; import org.Web.WebHibernate.bean.Table1; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import com.opensymphony.xwork2.ActionSupport; public class OperationAction extends ActionSupport { public String CreateUsedH4(){ SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); Session session = sessionFactory.openSession(); session.beginTransaction(); Table1 t = new Table1(); t.setId("5"); t.setAa("ABC"); t.setBb("DEF"); session.save(t); session.getTransaction().commit(); session.close(); return SUCCESS; } }
4) 直接运行后可能会遇到JRE和jdbc不匹配的错误,在右键工程->build Path->Libraries中删掉sqljdbc.jar文件即可。
附上调试过程遇到的具体问题:
1.java.lang.ClassNotFoundException: org.hibernate.Session
下载的Hibernate,里面的bin/required里面的jar包需要全部copy到WEB-INFO/lib文件夹中。
4.想要重新配置Hibernate
经过一次配置后,add hibernate capabilities将会变得不可用,想要重新配置打开根目录.project文件,删除
<buildCommand> <name>com.genuitec.eclipse.hibernate.HibernateBuilder</name> <arguments> </arguments> </buildCommand>以及
<natures> <nature>com.genuitec.eclipse.hibernate.hibernatenature</nature>
… </natures>即可重新配置Hibernate。
2.XML Editor的多方式看XML内容
MyEclips里面的XML Editor是由Design和Source两个Tab的,如果不习惯看Design页面可以切换点击到Source,hibernate.cfg.xml则有三个Tab供你选择切换视角。
3. java.lang.NoSuchMethodError: org.hibernate.SessionFactory.openSession()Lorg/hibernate/classic/Session;
因为我是单用的是H4(所以和S3无关,网上主要讲述的是S3和H4的文章),但是在MyEclips添加了Hibernate的配置后默认是会添加上一堆H3的jar,导致引用异常,在BuildPath中,删除掉H3相关的Jar包和信息即可。
4.???????? Java Runtime Environment (JRE) 1.7 ??????? JDBC 4.0 ? sqljdbc4.jar ???
删掉WEB-INF/lib下面的sqldbc.jar即可。因为JRE1.7只支持sqljdbc4,但是因为我是用的是MyEclips6,所以添加Hibernate只能是按照H3的方式添加,还需要添加sqljdbc.jar以及sqljdbc4.jar(否则识别不出Driver Class),创建完毕后,直接在buildPath还是物理文件夹中删除即可。
5.Unknown entity: org.njy.bean.Table_1
那是因为创建Hibernate映射的时候出现的问题,打开XX.hbm.xml文件。
<hibernate-mapping> <class name="org.njy.bean.Table_1" table="Table_1" schema="dbo" catalog="Test">
…
将class的name指定为你自己定义的实体类(里面指定了对于字段的get和set方法,即POJO对象)的全路径,即可。
6.Address already in use: JVM_Bind
当然这个问题和Hibernate无关。就是在调试过程中发现了tomcat经常莫名其妙的关闭。于是看了一下日志发现标题所示的异常。这个异常代表Tomcat的端口被其他的程序占用了。于是,打开cmd窗口,敲命令:netstat –ano(啊!弄),显示端口占用情况以及占用程序的PID,发现了可疑程序,到任务管理器中一看果然有一个: :Java(TM) Platform SE binary,还有一个是javaw.exe*32(MyEclipse),后来通通删掉,问题解决。