一直自己搭建框架的意愿,跟着别人的模式走,对于真正体会开发显得不足。
经验有限,望高手指点。(好久都没有进行web开发,有点手生,呵呵,努力。)
第一步:首先下载需要的开发包。
1、ext开发包(ext-2.2.zip)。
下载地址:http://extjs.com/
2、struts开发包(struts-2.0.14-all.zip)。
下载地址:http://struts.apache.org/
3、spring开发包(spring-framework-2.5.6-with-dependencies.zip)
下载地址:http://www.springsource.org/
4、Hibernate开发包(hibernate-distribution-3.3.1.GA-dist.zip),对于它,还有相关包,可以根据需要选择。
下载地址:http://www.hibernate.org/
对于spring的网站,很奇怪,现在变成springsource.com,尝试了好多次才打开,不知道有什么限制。
另外环境搭建:eclipse3.3+tomcat6.0+mySql5.0。
第二步:建立工程。
这个不用多说。
首先在这里想问一个问题:在建立工程中有没有工程编码的设置?
这个在以后开发中遇到很多问题,如果有的话,尽量设置为UTF-8,而不是默认的那个ISO-8859-1,如果你的工程出现中文资源传问题,你就会发现这个的必要,当然这只是一点。
第三步:设置数据库编码。
在建立数据库是设置默认编码为UTF-8,假如不这样,在字段中出现中文时,会出错,开始是莫名其妙。首次使用mySQL还不是很熟悉,尽力学习吧。
OK,开始工程框架之旅。
最基本的东西就是配置(web.xml\struts.xml\spring.xml),还有就是引入包的问题。
先说引入包。
对于上struts:
struts2-core-2.0.14.jar:
核心包,必须。
ognl-2.6.11.jar:
OGNL的全称是Object Graph Navigation Language(对象图导航语言)。
xwork-2.0.7.jar:
与webwork相关,具体细节不是很清楚。
struts2-spring-plugin-2.0.14.jar:
与spring结合插件,可以不使用。
对于spring:
spring.jar:
核心包,必须。
对于hibernate:
hibernate3.jar:
核心包,必须。
antlr-2.7.6.jar:
ANother Tool for Language Recognition(antlr)。
commons-collections-3.1.jar:
集合类。
dom4j-1.6.1.jar:
XML配置和映射解释器。
javassist-3.4.GA.jar:
Javassist 字节码解释器。
jta-1.1.jar:
jta规范,当Hibernate使用jta的时候需要。
slf4j-api-1.5.2.jar以及slf4j-log4j12-1.5.0.jar:
新的日志记录模式,可替代log4j。
另外对于common的选择,则自己选择。
对于mySQL的连接,采用jtds,包括:
commons-pool-1.3.jar:
一个用于在Java程序中实现对象池化的组件。
jtds-1.2.2.jar:
JTDS JDBC Driver。
mysql-connector-java-5.0.3-bin.jar:
mysql驱动。
对于其余的jar,可以根据需要进行增加。
以尽量少用为原则,在这一点上,发现Hibernate做的比较好,在他的目录下明显放置required、optional、bytecode显而易见,可以自由选择,当然要了解具体你要做的事务。
好了,反正开发的原则是开始尽可能少加入jar包,然后根据需要逐步增加,在配置完基本的xml后,启动工程,看看提示的错误,在进行jar包的引入。
说句实话,对于这种框架组合最烦的就是jar包版本问题。
下面来看主要的配置文件,一般这个配置成功了,开发就变的简单了。
看web.xml配置文件:
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.FilterDispatcher </filter-class> <!-- <init-param> <param-name>config</param-name> <param-value> struts-default.xml,struts-plugin.xml,struts.xml,../config/struts/*.xml </param-value> </init-param> --> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <context-param> <param-name>log4jConfigLocation</param-name> <param-value>/WEB-INF/log4j.properties</param-value> </context-param> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/config/spring/*.xml</param-value> </context-param> <listener> <listener-class> org.springframework.web.util.Log4jConfigListener </listener-class> </listener> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
看struts配置文件:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <constant name="struts.locale" value="zh_CN" /> <constant name="struts.i18n.encoding" value="UTF-8" /> <constant name="struts.i18n.reload" value="true" /> <constant name="struts.custom.i18n.resources" value="messages" /> <constant name="struts.action.extension" value="do" /> <constant name="struts.configuration.xml.reload" value="true" /> <constant name="struts.enable.DynamicMethodInvocation" value="false" /> <include file="struts_admin.xml" /> </struts>
而对于实际处理的action,则采用分离xml配置。
这里是上边配置的struts_admin.xml的内容。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="admin" namespace="/admin" extends="struts-default"> <action name="login" class="userAction" method="login"> <result name="input"> /com/ebook/web/pages/failure.jsp </result> <result name="success"> /com/ebook/web/pages/user/list.jsp </result> </action> <action name="list" class="userAction" method="list"> <result name="input"> /com/ebook/web/pages/failure.jsp </result> <result name="success"> /com/ebook/web/pages/user/json.jsp </result> </action> <action name="layout" class="userAction" method="layout"> <result name="input"> /com/ebook/web/pages/failure.jsp </result> <result name="success"> /com/ebook/web/pages/user/layout.jsp </result> </action> <action name="json" class="userAction" method="json"> </action> <action name="ajax" class="userAction" method="ajax"> </action> </package> </struts>
看spring配置文件:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"> <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location" value="WEB-INF/config/database/database.properties" /> </bean> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="${database.driver}"></property> <property name="url" value="${database.url}"></property> <property name="username" value="${database.user}"></property> <property name="password" value="${database.password}"></property> </bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource"> <ref bean="dataSource" /> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect"> org.hibernate.dialect.SQLServerDialect </prop> <prop key="hibernate.cache.use_query_cache">false</prop> <prop key="hibernate.show_sql">true</prop> </props> </property> <property name="mappingResources"> <list> <value>com/ebook/user/model/xml/User.hbm.xml</value> </list> </property> </bean> <bean id="userDao" class="com.ebook.user.dao.impl.UserDaoImpl"> <property name="sessionFactory"> <ref bean="sessionFactory" /> </property> </bean> <bean id="userServer" class="com.ebook.user.server.impl.UserServerImpl"> <property name="dao"> <ref bean="userDao" /> </property> </bean> <bean name="userAction" class="com.ebook.user.action.UserAction"> <property name="server"> <ref bean="userServer" /> </property> </bean> </beans>
在配置中注意头部文件。
至于具体的实现业务,则分别放置于action、server、dao中。
action支持的struts的跳转,即视图数据获取、展示以及控制跳转。
server支持的spring,进行事务处理,支持业务逻辑。
dao支持Hibernate,进行数据库操作,即所谓的持久层。
另外,增加model,及数据模型,将数据对象转换为java对象,Hibernate支持。
附带一个配置文件。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.ebook.user.model">
<class name="User" table="t_user">
<id name="id" type="java.lang.String" column="USERID"></id>
<property name="name" type="java.lang.String">
<column name="USERNAME" />
</property>
<property name="pwd" type="java.lang.String">
<column name="PWD" />
</property>
<property name="departid" type="java.lang.String">
<column name="DEPARTID" />
</property>
<property name="email" type="java.lang.String">
<column name="EMAIL" />
</property>
<property name="state" type="java.lang.String">
<column name="STATE" />
</property>
</class>
</hibernate-mapping>
至于具体业务模块是否在此细分问题,看情况决定。
java代码的写作风格,看自己情况了。
组织结构就上面所述。
前页面处理采用ext,由于没有经验,学习中。
现在的感觉,用上了ext,struts骄傲的标签完全没有用,对于国际化支持问题,ext不知道怎么体现。
struts骄傲的标签,没用上。Form数据收集整理还没来得及想详看。对ActionSupport进行研究。
spring骄傲的事务管理,简单业务也是用不上。至于IOC,必不可少。
Hibernate骄傲的那么多技术,不知道能用到多少。对HibernateDaoSupport进行研究。
深入吧,研究中……
慢工出细活。
说句闲话:思路很重要,思想更重要。原理很重要,实现是其次。