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=" del " type ="java.lang.Integer[]"/>
</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()方法构成。
三.流程