BookStore\src\main\webapp\WEB-INF
applicationContext.xml
<?xml version="1.0"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"> <!-- SessionFactory --> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <property name="dataSource"> <ref bean="dataSource"/> </property> <property name="annotatedClasses"> <list> <value>bookstore.pbean.TBook</value> <value>bookstore.pbean.TCustomer</value> <value>bookstore.pbean.TOrder</value> <value>bookstore.pbean.TOrderDetail</value> </list> </property> <property name="annotatedPackages"> <list> <value>bookstore.pbean</value> </list> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.format_sql">true</prop> </props> </property> </bean> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName"> <value>org.postgresql.Driver</value> </property> <property name="url"> <value>jdbc:postgresql://localhost:5432/BookStore</value> </property> <property name="username"> <value>okada</value> </property> <property name="password"> <value>okada</value> </property> </bean> <!-- TransactionManager --> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory"><ref local="sessionFactory" /></property> </bean> <!-- enable the configuration of transactional behavior based on annotations --> <tx:annotation-driven transaction-manager="transactionManager"/> <!-- DAO --> <bean id="BookDAOBId" class="bookstore.dao.hibernate.BookDAOImpl"> <property name="sessionFactory"> <ref local="sessionFactory" /> </property> </bean> <bean id="CustomerDAOBId" class="bookstore.dao.hibernate.CustomerDAOImpl"> <property name="sessionFactory"> <ref local="sessionFactory" /> </property> </bean> <bean id="OrderDAOBId" class="bookstore.dao.hibernate.OrderDAOImpl"> <property name="sessionFactory"> <ref local="sessionFactory" /> </property> </bean> <bean id="OrderDetailDAOBId" class="bookstore.dao.hibernate.OrderDetailDAOImpl"> <property name="sessionFactory"> <ref local="sessionFactory" /> </property> </bean> <!-- Logic Layer --> <bean id="LogicCustomerBId" class="bookstore.logic.CustomerLogicImpl"> <property name="customerdao"> <ref local="CustomerDAOBId" /> </property> </bean> <bean id="LogicBookBId" class="bookstore.logic.BookLogicImpl"> <property name="bookdao"> <ref local="BookDAOBId" /> </property> </bean> <bean id="LogicOrderBId" class="bookstore.logic.OrderLogicImpl"> <property name="bookdao"> <ref local="BookDAOBId" /> </property> <property name="customerdao"> <ref local="CustomerDAOBId" /> </property> <property name="orderdao"> <ref local="OrderDAOBId" /> </property> <property name="orderdetaildao"> <ref local="OrderDetailDAOBId" /> </property> </bean> <!-- Struts Action --> <bean name="/CreateUser" class="bookstore.action.CreateUserAction"> <property name="customerLogic"> <ref local="LogicCustomerBId" /> </property> </bean> <bean name="/Login" class="bookstore.action.LoginAction"> <property name="customerLogic"> <ref local="LogicCustomerBId" /> </property> <property name="bookLogic"> <ref local="LogicBookBId" /> </property> </bean> <bean name="/AddToCartAction" class="bookstore.action.AddToCartAction"> <property name="bookLogic"> <ref local="LogicBookBId" /> </property> </bean> <bean name="/CheckoutAction" class="bookstore.action.CheckoutAction"> <property name="bookLogic"> <ref local="LogicBookBId" /> </property> </bean> <bean name="/OrderAction" class="bookstore.action.OrderAction"> <property name="orderLogic"> <ref local="LogicOrderBId" /> </property> <property name="customerLogic"> <ref local="LogicCustomerBId" /> </property> </bean> <bean name="/SearchAction" class="bookstore.action.SearchAction"> <property name="bookLogic"> <ref local="LogicBookBId" /> </property> </bean> </beans>
struts-config.xml
<?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" "http://struts.apache.org/dtds/struts-config_1_3.dtd"> <struts-config> <form-beans> <form-bean name="CreateUserActionName" type="bookstore.action.bean.CreateUserActionFormBean" /> <form-bean name="LoginActionName" type="bookstore.action.bean.LoginActionFormBean" /> <form-bean name="AddToCartActionName" type="bookstore.action.bean.AddToCartActionFormBean" /> <form-bean name="SearchActionName" type="bookstore.action.bean.SearchActionFormBean" /> </form-beans> <global-forwards> <forward name="illegalSession" path="/sessionError.vm" /> </global-forwards> <action-mappings> <action path="/CreateUser" type="org.springframework.web.struts.DelegatingActionProxy" name="CreateUserActionName" scope="request" validate="true" input="/createAccount.vm" > <forward name="UserCreated" path="/index.vm" /> <forward name="illegalCreateUser" path="/createAccount.vm" /> </action> <action path="/Login" type="org.springframework.web.struts.DelegatingActionProxy" name="LoginActionName" scope="request" > <forward name="LoginSuccess" path="/BookStore.vm" /> <forward name="illegalLogin" path="/index.vm" /> </action> <action path="/AddToCartAction" type="org.springframework.web.struts.DelegatingActionProxy" name="AddToCartActionName" scope="request" > <forward name="Continue" path="/BookStore.vm" /> </action> <action path="/CheckoutAction" type="org.springframework.web.struts.DelegatingActionProxy" name="CheckoutActionName" scope="request" > <forward name="ToCheck" path="/Check.vm" /> <forward name="illegalCheckout" path="/BookStore.vm" /> </action> <action path="/OrderAction" type="org.springframework.web.struts.DelegatingActionProxy" name="OrderActionName" scope="request" > <forward name="OrderSuccess" path="/Order.vm" /> </action> <action path="/SearchAction" type="org.springframework.web.struts.DelegatingActionProxy" name="SearchActionName" scope="request" > <forward name="SearchSuccess" path="/BookStore.vm" /> </action> </action-mappings> <message-resources parameter="ApplicationResources" key="org.apache.struts.action.MESSAGE" /> <message-resources parameter="MessageResources" /> <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn"> <set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml"/> </plug-in> </struts-config>
toolbox.xml
<?xml version="1.0"?> <toolbox> <tool> <key>math</key> <scope>application</scope> <class>org.apache.velocity.tools.generic.MathTool</class> </tool> <tool> <key>link</key> <scope>request</scope> <class>org.apache.velocity.tools.struts.StrutsLinkTool</class> </tool> <!-- ordinarily the SecureLinkTool would simply replace the StrutsLinkTool if SSL Ext. is in use - in that case the key would be 'link' but it's 'slink' here to distinguish between the two. --> <tool> <key>slink</key> <scope>request</scope> <class>org.apache.velocity.tools.struts.SecureLinkTool</class> </tool> <tool> <key>text</key> <scope>request</scope> <class>org.apache.velocity.tools.struts.MessageTool</class> </tool> <tool> <key>errors</key> <scope>request</scope> <class>org.apache.velocity.tools.struts.ErrorsTool</class> </tool> <tool> <key>messages</key> <scope>request</scope> <class>org.apache.velocity.tools.struts.ActionMessagesTool</class> </tool> <tool> <key>form</key> <scope>request</scope> <class>org.apache.velocity.tools.struts.FormTool</class> </tool> <tool> <key>tiles</key> <scope>request</scope> <class>org.apache.velocity.tools.struts.TilesTool</class> </tool> <tool> <key>validator</key> <scope>request</scope> <class>org.apache.velocity.tools.struts.ValidatorTool</class> </tool> </toolbox>
velocity.properties
default.contentType=text/html; charset=Windows-31J input.encoding=Windows-31J output.encoding=Windows-31J
web.xml
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app> <display-name>BookStore Application</display-name> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <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> <servlet-name>velocity</servlet-name> <servlet-class>org.apache.velocity.tools.view.servlet.VelocityViewServlet</servlet-class> <init-param> <param-name>org.apache.velocity.toolbox</param-name> <param-value>/WEB-INF/toolbox.xml</param-value> </init-param> <init-param> <param-name>org.apache.velocity.properties</param-name> <param-value>/WEB-INF/velocity.properties</param-value> </init-param> <load-on-startup>10</load-on-startup> </servlet> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>velocity</servlet-name> <url-pattern>*.vm</url-pattern> </servlet-mapping> </web-app>
BookStore\src\main\webapp
BookStore.vm
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Windows-31J"> </head> <body> <center> <h2>商品一覧</h2> </center> <br> <form method="post" action="$link.setAction( "/SearchAction" )"> 検索: <input type="text" name="keyword"/> <input type="submit" value="検索" /> </form> #if( $messages.exist() ) <br> <font color="red"> $messages.get( "productalart" ) </font> <br> #end <form method="post" action="$link.setAction( "/AddToCartAction" )"> <table border="1"> #foreach ( $item in $ProductListView ) <tr> <th rowspan="2"> <input type="checkbox" name="selecteditems" value="$item.isbn" #if( $item.selected ) checked #end > </th> <td colspan="3"> $item.title </td> </tr> <tr> <td> $item.author </td> <td> $item.publisher </td> <td> $item.price 円 </td> </tr> #end </table> <br> <input type="submit" value="カートに追加" /> </form> <form method="post" action="$link.setAction( "/CheckoutAction" )"> <input type="submit" value="商品購入" /> </form> </body> </html>
Check.vm
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Windows-31J"> </head> <body> <center> <h2>購入商品</h2> </center> <br><br> 以下が購入する商品と合計です。 <br> <table border="1"> #foreach ( $item in $ItemsToBuy.selecteditems ) #if( $item.selected ) <tr> <td> $item.title </td> <td> $item.author </td> </tr> <tr> <td> $item.publisher </td> <td> $item.price </td> </tr> #end #end </table> <br> <br> 合計: $ItemsToBuy.total 円 <form method="post" action="$link.setAction( "/OrderAction" )"> <input type="submit" value="注文する" /> </form> </body> </html>
createAccount.vm
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Windows-31J"> </head> <body> <center> <h2>アカウント作成</h2> </center> <form action="$link.setAction( "/CreateUser" )" method="post"> 氏名: <input type="text" name="name" /><br> E-Mail: <input type="text" name="email" /><br> ログイン名: <input type="text" name="account" /><br> パスワード: <input type="password" name="passwd" /><br> パスワード(確認): <input type="password" name="passwd2" /><br> <input type="submit" value="アカウント作成" /> <input type="reset" value="リセット"/> </form> #if( $messages.exist() ) <br> <font color="red"> $messages.get( "illegalcreateuser" ) </font> <br> #end #if( $errors.exist() ) <br> <font color="red"> $errors.get( "illegalcreateuser" ) </font> <br> #end <a href="$link.setRelative("/index.vm" )">トップへ</a> </body> </html>
index.vm
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Windows-31J"> </head> <body> <center> <h2>ログイン</h2> </center> <form action="$link.setAction( "/Login" )" method="post"> ログイン名: <input type="text" name="account" /><br> パスワード: <input type="password" name="passwd" /><br> <input type="submit" value="ログイン" /> <input type="reset" value="リセット"/> <br> #if( $messages.exist() ) <font color="red"> $messages.get( "illegallogin" ) </font> #end <br> アカウントを作成していない人は <a href="$link.setRelative( "/createAccount.vm" )">こちら</a> </form> </body> </html>
Order.vm
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Windows-31J"> </head> <body> <center> <h2>注文確認</h2> </center> <br><br> 以下のとおり、注文を受け付けました。 <br> 商品: <br> <table border="1"> #foreach ( $item in $ItemsToBuy.selecteditems ) #if( $item.selected ) <tr> <td> $item.title </td> <td> $item.author </td> </tr> <tr> <td> $item.publisher </td> <td> $item.price </td> </tr> #end #end </table> <br> <br> 合計: $ItemsToBuy.total 円 <br> <br> <br> お客様情報 <br> <br> UserID: $Customer.uid <br> 氏名: $Customer.name <br> E-Mail: $Customer.email <br> <br> <a href="$link.setRelative( "/index.vm" )">トップに戻る</a> </body> </html>
sessionError.vm
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Windows-31J"> </head> <body> <center> <h2>セッション エラー</h2> </center> <br> <br> セッション情報が不正です。アクセスが不正か、セッションが タイムアウトしました。 <br> <br> <a href="$link.setRelative( "/index.vm" )">トップ</a>に戻る。 </body> </html>
BookStore\src\test\java
(Null)
BookStore\target\classes
(生成的classes,略)
BookStore\target\test-classes
(Null)
BookStore\target
mvn-eclipse-cache.properties
#Temporary index for unavailable sources and javadocs #Sun Dec 07 21:28:00 JST 2008 junit\:junit\:3.8.1\:javadoc=true junit\:junit\:3.8.1\:sources=true
(欲知前事如何,请见一 )
代码来自日本的技术图书 :http://www.shuwasystem.co.jp/products/7980html/2197.html