StrutsSample
概要分析
更多详情请参见:我的博客 我的生活
说明:具体案例的分析,详细的分析在讲解的过程中再阐述(这份案例大约在04年已经完成,所以现在看起来难免有些不符合时代潮流,领会精神即可)
概要
主要针对表department操作,创建、更新、删除、选择
层次结构说明
共分为四层:mid、midimpl、application、presentation
一般开发基于MVC结构的应用来说,层次的划分是很重要的,三层结构、于至于多层结构的演变有其一定的道理。MVC本身就是模型、视图、控制的层次划分,这样有助于职能的明确,加快开发效率,最重要的是系统的把握度和可扩展的能力。
当然这里的四层划分,不是绝对的,根据不同的项目可以有不同的调整,只是作为一个参考,这是一个实际项目中保留下来的,有其一定的科学性。
mid:接口和抽象类部分,是相对系统底层的功能的集中体现,相对共通性部分
midimpl:是对mid层的具体现实
application:具体业务逻辑、模型
presentation:表述层,struts的具体实现部分
具体为何如此划分层次,会具体讲解,也请大家考虑一下。
下面具体讲解StrutsSample的各个组成
类
mid
DAOFactory:是采用了工厂模式来实现的,其间又有DAO模式。
功能:得到DAOFactoryImpl(DAOFactory的具体实现)实例,并提供了两个abstract
方法,在DAOFactoryImpl必须得以实现。
DepartmentDAO:操作表department的接口,定义了一些对表的基本操作
midimpl
DAOFactoryImpl: DAOFactory的具体实现,在DAOFactory中的两个abstract方法也得以实
现:init()方法,取得数据源。getDepartmentDAO()方法,得到接口DepartmentDAO的具体实例DepartmentDAOImpl。除了要必须实现的方法外,还定义了getConnection()方法,以取得对数据源的连接。
DepartmentDAOImpl:接口DepartmentDAO的具体实现,表的操作具体实现。
application
Department:定义了一个数据bean,可以对照数据表department,发现是对应它的一个对
象的实现。
DepartmentBO:定义了这个应用程序中所需要的业务逻辑,比如selectDepartment(String
depid)方法,根据一个部门的ID来获得该部门的详细数据、createDepartment()、updateDepartment()、
deleteDepartment()分别对应创建、更新、删除
presentation
DepartmentForm:Form
Bean表单,收集JSP页面上的元素。可以发现它和application层的Department类是类似的,因为Form表单所收集的数据真好是对
应数据库中的字段的。(这只是个比较特殊的例子而已,开发中不一定都是这样的,这里同时引申出一个问题,居然两个类是类似的,为什么不合并一下,就用其中
的一个类的,这样不是还可以节省一个类吗?)
CreateDepartmentAction:创建部门的Action类
DeleteDepartmentAction:删除部门的Action类
ListDepartmentAction:所有部门的一个列表
SelectDepartmentAction:选择一个部门
UpdateDepartmentAction:更新部门的Action类
资源文件
ApplicationResources.properties
JSP
index.jsp
Create
–register.jsp
–success.jsp
–failure.jsp
list
–departmentList.jsp
–failure.jsp
update
–update.jsp
–failure.jsp
struts-config.xml
<?xml version=”1.0″ encoding=”ISO-8859-1″ ?>
<!DOCTYPE struts-config PUBLIC
“-//Apache Software Foundation//DTD Struts Configuration 1.1//EN”
“http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd”>
<struts-config>
<!– ========== Form Bean Definitions =================================== –>
<form-beans>
<!– Logon form bean –>
<form-bean name=”departmentForm”
type=”cn.haose.struts.presentation.DepartmentForm”>
</form-bean>
</form-beans>
<!– ========== Action Mapping Definitions ============================== –>
<action-mappings>
<action path=”/create”
type=”cn.haose.struts.presentation.CreateDepartmentAction”
name=”departmentForm”
scope=”request”
input=”/create/register.jsp”>
<forward name=”success” path=”/create/success.jsp”/>
<forward name=”failure” path=”/create/failure.jsp”/>
</action>
<action path=”/list”
type=”cn.haose.struts.presentation.ListDepartmentAction”
>
<forward name=”success” path=”/list/departmentList.jsp”/>
<forward name=”failure” path=”/list/failure.jsp”/>
</action>
<action path=”/select”
type=”cn.haose.struts.presentation.SelectDepartmentAction”
>
<forward name=”success” path=”/update/update.jsp”/>
<forward name=”failure” path=”/update/failure.jsp”/>
</action>
<action path=”/delete”
type=”cn.haose.struts.presentation.DeleteDepartmentAction”
>
<forward name=”success” path=”/list.do”/>
<forward name=”failure” path=”/update/failure.jsp”/>
</action>
<action path=”/update”
type=”cn.haose.struts.presentation.UpdateDepartmentAction”
name=”departmentForm”
scope=”request”
input=”/update/update.jsp”>
<forward name=”success” path=”/list.do”/>
<forward name=”failure” path=”/update/failure.jsp”/>
</action>
</action-mappings>
<!– ========== Message Resources Definitions =========================== –>
<message-resources parameter=”ApplicationResources”/>
</struts-config>
web.xml.
<?xml version=”1.0″ encoding=”UTF-8″?>
<!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 id=”WebApp”>
<display-name>sample</display-name>
<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>
<load-on-startup>1</load-on-startup>
</servlet>
<!– Action Servlet Mapping –>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.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>
<taglib>
<taglib-uri>/WEB-INF/struts-logic.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-logic.tld</taglib-location>
</taglib>
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/SAMPLE</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>
数据源
Tomcat
中的
server.xml
<Context path=”/sample” docBase=”sample” debug=”0″
reloadable=”true” crossContext=”true”>
<Resource name=”jdbc/SAMPLE”
auth=”Container”
type=”javax.sql.DataSource”/>
<ResourceParams name=”jdbc/SAMPLE”>
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>oracle.jdbc.OracleDriver</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:oracle:thin:@hao-se:1521:haose</value>
</parameter>
<parameter>
<name>username</name>
<value>test1</value>
</parameter>
<parameter>
<name>password</name>
<value>test1</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>10</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>1</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>-1</value>
</parameter>
</ResourceParams>
</Context>
最后附上运行画面
Index.jsp
Create register.jsp
Create success.jsp
Create failure.jsp
list departmentList.jsp
list failure.jsp
update update.jsp