<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    happyfish

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      38 Posts :: 1 Stories :: 62 Comments :: 0 Trackbacks
    摘自久久學院
     安裝篇

      一,下載安裝 j2sdk1.4(www.sun.com))或以上,設置 CLASSPATH,java_home。

      二,下載服務器,免費版本的有 tomcat,resin,當然也還有 weblogic之類的巨無霸,不過得看你電腦的配置是否承受的了!

      這里只以resin來說明,其他的配置都差不多,可以查看各個服務器自帶的說明文件。

      resin 服務器可以在 caucho.com下載,選擇合適的版本,下載解壓縮就可以直接使用。

      這里resin有一個 resin-ee版本,這個主要是帶ejb功能支持的。 如果用不到ejb,一般的就足夠了。
      三,然后就是數據庫,有很多數據庫產品可以選擇,DB2,Oracle,MSSQL,MySQL等等太多了。這里我選擇MySQL,不僅因為它是免費的,而且它的4.0版本在繼承以前版本的快速穩定的基礎上,整合了InnoDB(http://www.innodb.com)先進的事務處理機制。相信伴隨著Linux的壯大,它將在商業數據庫市場占的一席之地。不過就數據庫本身,它還缺少子查詢等強大功能的支持。
    安裝就不多說了,配置好用戶名,密碼。 然后就可以下載 MySQL-Front 來可視化操作數據庫。

      四,在Java編程上,一個IDE的功能顯然不可缺少,現在流行的IDE很多,有JBuilder,Eclipse,IntellJ IDEA,JCreator等等,其中 eclipse借著開源東風,依靠強大的插件功能被譽為最有前途的工具,JBuilder從來都最強大功能的java工具,不過大到我的電腦實在運行不了,窮啊,可沒錢配新電腦。所以我還是喜歡JCreator,小巧而又功能不俗,應付小規模的應用綽綽有余。編譯開發時要想獲得提示支持,需要在 configure--option--JDK Profiles 導入jar文件。

      五,一個站點前臺的界面開發,當然離不開大名鼎鼎的 Dreamweaver 了,它支持jsp,asp等很多語言的開發。特別是最近的Dreamweaver MX 2004 增強了站點的功能,可以方便的對一個站點進行控制。面對struts的前臺自定義標簽,有一個mxp插件可以用來支持顯示sturts的標簽。使用前還要在編輯--標簽庫 里面導入.tld文件,目前只支持html,和bean 兩個標簽。

      配置篇

      一,resin虛擬站點配置

    <host id='yourweb:8080' app-dir='e:\blog\' class-update-interval='2'>
    <web-app id='/'>
    <directory-servlet id='false'/>
    </web-app>
    <error-log id='log/web-error.log'/>
    <host>

      然后在定義的目錄下面建立站點。

      二,Dreamweaver站點的配置就不多說了。

      三,Struts的配置

      這里我們使用的是struts1.1,下載并解壓縮到臨時文件夾,就假設是tem文件夾吧。

      首先拷貝tem/lib/下面所有的.tld文件到站點的/WEB-INF/目錄下,再拷貝所有的.jar文件到/WEB-INF/lib/目錄下,最后web.xml文件中的配置差不多如下:

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
    "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">

    <web-app>

    <servlet>
    <servlet-name>action</servlet-name>
    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
    <init-param>
    <param-name>config</param-name>
    <param-value>/WEB-INF/struts-config.xml</param-value>
    </init-param>
    <init-param>
    <param-name>debug</param-name>
    <param-value>2</param-value>
    </init-param>
    <init-param>
    <param-name>detail</param-name>
    <param-value>2</param-value>
    </init-param>
    <load-on-startup>2</load-on-startup>
    </servlet>

    <servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.do</url-pattern>
    </servlet-mapping>


    <!-- The Usual Welcome File List -->
    <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>


    <!-- Struts Tag Library Descriptors -->
    <taglib>
    <taglib-uri>/tags/struts-bean</taglib-uri>
    <taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
    </taglib>

    <taglib>
    <taglib-uri>/tags/struts-html</taglib-uri>
    <taglib-location>/WEB-INF/struts-html.tld</taglib-location>
    </taglib>

    <taglib>
    <taglib-uri>/tags/struts-logic</taglib-uri>
    <taglib-location>/WEB-INF/struts-logic.tld</taglib-location>
    </taglib>

    <taglib>
    <taglib-uri>/tags/struts-nested</taglib-uri>
    <taglib-location>/WEB-INF/struts-nested.tld</taglib-location>
    </taglib>

    <taglib>
    <taglib-uri>/tags/struts-tiles</taglib-uri>
    <taglib-location>/WEB-INF/struts-tiles.tld</taglib-location>
    </taglib>

    </web-app>

      四,Hibernate配置

      下載并拷貝/lib目錄下的

    hibernate2.jar
    commons-beanutils.jar
    commons-collections.jar
    commons-dbcp.jar
    commons-lang.jar
    commons-logging.jar
    commons-pool.jar
    dom4j.jar
    cglib-asm.jar
    connector.jar

      到應用站點的/lib目錄下。接下來配置 hibernate.cfg.xml文件

    <?xml version='1.0' encoding='utf-8'?>
    <!DOCTYPE hibernate-configuration
    PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
    "http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd">
    <hibernate-configuration>
    <session-factory>

    <property name="hibernate.connection.url">
    jdbc:mysql://localhost:3306/yourdatabase
    </property>
    <property name="hibernate.connection.driver_class">
    org.gjt.mm.mysql.Driver
    </property>
    <property name="hibernate.connection.username">
    yourname
    </property>
    <property name="hibernate.connection.password">
    youyrpassword
    </property>

    <!?- 是否將運行期生成的SQL輸出到日志以供調試-->
    <property name="show_sql">false</property>

    <!--dialect ,每個數據庫都有其對應的Dialet以匹配其平臺特性-->
    <propertyname="dialect">net.sf.hibernate.dialect.MySQLDialect</property>
    <!?- 事務管理類型,這里我們使用JDBC Transaction -->
    <property name="transaction.factory_class">
    net.sf.hibernate.transaction.JDBCTransactionFactory</property>

    <property name="jdbc.batch_size">10</property>
    <property name="jdbc.use_scrollable_resultset">true</property>

    <!?映射文件配置,注意配置文件名必須包含其相對于根的全路徑-->
    <mapping resource="net/seerlog/hbm/Cat.hbm.xml"/>

    </session-factory>

    </hibernate-configuration>

      以上配置了數據庫連接所用的地址和用戶名,密碼等。具體參數的含義請參考官方文檔。

      映射文件的內容可以手工來寫,也可通過一些工具來自動生成。

      整個需要兩種文件: .hbm.xml配置文件 和 .java持久化對象 , 兩者是相互關聯的,.hbm.xml 對數據庫的映射還需要 .java這個bean來操作。所以整個過程需要首先設計好數據庫,然后根據數據庫導出 .hbm.xml文件 ,然后再導出 .java 文件。 有很多工具可以實現這個工程,我們這里采用 Middlegen-Hibernate來實現 數據庫到.hbm.xml文件的轉化,用Hibernate-Extension工具包中的 hbm2java 來實現 .hbm.xml 到 .java 文件的轉化!

     

      查找關鍵字”!ENTITY”,得到:

    <!DOCTYPE project [
    <!ENTITY database SYSTEM
    "file:./config/database/hsqldb.xml">
    ]>

      b) Application name

    <property name="name" value="airline"/>

      c) 輸出目錄

      查找關鍵字“name="build.gen-src.dir"”,得到:

    <property name="build.gen-src.dir" value="${build.dir}/gen-src"/>

      d) 對應代碼的Package name

    <hibernate
    destination="${build.gen-src.dir}"
    package="${name}.hibernate"
    genXDocletTags="false"
    genIntergratedCompositeKeys="false"
    javaTypeMapper="middlegen.plugins.hibernate.HibernateJavaTypeMapper"
    />

      配置完成后,在MiddleGen 根目錄下運行ant,就將出現MiddleGen的界面:

      選擇需要的表,單擊窗口頂部的Generate 按鈕,MiddleGen 即為我們生成這些數據庫表所對應的Hibernate映射文件。

      接下來的工作通過Hibernate Extension 來完成,Hibernate Extension 的tools\bin目錄下包含三個工具:

      1. hbm2java.bat

      根據映射文件生成對應的POJO。通過MiddleGen 我們已經得到了映射文件,下一步就是通過hbm2java.bat工具生成對應的POJO。

      2. class2hbm.bat

      根據POJO class 生成映射文件,這個工具很少用到,這里也就不再詳細介紹。

      3. ddl2hbm.bat

      由數據庫導出庫表結構,并生成映射文件以及POJO。這個功能與MiddleGen的功能重疊,但由于目前還不夠成熟(實際上已經被廢棄,不再維護),提供的功能也有限,所以我們還是采用MiddleGen生成映射文件,之后由hbm2java根據映射文件生成POJO 的方式。

      這里我們使用第一個hbm2java.bat,利用剛才生成的.hbm.xml文件自動生成 java 文件。

      為了使用這個工具,首先我們需要配置一些參數,打開tools\bin\setenv.bat 文件,修改其中的JDBC_DRIVER和HIBERNATE_HOME環境變量,使其指向我們的實際JDBC Driver文件和Hibernate所在目錄。同時檢查一下環境變量CP中的各個項目中是否實際存在,特別是%CORELIB%下的jar文件,某些版本的發行包中,默認配置中的文件名與實際的文件名有所出入(如%CORELIB%\commons-logging.jar, 在Hibernate 發行包中,可能實際的文件名是commons-logging-1.0.3.jar,諸如此類)。

      使用hbm2java,根據MiddleGen生成的映射文件生成Java 代碼:

      打開Command Window,在tools\bin目錄下執行:

    hbm2java c:\sample\org\hibernate\sample\*.xml --output=c:\sample\

      通過以上步驟我們就生成了所需要的所有基本配置文件。接下來就可以來初始化這些配置啦。
      實戰篇

      在這一節我們要配置一個完整的應用配置。其實每一個單獨拿出來都能寫本書,不過我只是側重對自己總結,在以后我會不斷地把學習的經驗教訓寫下來。

      一,Log4j 的初始化

      配置log4j.properties

    ### direct log messages to stdout ###
    #log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    #log4j.appender.stdout.Target=System.out
    #log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    %c{1}:%L - %m%n
    #log4j.appender.stdout.layout.ConversionPattern=%-5p %d{yyyy-MM-dd HH:mm:ss} %l%n%m%n
    log4j.logger.seerlog=DEBUG,A2
    log4j.appender.A2=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.A2.file=d:\\log\\applog.txt
    log4j.appender.A2.DatePattern='.'yyyy-MM-dd
    log4j.appender.A2.layout=org.apache.log4j.PatternLayout
    log4j.appender.A2.layout.ConversionPattern=%-5p %d{yyyy-MM-dd HH:mm:ss} %m%n

    #log4j.logger.ALL=DEBUG,A1
    log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.A1.file=d:\\log\\all.log
    log4j.appender.A1.DatePattern='.'yyyy-MM-dd
    log4j.appender.A1.layout=org.apache.log4j.PatternLayout
    log4j.appender.A1.layout.ConversionPattern=%-5p %d{yyyy-MM-dd HH:mm:ss} %l%n%m%n

    ### direct messages to file hibernate.log ###
    #log4j.appender.file=org.apache.log4j.FileAppender
    #log4j.appender.file.File=hibernate.log
    #log4j.appender.file.layout=org.apache.log4j.PatternLayout
    #log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

    ### set log levels - for more verbose logging change 'info' to 'debug' ###

    ###log4j.rootLogger=warn, stdout
    log4j.rootLogger=info, A1

    #以下是hibernate API需要的配置

    log4j.logger.net.sf.hibernate=info

    ### log just the SQL
    #log4j.logger.net.sf.hibernate.SQL=debug

    ### log JDBC bind parameters ###
    log4j.logger.net.sf.hibernate.type=info

    ### log schema export/update ###
    log4j.logger.net.sf.hibernate.tool.hbm2ddl=debug

    ### log cache activity ###
    #log4j.logger.net.sf.hibernate.cache=debug

    ### enable the following line if you want to track down connection ###
    ### leakages when using DriverManagerConnectionProvider ###
    #log4j.logger.net.sf.hibernate.connection.DriverManagerConnectionProvider=trac

      配置后如下來調用,首先需要初始化配置文件,這個過程只需要一次,所以我們可以在ServletContextListener中來進行。

    String prefix = context.getRealPath("/");
    PropertyConfigurator.configure(prefix+"/WEB-INF/classes/log4j.properties");

      這里需要你的配置文件的路徑來初始化。

      初始化完成后,我們在以后的action中就可以 象下面一樣來調用:

    static Logger log=Logger.getLogger("seerlog");
    log.warn("it's log4j warn");
    log.info("it's log4j info");

      關于 log4j 的完全使用方法,偶會在以后做詳細的說明!

      二,hibernate 的初始化

      首先我們要把hibernate.cfg.xml 放到應用的 classes 目錄中,然后可以使用hibernate參考文檔提供的例子來封裝對后臺的使用。

    public class Hi{

    private static final SessionFactory sessionFactory;
    private static Connection conn;
    static {
     try {
      sessionFactory = new Configuration().configure().buildSessionFactory();
     } catch (HibernateException ex) {
      throw new RuntimeException("Exception building SessionFactory: " + ex.getMessage(), ex);
     }
    }

    public static final ThreadLocal session = new ThreadLocal();
    public static Session getSession() throws HibernateException {
     Session s = (Session) session.get();
     // 假如沒有一個可用的線程,開啟一個新 Session,
     if (s == null) {
      conn=DBConnectionManager.getConnection();
      s = sessionFactory.openSession(conn);
      session.set(s);
     }
     return s;
    }

    public static void closeSession() throws HibernateException {
     Session s = (Session) session.get();
     session.set(null);
     if (s != null)
      s.close();
     if(conn!=null)
      DBConnectionManager.returnConnection(conn);
     }
    }

      文中DBConnectionManager.getConnection()是一個DAO類,提供連接池的實現。

      我們使用這個con連接來創建一個 session ,sission是一個數據庫連接操作的會話周期,它提供了強大的管理數據的能力。

      以后我們在action的 execute 方法中就可以使用 Hi.getSession()來獲得一個會話支持。典型的應用如下:

    try{
     //開啟一個會話,并啟動事務回滾能力
     Session session = Hi.getSession();
     Transaction tx= session.beginTransaction();

     //查詢數據庫,使用HQL
     Query q = session.createQuery("from Topic as topic order by topic.id desc");
     q.setFirstResult(0);
     q.setMaxResults(5);

     //得到一個List類型的數據
     List newTopicList = q.list();

     // 業務處理
     NewTopicList ntlBean=new NewTopicList();
     ntlBean.setList(newTopicList);
     req.setAttribute("newtopiclist",ntlBean);

     //事務提交,記得關閉會話!
     tx.commit();
     Hi.closeSession();

    }//因為整個會話會拋出異常,所以需要用try--catch來包裹
    catch(HibernateException e){

     //日志記錄
     Log.error(e.toString());
    }

      其中的HQL 可以參考 hibernate 官方文檔來學習。
      實戰篇

      在這一節我們要配置一個完整的應用配置。其實每一個單獨拿出來都能寫本書,不過我只是側重對自己總結,在以后我會不斷地把學習的經驗教訓寫下來。

      一,Log4j 的初始化

      配置log4j.properties

    ### direct log messages to stdout ###
    #log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    #log4j.appender.stdout.Target=System.out
    #log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    %c{1}:%L - %m%n
    #log4j.appender.stdout.layout.ConversionPattern=%-5p %d{yyyy-MM-dd HH:mm:ss} %l%n%m%n
    log4j.logger.seerlog=DEBUG,A2
    log4j.appender.A2=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.A2.file=d:\\log\\applog.txt
    log4j.appender.A2.DatePattern='.'yyyy-MM-dd
    log4j.appender.A2.layout=org.apache.log4j.PatternLayout
    log4j.appender.A2.layout.ConversionPattern=%-5p %d{yyyy-MM-dd HH:mm:ss} %m%n

    #log4j.logger.ALL=DEBUG,A1
    log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.A1.file=d:\\log\\all.log
    log4j.appender.A1.DatePattern='.'yyyy-MM-dd
    log4j.appender.A1.layout=org.apache.log4j.PatternLayout
    log4j.appender.A1.layout.ConversionPattern=%-5p %d{yyyy-MM-dd HH:mm:ss} %l%n%m%n

    ### direct messages to file hibernate.log ###
    #log4j.appender.file=org.apache.log4j.FileAppender
    #log4j.appender.file.File=hibernate.log
    #log4j.appender.file.layout=org.apache.log4j.PatternLayout
    #log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

    ### set log levels - for more verbose logging change 'info' to 'debug' ###

    ###log4j.rootLogger=warn, stdout
    log4j.rootLogger=info, A1

    #以下是hibernate API需要的配置

    log4j.logger.net.sf.hibernate=info

    ### log just the SQL
    #log4j.logger.net.sf.hibernate.SQL=debug

    ### log JDBC bind parameters ###
    log4j.logger.net.sf.hibernate.type=info

    ### log schema export/update ###
    log4j.logger.net.sf.hibernate.tool.hbm2ddl=debug

    ### log cache activity ###
    #log4j.logger.net.sf.hibernate.cache=debug

    ### enable the following line if you want to track down connection ###
    ### leakages when using DriverManagerConnectionProvider ###
    #log4j.logger.net.sf.hibernate.connection.DriverManagerConnectionProvider=trac

      配置后如下來調用,首先需要初始化配置文件,這個過程只需要一次,所以我們可以在ServletContextListener中來進行。

    String prefix = context.getRealPath("/");
    PropertyConfigurator.configure(prefix+"/WEB-INF/classes/log4j.properties");

      這里需要你的配置文件的路徑來初始化。

      初始化完成后,我們在以后的action中就可以 象下面一樣來調用:

    static Logger log=Logger.getLogger("seerlog");
    log.warn("it's log4j warn");
    log.info("it's log4j info");

      關于 log4j 的完全使用方法,偶會在以后做詳細的說明!

      二,hibernate 的初始化

      首先我們要把hibernate.cfg.xml 放到應用的 classes 目錄中,然后可以使用hibernate參考文檔提供的例子來封裝對后臺的使用。

    public class Hi{

    private static final SessionFactory sessionFactory;
    private static Connection conn;
    static {
     try {
      sessionFactory = new Configuration().configure().buildSessionFactory();
     } catch (HibernateException ex) {
      throw new RuntimeException("Exception building SessionFactory: " + ex.getMessage(), ex);
     }
    }

    public static final ThreadLocal session = new ThreadLocal();
    public static Session getSession() throws HibernateException {
     Session s = (Session) session.get();
     // 假如沒有一個可用的線程,開啟一個新 Session,
     if (s == null) {
      conn=DBConnectionManager.getConnection();
      s = sessionFactory.openSession(conn);
      session.set(s);
     }
     return s;
    }

    public static void closeSession() throws HibernateException {
     Session s = (Session) session.get();
     session.set(null);
     if (s != null)
      s.close();
     if(conn!=null)
      DBConnectionManager.returnConnection(conn);
     }
    }

      文中DBConnectionManager.getConnection()是一個DAO類,提供連接池的實現。

      我們使用這個con連接來創建一個 session ,sission是一個數據庫連接操作的會話周期,它提供了強大的管理數據的能力。

      以后我們在action的 execute 方法中就可以使用 Hi.getSession()來獲得一個會話支持。典型的應用如下:

    try{
     //開啟一個會話,并啟動事務回滾能力
     Session session = Hi.getSession();
     Transaction tx= session.beginTransaction();

     //查詢數據庫,使用HQL
     Query q = session.createQuery("from Topic as topic order by topic.id desc");
     q.setFirstResult(0);
     q.setMaxResults(5);

     //得到一個List類型的數據
     List newTopicList = q.list();

     // 業務處理
     NewTopicList ntlBean=new NewTopicList();
     ntlBean.setList(newTopicList);
     req.setAttribute("newtopiclist",ntlBean);

     //事務提交,記得關閉會話!
     tx.commit();
     Hi.closeSession();

    }//因為整個會話會拋出異常,所以需要用try--catch來包裹
    catch(HibernateException e){

     //日志記錄
     Log.error(e.toString());
    }

      其中的HQL 可以參考 hibernate 官方文檔來學習。
    posted on 2005-03-02 23:02 小魚兒 閱讀(704) 評論(0)  編輯  收藏 所屬分類: MVCThe Persistence Layer
    主站蜘蛛池模板: 四虎成人精品永久免费AV| 亚洲Av无码国产情品久久| 精品日韩亚洲AV无码一区二区三区| 国产精品久久久久久亚洲影视| 无码人妻一区二区三区免费| 亚洲成a人片毛片在线| 91精品国产免费| 亚洲欧洲日产v特级毛片| 免费精品无码AV片在线观看| 亚洲AV综合色区无码一区| 精品无码一级毛片免费视频观看 | 99精品视频在线观看免费专区 | 亚洲AV无码一区二区三区网址 | 一级a性色生活片久久无少妇一级婬片免费放 | 中文字幕无码免费久久| 亚洲无线码一区二区三区| 中文字幕免费在线看线人动作大片 | 亚洲精品高清国产一久久| 久久久久久AV无码免费网站下载 | 亚洲国产亚洲综合在线尤物| 性生交片免费无码看人| 亚洲伦理中文字幕| 成人a免费α片在线视频网站| 亚洲一区二区三区写真| 日韩精品电影一区亚洲| 两个人看的www免费| 亚洲网红精品大秀在线观看| 曰曰鲁夜夜免费播放视频| 亚洲日韩精品A∨片无码加勒比| 国产美女做a免费视频软件| 国产精品美女久久久免费 | 亚洲精品无码AV中文字幕电影网站| 一级做a爰片久久毛片免费陪 | 亚洲免费无码在线| 日韩免费在线观看视频| va天堂va亚洲va影视中文字幕| 免费观看的a级毛片的网站| 午夜不卡AV免费| 亚洲狠狠久久综合一区77777| 成年午夜视频免费观看视频| 亚洲第一视频在线观看免费|