Struts+Hibernate編程總結(初級篇)
一.配置文件
Struts下有兩個關鍵的配置文件:
1. web.xml
該配置文件負責整個BS結構解決方案的基本配置參數。樣例如下:
<web-app>
<!-- Action Servlet Configuration -->
<servlet>
<servlet-name>actionServlet</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
</servlet>
<!-- Action Servlet Mapping -->
<servlet-mapping>
<servlet-name>actionServlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<!-- The Welcome File List -->
<welcome-file-list>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<!-- Struts Tag Library Descriptors -->
<taglib>
<taglib-uri>/WEB-INF/struts-bean.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/struts-html.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-html.tld</taglib-location>
</taglib>
</web-app>
解釋:a) <servlet></servlet> 聲明用到的Servlet類的別名以及其路徑。
b)<servlet-mapping></servlet-mapping> 聲明URL的文件後綴與1.中的別名之間的映射關係。
c)<welcome-file-list></welcome-file-list> 聲明解決方案的默認起始頁。
d)<taglib></taglib> 聲明本解決方案用到的標籤庫(包括自定義標籤和第三方標籤庫)
2. struts-config.xml
該文件配置Struts應用的各項配置參數,樣例如下:
<struts-config
<form-beans>
<form-bean name="SearchForm"
type="org.apache.struts.action.DynaActionForm">
<form-property name="sortId" type ="java.lang.Integer"/>
<form-property name="keyword" type ="java.lang.String"/>
<form-property name="pageId" type ="java.lang.Integer"/>
</form-bean>
<form-bean name="LoginForm"
type="org.apache.struts.validator.DynaValidatorForm">
<form-property name="user_name" type="java.lang.String"/>
<form-property name="user_pass" type="java.lang.String"/>
</form-bean>
<form-bean name="RegistForm"
type="org.apache.struts.validator.DynaValidatorForm">
<form-property name="username" type ="java.lang.String"/>
<form-property name="password" type ="java.lang.String"/>
<form-property name="password2" type ="java.lang.String"/>
<form-property name="name" type ="java.lang.String"/>
<form-property name="tel" type ="java.lang.String"/>
<form-property name="address" type ="java.lang.String"/>
<form-property name="zip" type ="java.lang.String"/>
<form-property name="email" type ="java.lang.String"/>
</form-bean>
<form-bean name="ProductIdForm"
type="org.apache.struts.action.DynaActionForm">
<form-property name="productId" type ="java.lang.Integer"/>
</form-bean>
<form-bean name="ShopCartForm"
type="org.apache.struts.action.DynaActionForm">
<form-property name="count" type ="java.lang.Integer[]"/>
<form-property name="
</form-bean>
<form-bean name="OrderForm"
type="org.apache.struts.validator.DynaValidatorForm">
<form-property name="realname" type ="java.lang.String"/>
<form-property name="address" type ="java.lang.String"/>
<form-property name="zip" type ="java.lang.String"/>
<form-property name="tel" type ="java.lang.String"/>
<form-property name="email" type ="java.lang.String"/>
<form-property name="payment" type ="java.lang.String"/>
<form-property name="memo" type ="java.lang.String"/>
</form-bean>
<form-bean name="OrderNoForm"
type="org.apache.struts.action.DynaActionForm">
<form-property name="orderNo" type ="java.lang.String"/>
</form-bean>
</form-beans>
<global-forwards>
<forward name="toIndex" path="/index.jsp"/>
<forward name="toListMain" path="/listMain.jsp"/>
<forward name="toWrong" path="/wrong.jsp"/>
<forward name="toSuccess" path="/loginOkLeft.jsp"/>
<forward name="toRegistRight" path="/right.jsp"/>
<forward name="toDetail" path="/detail.jsp"/>
<forward name="toShopCart" path="/basket.jsp"/>
<forward name="toShopCartOk" path="/basketOk.jsp"/>
<forward name="toOrderOk" path="/orderOk.jsp"/>
<forward name="toOrderList" path="/orderDisplay.jsp"/>
</global-forwards>
<action-mappings>
<action path="/index" type="cn.com.shoppingonline.FirstAction" input="/wrong.jsp" />
<action path="/search" type="cn.com.shoppingonline.SearchAction" name="SearchForm" scope="request" input="/wrong.jsp" />
<action path="/regist" type="cn.com.shoppingonline.RegistAction" name="RegistForm" scope="request" input="/wrong.jsp" />
<action path="/login" type="cn.com.shoppingonline.LoginAction" name="LoginForm" scope="request" input="/wrong.jsp" />
<action path="/detail" type="cn.com.shoppingonline.DetailAction" name="ProductIdForm" scope="request" input="/wrong.jsp" />
<action path="/buy" type="cn.com.shoppingonline.BuyAction" name="ProductIdForm" scope="request" input="/wrong.jsp" />
<action path="/updateShopCart" type="cn.com.shoppingonline.UpdateShopCartAction" name="ShopCartForm" scope="request" input="/wrong.jsp" />
<action path="/createOrder" type="cn.com.shoppingonline.CreateOrderAction" name="OrderForm" scope="request" input="/wrong.jsp" />
<action path="/orderList" type="cn.com.shoppingonline.OrderListAction" input="/wrong.jsp" />
<action path="/delOrder" type="cn.com.shoppingonline.DelOrderAction" name="OrderNoForm" scope="request" input="/wrong.jsp" />
<action path="/modifyUserInfo" type="cn.com.shoppingonline.ModifyUserInfoAction" name="RegistForm" scope="request" input="/wrong.jsp" />
<action path="/clearShopCart" type="cn.com.shoppingonline.ClearShopCartAction" input="/wrong.jsp" />
<action path="/exit" type="cn.com.shoppingonline.ExitAction" input="/wrong.jsp" />
</action-mappings>
<controller processorClass="cn.com.shoppingonline.MyRequestProcessor" />
<message-resources parameter="cn.com.shoppingonline.MyResource"/> <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property
property="pathnames"
value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
<set-property property="stopOnFirstError" value="false"/>
</plug-in>
</struts-config>
解釋:a) <form-beans></form-bean> 聲明struts內用到的ActionForm,內嵌多個<form-bean></form-bean>,每個formbean內又定義了form中的若干屬性
b) <global-forwards></global-forwards> 聲明轉向標識,主要用於程序中根據需要觸發相應的事件(在name中定義),做出相關的轉向(在path中定義)。內嵌多個forward標籤。
C)<action-mappings></action-mappings>下面有多個action標籤,聲明action類與actionform類的對應關係,每個action標籤主要用到三個屬性:path屬性供頁面form標籤的action屬性調用觸發,在form內部的table內需要與actionform建立映射關係的屬性必須要添加name屬性;type屬性定義所用到的action所在的包位置;name屬性定義與action對應的actionform,這要與<form-beans>標籤內的<form-bean>定義的名稱對應。Input屬性定義瞭如果執行失敗所跳轉的頁面。Scope屬性給出了業務的處理範圍(request,session?)
d) <plug-in></plug-in>聲明struts所用到的各種組件,例如實例中的認證組件。其下用<set-property/> 標籤設置組件的屬性。
Hibernate下有兩個關鍵的配置文件:
1. 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-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">org.gjt.mm.mysql.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost/test</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">zgy01</property>
<property name="hibernate.connection.pool_size">100</property>
<property name="show_sql">false</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- Mapping files -->
<mapping resource="model.hbm.xml"/>
</session-factory>
</hibernate-configuration>
在<session-factory>標籤下主要用<property>標籤和<mapping>來設置解決方案中數據庫連接參數和映射文件model.hbm.xml
2. model.hbm.xml
該文件主要配置Hibernate中的pojo類與數據庫表中的映射關係(包括數據庫中的主鍵、屬性與pojo類中的屬性之間的對映關係)
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="cn.com.shoppingonline">
<class name="cn.com.shoppingonline.Member"
table="member"
discriminator-value="C">
<id name="id">
<generator class="increment"/>
</id>
<property name="username"/>
<property name="password"/>
<property name="realname"/>
<property name="tel"/>
<property name="address"/>
<property name="zip"/>
<property name="email"/>
</class>
<class name="cn.com.shoppingonline.Sort"
table="sort"
discriminator-value="C">
<id name="id">
<generator class="increment"/>
</id>
<property name="name"/>
</class>
<class name="cn.com.shoppingonline.Product"
table="product"
discriminator-value="C">
<id name="id">
<generator class="increment"/>
</id>
<property name="sortid"/>
<property name="name"/>
<property name="price"/>
<property name="saleprice"/>
<property name="descript"/>
<property name="contents"/>
<property name="saledate"/>
<property name="salecount"/>
<property name="image"/>
</class>
<class name="cn.com.shoppingonline.Order"
table="orders"
discriminator-value="C">
<id name="id">
<generator class="increment"/>
</id>
<property name="orderno"/>
<property name="userid"/>
<property name="realname"/>
<property name="address"/>
<property name="zip"/>
<property name="tel"/>
<property name="payment"/>
<property name="email"/>
<property name="memo"/>
<property name="price"/>
<property name="time"/>
<property name="tag"/>
</class>
<class name="cn.com.shoppingonline.ShopCart"
table="shopcart"
discriminator-value="C">
<id name="id">
<generator class="increment"/>
</id>
<property name="orderid"/>
<many-to-one name="product" class="Product" column="productid"/>
<property name="count"/>
<property name="price"/>
</class>
</hibernate-mapping>
<hibernate-mapping>標籤用<class>子標籤來簡歷pojo類與數據庫表之間的一一映射關係<id>指示主鍵,<generator>指示主鍵的遞增方式,<property>指示數據庫中屬性名與pojo類中的屬性名的對映關係。
二.關鍵類
HibernateUtil類,用來建立一次數據庫連接操作的session對象(通過sessionFactory來獲取)。
各個pojo類,由私有屬性,以及對映屬性的getXXX(),setXXX()方法構成。
三.流程