首页 > 代码库 > struts2 + spring3 + mybatis3 环境搭建

struts2 + spring3 + mybatis3 环境搭建

struts2 + spring3 + mybatis3 

1. 框架下载

struts2: http://struts.apache.org/ 下载 struts-2.3.14-all.zip

spring3: http://www.springsource.org/spring-framework 下载 spring-framework-3.2.2-dist.zip

mybatis3: http://code.google.com/p/mybatis/ 下载 mybatis-3.2.2.zip 和 mybatis-spring-1.2.0-bundle.zip

2. 建示例工程

在Eclipse中新建示例工程,步骤就不详述了,我把工程取名为ssm_example。

3. struts2配置

3.1 src下创建struts.xml配置文件

 

[html] view plaincopyprint?
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE struts PUBLIC  
  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"  
  4.     "http://struts.apache.org/dtds/struts-2.0.dtd">  
  5.   
  6. <struts>  
  7.   
  8.     <constant name="struts.devMode" value=http://www.mamicode.com/"true" />  
  9.   
  10.     <package name="basic" extends="struts-default">  
  11.         <action name="index" class="cn.ssm.sample.action.IndexAction" method="execute">  
  12.             <result name="success">/WEB-INF/jsp/Index.jsp</result>  
  13.         </action>  
  14.     </package>  
  15.   
  16. </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.devMode" value="http://www.mamicode.com/true" />	<package name="basic" extends="struts-default">		<action name="index" class="cn.ssm.sample.action.IndexAction" method="execute">			<result name="success">/WEB-INF/jsp/Index.jsp</result>		</action>	</package></struts>

3.2 修改web.xml

 

 

[html] view plaincopyprint?
  1. <filter>  
  2.         <filter-name>struts2</filter-name>  
  3.         <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>  
  4.     </filter>  
  5.   
  6.     <filter-mapping>  
  7.         <filter-name>struts2</filter-name>  
  8.         <url-pattern>/*</url-pattern>  
  9.     </filter-mapping>  
<filter>		<filter-name>struts2</filter-name>		<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>	</filter>	<filter-mapping>		<filter-name>struts2</filter-name>		<url-pattern>/*</url-pattern>	</filter-mapping>

3.3 从解压的struts-2.3.14-all的lib文件夹下,挑选了必须的和比较常用的jar包,放入WEB-INF/lib的文件夹下

 

 

[html] view plaincopyprint?
  1. commons-fileupload-1.2.2.jar  
  2. commons-io-2.0.1.jar  
  3. commons-lang-2.4.jar  
  4. commons-lang3-3.1.jar  
  5. commons-logging-1.1.1.jar  
  6. commons-logging-api-1.1.jar  
  7. freemarker-2.3.19.jar  
  8. javassist-3.11.0.GA.jar  
  9. ognl-3.0.6.jar  
  10. struts2-core-2.3.14.jar  
  11. xwork-core-2.3.14.jar  
commons-fileupload-1.2.2.jarcommons-io-2.0.1.jarcommons-lang-2.4.jarcommons-lang3-3.1.jarcommons-logging-1.1.1.jarcommons-logging-api-1.1.jarfreemarker-2.3.19.jarjavassist-3.11.0.GA.jarognl-3.0.6.jarstruts2-core-2.3.14.jarxwork-core-2.3.14.jar

3.4 建个测试用的IndexAction.java和Index.jsp

 

 

[java] view plaincopyprint?
  1. package cn.ssm.sample.action;  
  2.   
  3. import com.opensymphony.xwork2.ActionSupport;  
  4.   
  5. public class IndexAction extends ActionSupport{  
  6.   
  7.     @Override  
  8.     public String execute() throws Exception {  
  9.         // TODO Auto-generated method stub   
  10.         return super.execute();  
  11.     }  
  12.   
  13. }  
package cn.ssm.sample.action;import com.opensymphony.xwork2.ActionSupport;public class IndexAction extends ActionSupport{	@Override	public String execute() throws Exception {		// TODO Auto-generated method stub		return super.execute();	}}

[html] view plaincopyprint?
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"  
  2.     pageEncoding="UTF-8"%>  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  4. <html>  
  5. <head>  
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
  7. <title>Insert title here</title>  
  8. </head>  
  9. <body>  
  10.     Hello world!  
  11. </body>  
  12. </html>  
<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body>	Hello world!</body></html>

3.5 测试struts2

 

运行服务,在浏览器输入http://localhost:8080/ssm_example/index,如果配置没有错误,那么会出现Hello world!

4. spring3配置

4.1 config/spring下创建applicationContext.xml配置文件

 

[html] view plaincopyprint?
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2.   
  3. <beans xmlns="http://www.springframework.org/schema/beans"  
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"  
  5.     xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jdbc="http://www.springframework.org/schema/jdbc"  
  6.     xmlns:context="http://www.springframework.org/schema/context"  
  7.     xsi:schemaLocation="  
  8.      http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd  
  9.      http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
  10.      http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd  
  11.      http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd  
  12.      http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">  
  13.   
  14.     <!-- enable component scanning (beware that this does not enable mapper   
  15.         scanning!) -->  
  16.     <context:component-scan  
  17.         base-package="cn.ssm.sample.action,cn.ssm.sample.service" />  
  18.   
  19.     <!-- enable autowire -->  
  20.     <context:annotation-config />  
  21.   
  22.     <!-- enable transaction demarcation with annotations -->  
  23.     <tx:annotation-driven />  
  24.       
  25. </beans>  
<?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:aop="http://www.springframework.org/schema/aop"	xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jdbc="http://www.springframework.org/schema/jdbc"	xmlns:context="http://www.springframework.org/schema/context"	xsi:schemaLocation="     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd     http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd     http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">	<!-- enable component scanning (beware that this does not enable mapper 		scanning!) -->	<context:component-scan		base-package="cn.ssm.sample.action,cn.ssm.sample.service" />	<!-- enable autowire -->	<context:annotation-config />	<!-- enable transaction demarcation with annotations -->	<tx:annotation-driven />	</beans>

4.2 修改web.xml

 

 

[html] view plaincopyprint?
  1. <listener>  
  2.     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
  3. </listener>  
  4. <context-param>  
  5.     <param-name>contextConfigLocation</param-name>  
  6.     <param-value>/WEB-INF/classes/applicationContext.xml  
  7.        </param-value>  
  8. </context-param>  
	<listener>		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>	</listener>	<context-param>		<param-name>contextConfigLocation</param-name>		<param-value>/WEB-INF/classes/applicationContext.xml        </param-value>	</context-param>

4.3 添加相关jar包

 

 

[html] view plaincopyprint?
  1. aopalliance-1.0.jar  
  2. spring-aop-3.2.2.RELEASE.jar  
  3. spring-beans-3.2.2.RELEASE.jar  
  4. spring-context-3.2.2.RELEASE.jar  
  5. spring-core-3.2.2.RELEASE.jar  
  6. spring-expression-3.2.2.RELEASE.jar  
  7. spring-jdbc-3.2.2.RELEASE.jar  
  8. spring-tx-3.2.2.RELEASE.jar  
  9. spring-web-3.2.2.RELEASE.jar  
  10. struts2-spring-plugin-2.3.14.jar  
aopalliance-1.0.jarspring-aop-3.2.2.RELEASE.jarspring-beans-3.2.2.RELEASE.jarspring-context-3.2.2.RELEASE.jarspring-core-3.2.2.RELEASE.jarspring-expression-3.2.2.RELEASE.jarspring-jdbc-3.2.2.RELEASE.jarspring-tx-3.2.2.RELEASE.jarspring-web-3.2.2.RELEASE.jarstruts2-spring-plugin-2.3.14.jar

4.4 修改struts.xml文件

 

添加:<constant name="struts.objectFactory" value="http://www.mamicode.com/spring"></constant>

并且把class="cn.ssm.sample.action.IndexAction"改成class="indexAction" 

4.5 修改Action

在IndexAction的类上,加上@Controller,这样Spring就能自动实例化成indexAction对象了。

4.6 测试spring

运行服务,在浏览器输入http://localhost:8080/ssm_example/index,如果配置没有错误,那么依然会出现Hello world!

5. mybatis3配置

5.1 数据库准备

这里采用mysql,下面的sql文来运行。

 

[sql] view plaincopyprint?
  1. CREATE SCHEMA `ssmsample` DEFAULT CHARACTER SET utf8 ;  
  2. CREATE  TABLE `ssmsample`.`user` (`id` INT NOT NULL AUTO_INCREMENT, `name` VARCHAR(45) NULL, PRIMARY KEY(‘id‘) );  
  3. INSERT INTO `ssmsample`.`user` (`id`,`name`) VALUES (1,‘Ethan‘);  
CREATE SCHEMA `ssmsample` DEFAULT CHARACTER SET utf8 ;CREATE  TABLE `ssmsample`.`user` (`id` INT NOT NULL AUTO_INCREMENT, `name` VARCHAR(45) NULL, PRIMARY KEY(‘id‘) );INSERT INTO `ssmsample`.`user` (`id`,`name`) VALUES (1,‘Ethan‘);

5.2 修改applicationContext.xml

 

 

[html] view plaincopyprint?
  1. <!-- 数据源配置 -->  
  2. <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"  
  3.     destroy-method="close">  
  4.     <property name="driverClassName" value=http://www.mamicode.com/"com.mysql.jdbc.Driver"></property>  
  5.     <property name="url"  
  6.         value=http://www.mamicode.com/"jdbc:mysql://localhost:3306/ssmsample?useUnicode=true&characterEncoding=utf8"></property>  
  7.     <property name="username" value=http://www.mamicode.com/"root"></property>  
  8.     <property name="password" value=http://www.mamicode.com/"admin"></property>  
  9. </bean>  
  10.   
  11. <!-- transaction manager, use JtaTransactionManager for global tx -->  
  12. <bean id="transactionManager"  
  13.     class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
  14.     <property name="dataSource" ref="dataSource" />  
  15. </bean>  
  16.   
  17.    <!-- define the SqlSessionFactory -->  
  18.    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">  
  19.        <property name="dataSource" ref="dataSource" />  
  20.        <property name="typeAliasesPackage" value=http://www.mamicode.com/"cn.ssm.sample.dto" />  
  21.    </bean>  
  22.   
  23.    <!-- scan for mappers and let them be autowired -->  
  24.    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">  
  25.        <property name="basePackage" value=http://www.mamicode.com/"cn.ssm.sample.dao" />  
  26.    </bean>  
	<!-- 数据源配置 -->	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"		destroy-method="close">		<property name="driverClassName" value="http://www.mamicode.com/com.mysql.jdbc.Driver"></property>		<property name="url"			value="http://www.mamicode.com/jdbc:mysql://localhost:3306/ssmsample?useUnicode=true&characterEncoding=utf8"></property>		<property name="username" value="http://www.mamicode.com/root"></property>		<property name="password" value="http://www.mamicode.com/admin"></property>	</bean>	<!-- transaction manager, use JtaTransactionManager for global tx -->	<bean id="transactionManager"		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">		<property name="dataSource" ref="dataSource" />	</bean>    <!-- define the SqlSessionFactory -->    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">        <property name="dataSource" ref="dataSource" />        <property name="typeAliasesPackage" value="http://www.mamicode.com/cn.ssm.sample.dto" />    </bean>    <!-- scan for mappers and let them be autowired -->    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">        <property name="basePackage" value="http://www.mamicode.com/cn.ssm.sample.dao" />    </bean>

5.3 创建和修改相关类

 

UserMapper.java

 

[java] view plaincopyprint?
  1. package cn.ssm.sample.dao;  
  2.   
  3. import cn.ssm.sample.dto.User;  
  4.   
  5. public interface UserMapper {  
  6.     User getUser(int id);  
  7. }  
package cn.ssm.sample.dao;import cn.ssm.sample.dto.User;public interface UserMapper {	User getUser(int id);}

UserMapper.xml(和UserMapper.java同目录)

 

 

[html] view plaincopyprint?
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"   
  3. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">  
  4.   
  5. <mapper namespace="cn.ssm.sample.dao.UserMapper">  
  6.     <select id="getUser" parameterType="int" resultType="User">  
  7.         SELECT *  
  8.         From user where id = #{id}  
  9.     </select>  
  10. </mapper>  
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="cn.ssm.sample.dao.UserMapper">	<select id="getUser" parameterType="int" resultType="User">		SELECT *		From user where id = #{id}	</select></mapper>

User.java

 

 

[java] view plaincopyprint?
  1. package cn.ssm.sample.dto;  
  2.   
  3. public class User {  
  4.     int id;  
  5.     String name;  
  6.   
  7.     public int getId() {  
  8.         return id;  
  9.     }  
  10.   
  11.     public void setId(int id) {  
  12.         this.id = id;  
  13.     }  
  14.   
  15.     public String getName() {  
  16.         return name;  
  17.     }  
  18.   
  19.     public void setName(String name) {  
  20.         this.name = name;  
  21.     }  
  22. }  
package cn.ssm.sample.dto;public class User {	int id;	String name;	public int getId() {		return id;	}	public void setId(int id) {		this.id = id;	}	public String getName() {		return name;	}	public void setName(String name) {		this.name = name;	}}

IndexSvr.java

 

 

[java] view plaincopyprint?
  1. package cn.ssm.sample.service;  
  2.   
  3. import org.springframework.beans.factory.annotation.Autowired;  
  4. import org.springframework.stereotype.Service;  
  5.   
  6. import cn.ssm.sample.dao.UserMapper;  
  7. import cn.ssm.sample.dto.User;  
  8.   
  9. @Service  
  10. public class IndexSvr {  
  11.       
  12.     @Autowired  
  13.     UserMapper userMapper;  
  14.       
  15.     public User getUser(int id) {  
  16.         return userMapper.getUser(id);  
  17.     }  
  18. }  
package cn.ssm.sample.service;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import cn.ssm.sample.dao.UserMapper;import cn.ssm.sample.dto.User;@Servicepublic class IndexSvr {		@Autowired	UserMapper userMapper;		public User getUser(int id) {		return userMapper.getUser(id);	}}

IndexAction.java

 

 

[java] view plaincopyprint?
  1. package cn.ssm.sample.action;  
  2.   
  3. import org.springframework.beans.factory.annotation.Autowired;  
  4. import org.springframework.stereotype.Controller;  
  5.   
  6. import cn.ssm.sample.dto.User;  
  7. import cn.ssm.sample.service.IndexSvr;  
  8.   
  9. import com.opensymphony.xwork2.ActionSupport;  
  10.   
  11. @Controller  
  12. public class IndexAction extends ActionSupport{  
  13.   
  14.     private User user;  
  15.       
  16.     public User getUser() {  
  17.         return user;  
  18.     }  
  19.   
  20.     public void setUser(User user) {  
  21.         this.user = user;  
  22.     }  
  23.   
  24.     @Autowired  
  25.     IndexSvr indexSvr;  
  26.   
  27.     @Override  
  28.     public String execute() throws Exception {  
  29.         user = indexSvr.getUser(1);  
  30.         return super.execute();  
  31.     }  
  32.   
  33. }  
package cn.ssm.sample.action;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import cn.ssm.sample.dto.User;import cn.ssm.sample.service.IndexSvr;import com.opensymphony.xwork2.ActionSupport;@Controllerpublic class IndexAction extends ActionSupport{	private User user;		public User getUser() {		return user;	}	public void setUser(User user) {		this.user = user;	}	@Autowired	IndexSvr indexSvr;	@Override	public String execute() throws Exception {		user = indexSvr.getUser(1);		return super.execute();	}}

index.jsp

 

 

[html] view plaincopyprint?
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"  
  2.     pageEncoding="UTF-8"%>  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  4. <html>  
  5. <head>  
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
  7. <title>Insert title here</title>  
  8. </head>  
  9. <body>  
  10.     Hello world! ${user.name }  
  11. </body>  
  12. </html>  
<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body>	Hello world! ${user.name }</body></html>

5.4 添加jar包

 

 

[html] view plaincopyprint?
  1. commons-dbcp-1.4.jar  
  2. commons-pool-1.6.jar  
  3. mybatis-3.2.2.jar  
  4. mybatis-spring-1.2.0.jar  
  5. mysql-connector-java-5.1.13-bin.jar  
commons-dbcp-1.4.jarcommons-pool-1.6.jarmybatis-3.2.2.jarmybatis-spring-1.2.0.jarmysql-connector-java-5.1.13-bin.jar

5.5 测试ssm

 

运行服务,在浏览器输入http://localhost:8080/ssm_example/index,如果配置没有错误,那么依然会出现Hello world!Ethan

struts2 + spring3 + mybatis3 环境搭建