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 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中删掉。
image

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


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

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

imageimage

注:经过此番配置将会在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;
    }
}

注:表结果如下
image

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

image

image

image

 

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

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

image      image

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

原文地址:https://www.cnblogs.com/xiashiwendao/p/3163114.html