Eclipse 搭建 struts2 spring mybitas 框架

2 篇文章 0 订阅

上一章写到了spring 集成 struts2 ,这章接着上一次写,集成持久层myibatis

上一章:http://blog.csdn.net/lipp555/article/details/50725678

导入的jar包:

项目结构:

1.首先导入jar包

2.创建一个测试数据库(数据库版本:Mysql),数据库名称:lzz

在lzz数据库中创建一个测试表:user

表结构如下:

CREATE TABLE `user` (
`id`  int(11) NOT NULL AUTO_INCREMENT COMMENT '主键' ,
`name`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '用户名' ,
`password`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '密码' ,
PRIMARY KEY (`id`)
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
AUTO_INCREMENT=8
ROW_FORMAT=COMPACT
;

3.开始编码,首先规划好目录结构,在src目录下创建

4.代码如下:

User.java

package com.ss02.user.model;

public class User {
	private Integer id;
	private String name;
	private String password;
	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 String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	
	@Override
	public String toString() {
		return "User[id="+id+" , username="+name+" , password="+password+"]";
	}
}

user.xml
<?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="com.ss02.user.dao.UserDao">

	<select id="getUserById" parameterType="int"
		resultType="userBean">
		SELECT * FROM user WHERE id=#{id} 
	</select>
	<insert id="insertUser" parameterType="userBean" 
               useGeneratedKeys="true" keyProperty="id">
		INSERT INTO user (name,password) VALUES
		(#{name},#{password})
	</insert>
	<update id="updateUser" parameterType="userBean">
		UPDATE user SET
		password=#{password} WHERE id=#{id}
	</update>
	<delete id="deleteUser" parameterType="int">
		DELETE FROM user WHERE
		id=#{id}
	</delete>
</mapper>

UserDao.java(Myibatis自适应,不需要创建Dao的实现类)
package com.ss02.user.dao;

import com.ss02.user.model.User;

public interface UserDao {
	User getUserById(Integer id);
	
	void insertUser(User user);
	
	void updateUser(User user);
	
	void deleteUser(Integer id);
}

UserManager.java
package com.ss02.user.manager;

import java.util.List;

import com.ss02.user.model.User;


public interface UserManager {
	
	public void insertUser(User user);
	
	public void insertUserList(List<User> list);
	
	public User getUserByid(Integer id);
}

UserManagerImp.java
package com.ss02.user.manager.imp;

import java.util.List;

import com.ss02.user.dao.UserDao;
import com.ss02.user.manager.UserManager;
import com.ss02.user.model.User;

public class UserManagerImp implements UserManager{
	
	private UserDao userDao;

	@Override
	public void insertUser(User user) {
		userDao.insertUser(user);
	}

	@Override
	public void insertUserList(List<User> list) {
		for (int i = 0; i < list.size(); i++) {
			this.insertUser(list.get(i));
		}
	}

	public UserDao getUserDao() {
		return userDao;
	}

	public void setUserDao(UserDao userDao) {
		this.userDao = userDao;
	}

	@Override
	public User getUserByid(Integer id) {
		return userDao.getUserById(id);
	}
	
}
UserAction.java
package com.ss02.user.action;

import com.opensymphony.xwork2.ActionSupport;
import com.ss02.user.manager.UserManager;
import com.ss02.user.model.User;

public class UserAction extends ActionSupport {

	UserManager userManager;
	User user;
	/**
	 * 
	 */
	private static final long serialVersionUID = 7499436215736504870L;

	@Override
	public String execute() throws Exception {
		System.out.println("execute");
		User user = userManager.getUserByid(2);
		System.out.println(user.toString());
		return super.execute();
	}

	public String login() throws Exception {
		System.out.println("login");
		User user = userManager.getUserByid(2);
		System.out.println(user.toString());
		return SUCCESS;
	}

	public String insertUser(){
		userManager.insertUser(user);
		return SUCCESS;
	}
	
	public UserManager getUserManager() {
		return userManager;
	}

	public void setUserManager(UserManager userManager) {
		this.userManager = userManager;
	}

	public User getUser() {
		return user;
	}

	public void setUser(User user) {
		this.user = user;
	}

}

5.配置

5.1配置数据库连接,jdbc.properties

#测试环境#aliyundatahome,aliyundata
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/lzz
jdbc.username=root
jdbc.password=root


#\u521d\u59cb\u5316\u65f6\u521b\u5efa\u7684\u8fde\u63a5\u6570\uff0c\u5e94\u5728minPoolSize\u4e0emaxPoolSize\u4e4b\u95f4\u53d6\u503c\u3002\u9ed8\u8ba4\u4e3a3
c3p0.initialPoolSize=10
#\u8fde\u63a5\u6c60\u4e2d\u4fdd\u7559\u7684\u6700\u5c0f\u8fde\u63a5\u6570\u3002\u9ed8\u8ba4\u4e3a15
c3p0.minPoolSize=1
#\u8fde\u63a5\u6c60\u4e2d\u4fdd\u7559\u7684\u6700\u5927\u8fde\u63a5\u6570\u3002\u9ed8\u8ba4\u4e3a15
c3p0.maxPoolSize=20
#\u5f53\u8fde\u63a5\u6c60\u4e2d\u7684\u8fde\u63a5\u8017\u5c3d\u7684\u65f6\u5019c3p0 \u4e00\u6b21\u540c\u65f6\u83b7\u53d6\u7684\u8fde\u63a5\u6570\u3002Default: 3 
c3p0.acquireIncrement=2
#\u6bcf60\u79d2\u68c0\u67e5\u6240\u6709\u8fde\u63a5\u6c60\u4e2d\u7684\u7a7a\u95f2\u8fde\u63a5\u3002Default: 0 
c3p0.idleConnectionTestPeriod=1800
#\u6700\u5927\u7a7a\u95f2\u65f6\u95f4,60\u79d2\u5185\u672a\u4f7f\u7528\u5219\u8fde\u63a5\u88ab\u4e22\u5f03\u3002\u82e5\u4e3a0\u5219\u6c38\u4e0d\u4e22\u5f03\u3002Default: 0 
c3p0.maxIdleTime=180
#\u5b9a\u4e49\u5728\u4ece\u6570\u636e\u5e93\u83b7\u53d6\u65b0\u8fde\u63a5\u5931\u8d25\u540e\u91cd\u590d\u5c1d\u8bd5\u83b7\u53d6\u7684\u6b21\u6570\uff0c\u9ed8\u8ba4\u4e3a30
c3p0.acquireRetryAttempts=30
#\u4e24\u6b21\u8fde\u63a5\u4e2d\u95f4\u9694\u65f6\u95f4\uff0c\u5355\u4f4d\u6beb\u79d2\uff0c\u9ed8\u8ba4\u4e3a1000
c3p0.acquireRetryDelay=1000
c3p0.automaticTestTable=c3p0TestTable
#\u5f53\u8fde\u63a5\u6c60\u7528\u5b8c\u65f6\u5ba2\u6237\u7aef\u8c03\u7528getConnection()\u540e\u7b49\u5f85\u83b7\u53d6\u65b0\u8fde\u63a5\u7684\u65f6\u95f4\uff0c\u8d85\u65f6\u540e\u5c06\u629b\u51fa SQLException,\u5982\u8bbe\u4e3a0\u5219\u65e0\u9650\u671f\u7b49\u5f85\u3002\u5355\u4f4d\u6beb\u79d2\u3002Default: 0
c3p0.checkoutTimeout=1800
c3p0.maxStatements=0
#\u8fde\u63a5\u6c60\u5185\u5355\u4e2a\u8fde\u63a5\u6240\u62e5\u6709\u7684\u6700\u5927\u7f13\u5b58Statement\u6570\u3002\u9ed8\u8ba4\u4e3a0
c3p0.maxStatementsPerConnection=100



5.2配置myibtis,在WEB-INF下创建myibatis文件夹,在myibatis下创建mybatis-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC  
    "-//mybatis.org//DTD Config 3.0//EN"  
    "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<!-- 给bean取一个别名 -->
	<typeAliases>
		<typeAlias type="com.ss02.user.model.User" alias="userBean"/>
	</typeAliases>
	<mappers>
		<mapper resource="com/ss02/user/model/user.xml" />
	</mappers>
</configuration>



5.3配置spring和myibatis的关联,dataSource.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:tx="http://www.springframework.org/schema/tx" xmlns:p="http://www.springframework.org/schema/p"
	xmlns:aop="http://www.springframework.org/schema/aop" 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-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">
	<!-- 配置数据源 -->
	<bean id="jdbcDataSource"
		class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName" value="${jdbc.driverClassName}" />
		<property name="url" value="${jdbc.url}" />
		<property name="username" value="${jdbc.username}" />
		<property name="password" value="${jdbc.password}" />
	</bean>
	
	<bean id="propertyConfigurer"
		class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="locations">
			<list>
				<value>/WEB-INF/springResource/jdbc.properties</value>
			</list>
		</property>
	</bean>
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="jdbcDataSource" />
		<property name="configLocation" value="/WEB-INF/myibatis/mybatis-config.xml"></property>
	</bean>
	<bean id="userDao" class="org.mybatis.spring.mapper.MapperFactoryBean">
		<property name="mapperInterface" value="com.ss02.user.dao.UserDao"></property>
		<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
	</bean>
	
	<!-- Transaction manager for a single JDBC DataSource -->
    <bean id="transactionManager" 
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="jdbcDataSource"/>
    </bean>

</beans>

5.4在struts,spring中配置userAction

struts.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>
	<!-- struts的action配置文件 -->
	<!-- 将action托管给spring -->
	<constant name="struts.objectFactory" value="spring"></constant>
	<!-- 编码过滤器 -->
	<constant name="struts.i18n.encoding" value="UTF-8"/>
	<!-- <constant name="struts.i18n.encoding" value="UTF-8"></constant> -->
	<!-- 所有的action都应该放在对应的package下 -->
	<package name="ss" extends="struts-default" namespace="/lzz">
		<action name="login" class="loginAction">
			<!-- 定义逻辑视图和物理资源之间的映射 -->
			<result name="success">/page/Come.jsp</result>
			<result name="error">/page/Hello.jsp</result>
		</action>

		<action name="login_*" class="loginAction" method="{1}">
			<!-- 定义逻辑视图和物理资源之间的映射 -->
			<result name="success">/page/Come.jsp</result>
			<result name="error">/page/Hello.jsp</result>
		</action>

		<action name="user_*" class="userAction" method="{1}">
			<!-- 定义逻辑视图和物理资源之间的映射 -->
			<result name="success">/page/Come.jsp</result>
			<result name="error">/page/Hello.jsp</result>
		</action>
	</package>


</struts>  
applicationContext-user.xml

<?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"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"
	default-autowire="byName" default-lazy-init="true">
	
		<bean id="userAction" class="com.ss02.user.action.UserAction" scope="prototype">
		<property name="userManager" ref="userManager" />
	</bean>
	
	
	<!-- 事务控制 -->
	<bean id="userManager" parent="baseTransactionProxy">
		<property name="target">
			<bean class="com.ss02.user.manager.imp.UserManagerImp">
			<property name="userDao" ref="userDao"/>
			</bean>
		</property>
	</bean>
	
</beans>
  

在web.xml中配置编码格式

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	id="WebApp_ID" version="2.5">
	<display-name>ssi01</display-name>
	<welcome-file-list>
		<welcome-file>index.html</welcome-file>
		<welcome-file>index.htm</welcome-file>
		<welcome-file>index.jsp</welcome-file>
		<welcome-file>default.html</welcome-file>
		<welcome-file>default.htm</welcome-file>
		<welcome-file>default.jsp</welcome-file>
	</welcome-file-list>
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>/WEB-INF/springResource/applicationContext.xml,
    			 /WEB-INF/springResource/dataSource.xml,
    			 /WEB-INF/springResource/applicationContext-*.xml</param-value>
	</context-param>
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>

	<!-- web filter -->
	<filter>
		<filter-name>CharacterEncodingFilter</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>
		<init-param>
			<param-name>forceEncoding</param-name>
			<param-value>true</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>CharacterEncodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
<!-- 	<filter>
		<filter-name>struts2</filter-name>
		<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
	</filter> -->
    <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>


</web-app>

6.在page文件夹下,增加一个页面:

addUser.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
	String path = request.getContextPath();
	String basePath = request.getScheme() + "://"
			+ request.getServerName() + ":" + request.getServerPort()
			+ path + "/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>Hello word</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
</head>

<body>
	<form action="<%=path%>/lzz/user_insertUser" method="post">
	用户名:
	<input name="user.name" type="text"/>
	<br> 密码:
	<input name="user.password" type="text"/><br>
	<input type="submit" value="submit"/>
	</form>
</body>
</html>

在index.jsp中增加对addUser.jsp的引用

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
	String path = request.getContextPath();
	String basePath = request.getScheme() + "://"
			+ request.getServerName() + ":" + request.getServerPort()
			+ path + "/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<title>Insert title here</title>
</head>

<body>
	This is my JSP page.
	<br>
	<form action="<%=basePath%>lzz/login">
		<input type="submit" value="login">
	</form>

	<form action="<%=path%>/lzz/login_login">
		<input type="submit" value="login_login">
	</form>


	<form action="<%=path%>/lzz/user_login">
		<input type="submit" value="test_ssi">
	</form>

	<a href="<%=path%>/page/addUser.jsp">Add_User</a>
</body>
</html>

配置结束,运行tomca。

遇到的问题:

1.user.xml的namespace需要和userDao的路径一致,否则映射不过去

2.接口UserDao中的方法名,需要和user.xml中方法名称一样,否则提示找不到该方法

3.在配置struts中文编码的,需要同时两个Filter,如下代码,否则找不到action:

web.xml

	<filter>
		<filter-name>CharacterEncodingFilter</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>
		<init-param>
			<param-name>forceEncoding</param-name>
			<param-value>true</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>CharacterEncodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
    <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>
struts.xml

<constant name="struts.i18n.encoding" value="UTF-8"/>


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值