第一步,新建基础工程环境:
1、在myEclipse下新建一个web工程,命名为s2siDemo,找到src目录建一个包名为:com.companyName.ssiDemo.user和user包目录下的action、dao、manager、pojo包各一个。
再分别建四个类,如UserAction/UserDao/UserManager/UserBean。
另外再在action目录下建一个ajax包即:com. companyName .ssiDemo.user.action.ajax 后续添加dwr有用。
2、到apace官网下载struts2系列jar包、spring2.0.jar和ibatis.jar包各一个,还有dwr3.jar;放到工程的WebRoot-->WEB-INF-->lib目录下;
3、运行环境:jdk1.6+tomacat6
4、新建一个表用来测试:T_DEMOUSER包含字段:userId, username,pass,sex,address,pictureUri
5、数据库用户名密码:demo/demo
第二步,配置struts2
1、在src目录下新建struts.xml。输入代码:
<!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.ui.theme" value="simple"></constant>
<!--Struts2集成Spring:所有action对象有Spring来负责创建 -->
<constant name="struts.objectFactory" value="spring" />
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<package name="userpackage" namespace="/user" extends="struts-default">
<action name="*User" class="userAction" method="{1}">
<result name="LIST">/user/userInfo.jsp</result>
<result name="add">/user/addUser.jsp</result>
<result name="edit">/user/editUser.jsp</result>
</action>
</package>
</struts>
2、web.xml文件中配置struts2,代码如下:
<!-- struts2配置 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
第三步:配置spring
1、在WEB-INF目录下新建一个文件夹properties,再在该文件夹下新建两个文件,分别为config.properties、connect.properties用来填连接池配置
-------------------------------------------------
config.properties代码如下:
------------------------------------------------
fontSize=16
fontSizeQuery=16
pageSize=10
pageSizeTemplate=10
columnShowSize=20
queryTemplateOnFirstLoadEnable=true
timeStampPattern=###.##
phoneNoLength=6
teleCodeEnable=false
showCallerEnable=true
fixedPhoneNo=114
#sms size
smsLength=70
sendMessage=true
startDelay=10000
interval=30000
buffer_startDelay=10000
buffer_interval=20000
dateFormat=yyyy-MM-dd HH:mm:ss
----------------------------------------------------------------------------------------------
connect.properties中输入如下代码:(我这里连的是oracle9i数据库,可以根据实际情况更改driverClassName和url)
------------------------------------------------------------------------------------------------
jdbc_s2siDemo.driverClassName=oracle.jdbc.driver.OracleDriver
jdbc_s2siDemo.url=jdbc:oracle:thin:@127.0.0.1:1521:orcl##根据实际情况修改路径
jdbc_s2siDemo.username=demo
jdbc_s2siDemo.password=demo
---------------------------------------------------------------------------------------------
2、在WEB-INF目录下新建applicationContext-action.xml和applicationContext-dao.xml两个xml文件
--------------------------------------
applicationContext-action.xml代码如下:
-------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>/WEB-INF/properties/config.properties</value>
</list>
</property>
</bean>
<!--注入Struts 2的action -->
<bean id="userAction"
class="com. companyName .ssiDemo.user.action.UserAction">
<property name="userManager">
<ref bean="userManager" />
</property>
</bean>
<!-- lucene user表涉及的注入 -->
<bean id="gateWayService"
class="com. companyName .ssiDemo.lucene.GateWayService">
<property name="userService">
<ref bean="userService" />
</property>
</bean>
<bean id="userService"
class="com. companyName .ssiDemo.lucene.user.service.UserService">
<property name="userCtrlBo">
<ref bean="userCtrlBo" />
</property>
<property name="userManager">
<ref bean="userManager" />
</property>
</bean>
</beans>
------------------------------------------------
applicationContext-dao.xml代码如下:
-----------------------------------------------
<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>/WEB-INF/properties/connect.properties</value>
<value>/WEB-INF/properties/config.properties</value>
</list>
</property>
</bean>
<!-- org.apache.commons.pool.impl.GenericObjectPool -->
<bean id="ssiDemoDataSource"
class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName">
<value>${jdbc_s2siDemo.driverClassName}</value>
</property>
<property name="url">
<value>${jdbc_s2siDemo.url}</value>
</property>
<property name="username">
<value>${jdbc_s2siDemo.username}</value>
</property>
<property name="password">
<value>${jdbc_s2siDemo.password}</value>
</property>
<property name="maxActive">
<value>40</value>
</property>
<property name="maxIdle">
<value>10</value>
</property>
<property name="maxWait">
<value>18000</value>
</property>
<property name="defaultAutoCommit">
<value>false</value>
</property>
</bean>
<bean id="sqlMapClient"
class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation">
<value>/WEB-INF/sql-map-config.xml</value>
</property>
<property name="dataSource">
<ref local="ssiDemoDataSource" />
</property>
</bean>
<!-- 用户模块 -->
<bean id="userManager"
class="com. companyName .ssiDemo.user.manager.UserManager">
<property name="userDao">
<ref local="userDao" />
</property>
<property name="transactionManager">
<ref local="transactionManager" />
</property>
</bean>
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="ssiDemoDataSource" />
</bean>
<bean id="userDao" class="com. companyName .ssiDemo.user.dao.UserDAO">
<property name="sqlMapClient">
<ref bean="sqlMapClient" />
</property>
</bean>
<bean id="userCtrlBo"
class="com. companyName .ssiDemo.lucene.user.bo.UserCtrlBo">
<property name="userCtrlDao">
<ref bean="userCtrlDao" />
</property>
<property name="transactionManager">
<ref local="transactionManager" />
</property>
</bean>
<bean id="userCtrlDao"
class="com. companyName .ssiDemo.lucene.user.dao.UserCtrlDao">
<property name="sqlMapClient">
<ref bean="sqlMapClient" />
</property>
</bean>
</beans>
//
3、接下来还得再web.xml文件中配置spring的读取路径和处理中文乱码、session失效时间,代码如下:
------------------------------------------------------
<!-- 指定spring的配置文件 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext-*.xml</param-value>
</context-param>
<!--2.对Spring容器进行实例化 -->
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<!--以下是由Spring提供的filter来解决Struts乱码问题 -->
<filter>
<filter-name>encoding</filter-name>
<filter-class>
org.springframework.web.filter.CharacterEncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- session失效时间设置为20分钟 -->
<session-config>
<session-timeout>20</session-timeout>
</session-config>
第四步,配置ibatis
1、在WEB-INF目录下新建sql-map-config.xml文件
录入如下代码:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMapConfig
PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"
"http://www.ibatis.com/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
<sqlMap resource="com/zrar/ssiDemo/user/dao/user.xml" />
<sqlMap resource="com/zrar/ssiDemo/lucene/user/dao/userLucene.xml" />
</sqlMapConfig>
2、在com.companyName.s2siDemo.user.dao包下新建user.xml配置文件,代码如下:
------------------这块就是ibatis对user表sql语句的封装了--------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap
PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN"
"http://www.ibatis.com/dtd/sql-map-2.dtd">
<sqlMap namespace="User">
<resultMap class="com.zrar.ssiDemo.user.pojo.UserBean"
id="userResult">
<result property="userId" column="userId" />
<result property="username" column="username" />
<result property="pass" column="pass" />
<result property="sex" column="sex" />
<result property="address" column="Address" />
<result property="pictureUri" column="pictureUri"/>
</resultMap>
<typeAlias alias="userBean"
type="com.zrar.ssiDemo.user.pojo.UserBean" />
<select id="getUser" resultClass="userBean"
parameterClass="userBean">
SELECT t.userId, t.username,t.pass,t.sex,t.address,t.pictureUri FROM
T_DEMOUSER t WHERE 1=1
<isNotEmpty prepend="AND" property="username">
t.username like '%$username$%'
</isNotEmpty>
<isGreaterThan prepend="AND" property="sex" compareValue="0">
t.sex = #sex#
</isGreaterThan>
<isNotEmpty prepend="AND" property="address">
t.address like '%$address$%'
</isNotEmpty>
</select>
<select id="getUserById" resultClass="userBean" parameterClass="java.lang.Integer">
SELECT t.userId, t.username,t.pass,t.sex,t.address,t.pictureUri FROM
T_DEMOUSER t WHERE 1=1 AND T.userId = #userId#
</select>
<insert id="addUser" parameterClass="userBean">
INSERT INTO T_DEMOUSER(userId, username,pass,sex,address,pictureUri)
VALUES(SEQ_DEMOUSER.NEXTVAL, #username#, #pass#, #sex#,
#address#,#pictureUri#)
</insert>
</sqlMap>
---------------------------------------------------------------------
好了,到这一步就完成struts2+spring2+ibatis的配置了,运行行工程,没有报错的话就再加上dwr的配置吧^_^
--------------------------------------------------------------------
第五步:配置dwr(ajax框架)
1、在com.zrar.ssiDemo.user.action.ajax 包中新建一个类:HandlerUser,我们做个核对用户名是否使用过的例子,
代码如下:
public class HandlerUser {
private UserManager userManager;
/**
* 核对用户信息
*
* @param userName
* @return
*/
public boolean checkUser(String userName) {
UserBean user = new UserBean();
user.setUsername(userName);
List<UserBean> userList = userManager.queryUser(user);
boolean flag = false;
for (UserBean userBean : userList) {
if (userName.trim().equals(userBean.getUsername().trim())) {
user.setUsername(userName);
flag = true;
break;
}
}
return flag;
}
public UserManager getUserManager() {
return userManager;
}
public void setUserManager(UserManager userManager) {
this.userManager = userManager;
}
}
其中 userManager为使用spring的依赖注入类,稍后会讲。
2、 先确认dwr.jar包放入了lib目录,没有问题的话就再WEB-INF目录下新建个dwr.xml配置,以之前的bean为例子,代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN" "http://www.getahead.ltd.uk/dwr/dwr10.dtd">
<dwr>
<allow>
<create javascript="HandlerUser" creator="spring">
<param name="beanName" value="HandlerUser"></param>
</create>
</allow>
</dwr>
HandlerUser为在js中可以使用的句柄名,实例化方式采用spring方式,你也可以用“new”,里面包含的 <param name="beanName" value="HandlerUser"></param>则需要在spring配置文件中写段代码用来注入。
找到之前新建的applicationContext-dao.xml配置文件,在里面加一段:
<!-- dwr的javaBean由spring管理 -->
<bean id="HandlerUser"
class="com.zrar.ssiDemo.user.action.ajax.HandlerUser">
<property name="userManager">
<ref bean="userManager" />
</property>
</bean>
---------------------------------------------------------------
到这一步后台配置就基本完成了,重新启动系统,完毕,后台没有报错的话,打开浏览器输入:
http://localhost:port/s2siDemo/dwr/index.html。若页面出现
DWR Test Index
-------------------------------------------------------------
恭喜了!dwr配置成功