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

  • 相关阅读:
    SQL执行效率1
    php经典算法(转载)
    linux自用命令
    vim基本命令
    xampp安装
    BUU-rsa
    z3约束器学习笔记
    面试前夕oi挣扎式复习
    bss上的格式化字符串漏洞
    一、汇编
  • 原文地址:https://www.cnblogs.com/xiashiwendao/p/3163114.html
Copyright © 2020-2023  润新知