MyEclips:Struts 2 + Hibernate 4 + SQL Server2008

时间:2023-03-09 22:44:25
MyEclips:Struts 2 + Hibernate 4 + SQL Server2008

步骤一:准备

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 Files\Apache Software Foundation\Tomcat 7.0\conf\Server.xml中添加如下:

      <Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true">
        <Context path="/wh" docBase="D:\JavaSpace\WebHibernate\WebRoot"/>
</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中删掉。

MyEclips:Struts 2 + Hibernate 4 + SQL Server2008

2. 配置Hibernate

1)右键工程->My Eclipse->Add Hibernate Capibilities…不需要选择Library,因为我是用的是myEclipse6.5,只支持到H3,没有H4的包,所以这里不需要导入任何已经存在的jar包,否则会导致后面代码执行混淆;另外需要注意的是“Jar Library Installation”,选择的是“Copy”项目,这样后面导入的Jar包会自动添加到Library Folder中。点击“Next”,保持默认的即可。

MyEclips:Struts 2 + Hibernate 4 + SQL Server2008MyEclips:Struts 2 + Hibernate 4 + SQL Server2008

2)选择数据源的驱动器,这里选择JDBC Driver,然后选择刚才创建的SQL Server的数据源(DB Driver)即可。下一步,取消勾选“Creatre SessionFactory class?”然后“Finish”,这样Hibernate的基本配置就完成了。

MyEclips:Struts 2 + Hibernate 4 + SQL Server2008MyEclips:Struts 2 + Hibernate 4 + SQL Server2008

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,完成映射关系。

MyEclips:Struts 2 + Hibernate 4 + SQL Server2008MyEclips:Struts 2 + Hibernate 4 + SQL Server2008

注:经过此番配置将会在src的根目录生成一个*.cfg.xml文件,这个文件主要是用来描述连接数据库的信息,以及对应的表的映射文件;还会在“org.Web.WebHibernate.bean”包中创建*.hbm.xml文件,这个文件定义了针对某张表的每个字段和实体类的映射关系。

4. 编写代码

1)将hibernate-release-4.2.2.Final\lib\required下面的jar包放到WebRoot\WEB-INF\lib下面;

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;
}
}

注:表结果如下

MyEclips:Struts 2 + Hibernate 4 + SQL Server2008

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文件即可。

MyEclips:Struts 2 + Hibernate 4 + SQL Server2008

MyEclips:Struts 2 + Hibernate 4 + SQL Server2008

MyEclips:Struts 2 + Hibernate 4 + SQL Server2008

 

附上调试过程遇到的具体问题:

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供你选择切换视角。

MyEclips:Struts 2 + Hibernate 4 + SQL Server2008      MyEclips:Struts 2 + Hibernate 4 + SQL Server2008

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),后来通通删掉,问题解决。