您的位置:首页 > 编程语言 > Java开发

Struts1 Spring2 iBatis2 框架的集成

2015-06-30 23:49 495 查看
这个是属于比较老的框架了,奈何现在公司用的产品就是如此,闲来就搭一个集成框架吧

依赖jar包

antlr-2.7.6.jar
aspectj-1.8.2.jar
aspectjrt.jar
aspectjweaver-1.6.12.jar
bsf-2.3.0.jar
cglib-nodep-2.1_3.jar
commons-beanutils-1.8.0.jar
commons-dbcp-1.4.jar
commons-digester-2.0.jar
commons-fileupload-1.3.1.jar
commons-logging-1.2.jar
commons-pool.jar
commons-validator-1.3.1.jar
hamcrest-core-1.3.jar
ibatis-2.3.2.715.jar
jakarta-oro.jar
javax.servlet.jsp.jstl.jar
jstl-1.2.jar
jstl-impl.jar
junit-4.11.jar
log4j-1.2.17.jar
log4j-api-2.2.jar
log4j-core-2.2.jar
mysql-connector-java-5.1.7-bin.jar
oro-2.0.8.jar
spring-web-2.5.jar
spring-webmvc-2.5.jar
spring-webmvc-struts.jar
spring.jar
standard-1.1.2.jar
struts.jar


我们用一个小练习来演示框架的搭建是否成功,首先准备数据库环境

CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`birthday` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=101 DEFAULT CHARSET=utf8


自行插入测试数据

1、建立领域对象

package org.zln.module.domain;

import java.util.Date;

/**
* Created by sherry on 15-6-30.
*/
public class User {
private Integer id;
private String name;
private Date birthday;

@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", birthday=" + birthday +
'}';
}

public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public Date getBirthday() {
return birthday;
}

public void setBirthday(Date birthday) {
this.birthday = birthday;
}
}


2、Dao

package org.zln.base;

import com.ibatis.sqlmap.client.SqlMapClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;

/**
* Created by sherry on 000030/6/30 19:35.
*/
public class BaseDao {
@Autowired
@Qualifier("sqlMapClient")
protected SqlMapClient sqlMapClient;
}


package org.zln.module.dao;

import org.zln.module.domain.User;

import java.util.List;

/**
* Created by sherry on 15-6-30.
*/
public interface UserDao {
/**
* 查找用户
*/
public abstract List<User> getUserList(User user);
}


package org.zln.module.dao.ibatis;

import org.springframework.stereotype.Repository;
import org.zln.base.BaseDao;
import org.zln.module.dao.UserDao;
import org.zln.module.domain.User;

import java.sql.SQLException;
import java.util.List;

/**
* Created by sherry on 15-6-30.
*/
@Repository("userDao")
public class UserDaoImpl extends BaseDao implements UserDao {

@Override
public List<User> getUserList(User user) {
List<User> users = null;
try {
users = sqlMapClient.queryForList("org.zln.module.domain.User.getUserList", user);
} catch (SQLException e) {
e.printStackTrace();
}

return users;
}
}


3、Service

package org.zln.module.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.zln.module.dao.UserDao;
import org.zln.module.dao.ibatis.UserDaoImpl;
import org.zln.module.domain.User;

import javax.annotation.Resource;
import java.util.List;

/**
* Created by sherry on 15-6-30.
*/
@Service("userService")
@Transactional(rollbackFor = Exception.class)
public class UserService {
@Autowired
@Qualifier("userDao")
public UserDao userDao;

@Transactional(readOnly = true)
public List<User> getUserList(Integer id,String name){
User user = new User();
user.setId(id);
user.setName(name);
return userDao.getUserList(user);
}
}


4、iBatis配置文件

<?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="org.zln.module.domain.User">

<!--别名-->
<typeAlias alias="User" type="org.zln.module.domain.User"/>

<!--参数Map-->
<parameterMap id="User-Par-Map" class="User">
<parameter property="id" jdbcType="INTEGER"/>
<parameter property="name" jdbcType="VARCHAR"/>
<parameter property="birthday" jdbcType="DATE"/>
</parameterMap>
<!--返回Map-->
<resultMap id="User-Res-Map" class="User">
<result property="id" column="id"/>
<result property="name" column="name"/>
<result property="birthday" column="birthday"/>
</resultMap>
/*查询列表*/
<sql id="select-user-list">
SELECT
t1.id
,t1.name
,t1.birthday
FROM user t1
</sql>
/*查询条件*/
<sql id="where-user-parameter">
<dynamic prepend="WHERE">
<isNotEmpty prepend="AND" property="id">
t1.id = #id#
</isNotEmpty>
<isNotEmpty prepend="AND" property="name">
<!--这是MySQL的写法 不同数据库拼接方式不同-->
t1.name LIKE CONCAT('%', #name#, '%')
<!--
Oracle like '%' || #username# || '%'
SqlServer like '%' + #username# +  '%'
-->
</isNotEmpty>
<isNotEmpty prepend="AND" property="birthday">
t1.birtjday = #birtjday#
</isNotEmpty>
</dynamic>
</sql>
/*更新列表*/
<sql id="update-user-list">
<dynamic prepend="SET">
<isNotEmpty prepend="," property="id">
t1.id = #id#
</isNotEmpty>
<isNotEmpty prepend="," property="name">
t1.name = #name#
</isNotEmpty>
<isNotEmpty prepend="," property="birthday">
t1.birthday = #birthday#
</isNotEmpty>
</dynamic>
</sql>
/*查询User*/
<select id="getUserList" parameterMap="User-Par-Map" resultMap="User-Res-Map">
<include refid="select-user-list"/>
<include refid="where-user-parameter"/>
</select>
</sqlMap>


<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE sqlMapConfig
PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
<!--iBatis配置信息-->
<settings enhancementEnabled="true"
useStatementNamespaces="true"
cacheModelsEnabled="true"
lazyLoadingEnabled="true"/>

<!-- 映射文件位置 -->
<sqlMap resource="org/zln/module/cfg/ibatis/User.xml" />

</sqlMapConfig>


5、集成iBatis与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"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
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"> 
<context:annotation-config/>
<!--数据源配置-->
<context:property-placeholder location="classpath:org/zln/cfg/jdbc.properties"/>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${driverClassName}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</bean>

<!--iBatis配置-->
<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation" value="classpath:org/zln/cfg/ibatis/sql-map-config.xml"/>
<property name="dataSource" ref="dataSource"/>
</bean>

<!--JDBC数据源事务管理器-->
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!--使用注解配置事务-->
<tx:annotation-driven transaction-manager="txManager"/>

<!--base-->
<context:component-scan base-package="org.zln.base"/>
<!--module dao-->
<context:component-scan base-package="org.zln.module.dao.ibatis"/>
<!--module service-->
<context:component-scan base-package="org.zln.module.service"/>
<!---->
<!--引入模块化配置文件-->
<!--<import resource="classpath:org/zln/module/cfg/spring/module_dao.xml"/>-->
<!--<import resource="classpath:org/zln/module/cfg/spring/module_service.xml"/>-->
<import resource="classpath:org/zln/module/cfg/spring/module_action.xml"/>
</beans>


个人喜欢使用自动扫描与注解的方式进行Bean的管理与事务管理

6、测试Spring+iBatis

package org.zln.module.service;

import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.zln.module.dao.UserDao;
import org.zln.module.domain.User;

import java.util.List;

import static org.junit.Assert.*;

/**
* Created by sherry on 15-6-30.
*/
public class UserServiceTest {

private static ApplicationContext applicationContext;
private static final String[] CONFIG_FILES = {"org/zln/cfg/spring/db_spring_cfg.xml"};
private UserService userService;

@BeforeClass
public static void setUpBeforeClass() throws Exception{
applicationContext = new ClassPathXmlApplicationContext(CONFIG_FILES);
}

@Before
public void setUpBefore() throws Exception{
userService = (UserService) applicationContext.getBean("userService");
}

@Test
public void testGetUserList() throws Exception {
List<User> users = userService.getUserList(1,null);
for (User u:users){
System.out.println(u);
}
}
}


7、集成Struts1与Spring2

Action

package org.zln.base;

import org.apache.struts.action.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
* Created by sherry on 000030/6/30 20:16.
*/
public class BaseAction extends Action {

@Override
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
String parameter = mapping.getParameter();
System.out.println("请求parameter:"+parameter);
String forward = "error";
if ("index".equals(parameter)){
//进入工程测试主页面
forward = gotoIndex(mapping,form,request,response);
}
return mapping.findForward(forward);
}

private String gotoIndex(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) {
return "success";
}
}


package org.zln.module.action;

import org.apache.commons.beanutils.PropertyUtils;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.zln.base.BaseAction;
import org.zln.module.domain.User;
import org.zln.module.form.UserForm;
import org.zln.module.service.UserService;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
* Created by sherry on 000030/6/30 20:55.
*/
public class UserAction extends BaseAction{

@Autowired
@Qualifier("userService")
private UserService userService;

@Override
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
String parameter = mapping.getParameter();
System.out.println("请求parameter:"+parameter);
String forward = "error";
if ("loginUI".equals(parameter)){
//登陆页面
forward = loginUI(mapping, form, request, response);
}else if ("loginDO".equals(parameter)){
//登陆动作
forward = loginDo(mapping, form, request, response);
}
return mapping.findForward(forward);
}

private String loginDo(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) {
UserForm userForm = (UserForm) form;
User user = new User();
try {
PropertyUtils.copyProperties(user,userForm);
List<User> users = userService.getUserList(user.getId(),user.getName());
request.setAttribute("userObj",user);
request.setAttribute("users",users);
return "success";
} catch (Exception e) {
e.printStackTrace();
return "failure";
}
}

private String loginUI(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) {
return "success";
}
}


<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
"http://struts.apache.org/dtds/struts-config_1_2.dtd">

<struts-config>
<global-forwards>
<forward name="error" path="/WEB-INF/error.jsp"/>
</global-forwards>
<action-mappings>
<!--进入工程首页-->
<action path="/index" parameter="index">
<forward name="success" path="/WEB-INF/main.jsp"/>
</action>
</action-mappings>

<!--Spring管理Action-->
<controller>
<set-property property="processorClass" value="org.springframework.web.struts.DelegatingRequestProcessor"/>
</controller>
</struts-config>


<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
"http://struts.apache.org/dtds/struts-config_1_2.dtd">

<struts-config>

<form-beans>
<form-bean name="userForm" type="org.zln.module.form.UserForm"/>
</form-beans>
<action-mappings>
<!--登陆页面-->
<action path="/module/loginUI" name="userForm" parameter="loginUI">
<forward name="success" path="/WEB-INF/module/login/loginUI.jsp"/>
</action>
<!--登陆动作-->
<action path="/module/loginDo" name="userForm" parameter="loginDO">
<forward name="success" path="/WEB-INF/module/login/loginSuccess.jsp"/>
<forward name="failure" path="/WEB-INF/module/login/loginFailure.jsp"/>
</action>
</action-mappings>

</struts-config>


8、Web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">

<!--Spring-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:org/zln/cfg/spring/db_spring_cfg.xml
</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!--Spring解决乱码问题-->
<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>

<!--Struts1配置-->
<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_cfg/struts-config.xml
,/WEB-INF/struts_cfg/struts_module.xml
</param-value>
</init-param>
<!--module 模块配置文件-->
<!--<init-param>
<param-name>config/module</param-name>
<param-value>/WEB-INF/struts_cfg/struts_module.xml</param-value>
</init-param>-->
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>


9、JSP

<%@ taglib prefix="html" uri="http://struts.apache.org/tags-html" %>
<%--
Created by IntelliJ IDEA.
User: nbcoo_000
Date: 000030/6/30
Time: 20:57
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<%
String homePage = request.getContextPath();
%>
<!DOCTYPE html>
<html>
<head>
<title>登陆页面</title>
</head>
<body>
<html:form action="/module/loginDo" method="post">
<table>
<caption>登陆</caption>
<tr>
<td>用户名</td>
<td>
<html:text property="name"/>
</td>
</tr>
<tr>
<td colspan="2">
<html:submit>登陆</html:submit>
</td>
</tr>
</table>
</html:form>
</body>
</html>


<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<%@ taglib prefix="bean"    uri="http://struts.apache.org/tags-bean" %>
<%@ taglib prefix="logic"   uri="http://struts.apache.org/tags-logic" %>
<%@ taglib prefix="c"       uri="http://java.sun.com/jstl/core"%>
<%@ taglib prefix="html" uri="http://jakarta.apache.org/struts/tags-html" %>
<%
String homePage = request.getContextPath();
%>
<!DOCTYPE html>
<html>
<head>
<title>登陆成功</title>
</head>
<body>
<table>
<tr>
<td>ID</td>
<td>NAME</td>
<td>BIRTHDAY</td>
</tr>
<logic:iterate id="user" name="users" type="org.zln.module.domain.User">
<tr>
<td><html:text property="id" name="user" /></td>
<td><html:text property="name" name="user" /></td>
<td><html:text property="birthday" name="user" /></td>
</tr>
</logic:iterate>
</table>
</body>
</html>


<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<%
String homePage = request.getContextPath();
%>
<!DOCTYPE html>
<html>
<head>
<title>登陆失败</title>
</head>
<body>
登陆失败
</body>
</html>


漏了个Form,大家就自行补上吧,有哪里不对与需要改进的地方,不吝赐教
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: