Spring4第五讲学习笔记,整合Spring,Struts,Mybatis框架
2017-06-13 22:14
375 查看
1.导入Spring4 struts2 Mybatis JAR包
注意导入整合包 :struts2-spring-plugin-2.3.4.jar mybatis-spring-1.2.3.jar 还有数据库驱动
2.编写配置文件
需要在web.xml声明Spring和struts的配置文件。web.xml是整个配置文件的指挥者。
Spring配置文件是applicationContext.xml
Struts2的配置文件是struts.xml
为了配置Spring的配置文件,首先需要在web.xml中添加全局参数。
首先配置全局参数context-param, 参数名是全局配置文件路径contextConfigLocation,值是classpath:applicationContext.xml
配置一个监听器,全局加载监听器contextLoaderListener,它在初始化的时候创建webApplicationContext容器,根据全局参数contextConfigLocation的路径去加载Spring的配置文件
再配置struts2的过滤器的相关信息,filter 和 filter-mapping
3.配置mybatis的配置文件
mybatis.cfg.xml ,映射命名空间的sql语句
4.编码
domain dao dao.impl service service.impl action
5.编写Spring的applicationContext.xml和struts.xml配置文件
6.配置Spring的applicationContext.xml
附 index.jsp <h1><a href="list.action">管理员登录</a></h1>
add.jsp 属性驱动
<body>
<form action="add.action" method="post">
账户名<input type="text" name="user.name">
密码 <input type="text" name="user.pwd">
<input type="submit" value="提交">
</form>
</body>
注意导入整合包 :struts2-spring-plugin-2.3.4.jar mybatis-spring-1.2.3.jar 还有数据库驱动
aopalliance.jar asm-3.3.1.jar asm-commons-3.3.jar asm-tree-3.3.jar aspectjweaver.jar cglib-2.2.2.jar commons-fileupload-1.2.2.jar commons-io-2.0.1.jar commons-lang3-3.1.jar commons-logging-1.1.1.jar freemarker-2.3.19.jar javassist-3.17.1-GA.jar log4j-1.2.17.jar log4j-api-2.0-rc1.jar log4j-core-2.0-rc1.jar mybatis-3.2.7.jar mybatis-spring-1.2.3.jar mysql-connector-java-5.1.20-bin.jar ognl-3.0.5.jar slf4j-api-1.7.5.jar slf4j-log4j12-1.7.5.jar spring-aop-4.1.6.RELEASE.jar spring-aspects-4.1.6.RELEASE.jar spring-beans-4.1.6.RELEASE.jar spring-context-4.1.6.RELEASE.jar spring-context-support-4.1.6.RELEASE.jar spring-core-4.1.6.RELEASE.jar spring-expression-4.1.6.RELEASE.jar spring-jdbc-4.1.6.RELEASE.jar spring-orm-4.1.6.RELEASE.jar spring-tx-4.1.6.RELEASE.jar spring-web-4.1.6.RELEASE.jar spring-webmvc-4.1.6.RELEASE.jar struts2-core-2.3.4.jar struts2-spring-plugin-2.3.4.jar xwork-core-2.3.4.jar |
需要在web.xml声明Spring和struts的配置文件。web.xml是整个配置文件的指挥者。
Spring配置文件是applicationContext.xml
Struts2的配置文件是struts.xml
为了配置Spring的配置文件,首先需要在web.xml中添加全局参数。
首先配置全局参数context-param, 参数名是全局配置文件路径contextConfigLocation,值是classpath:applicationContext.xml
配置一个监听器,全局加载监听器contextLoaderListener,它在初始化的时候创建webApplicationContext容器,根据全局参数contextConfigLocation的路径去加载Spring的配置文件
再配置struts2的过滤器的相关信息,filter 和 filter-mapping
web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp_9" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <!-- 配置Spring,先配置全局配置路径 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <!-- 配置全局加载器监听器,它一初始化就加载Spring的配置文件 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- struts2配置 --> <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>*.action</url-pattern> </filter-mapping> <display-name>Struts Showcase Application</display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> <welcome-file>default.jsp</welcome-file> <welcome-file>index.html</welcome-file> </welcome-file-list> </web-app> |
mybatis.cfg.xml ,映射命名空间的sql语句
mybatis.cfg.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> <mappers> <!--注意在这里注册user的userMapper.xml配置文件,文件夹的"/"导入--> <mapper resource="domain/userMapper.xml"/> </mappers> </configuration> |
<?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="domain.userMapper"> <select id="getAll" resultType="domain.User"> select * from user </select> <insert id="addUser" parameterType="domain.User"> insert into user(name,pwd) values(#{name},#{pwd}) </insert> 查询动作,相当重要,根据修改后的全局ID查询并返回User对象 <select id="getUserById" resultType="domain.User" parameterType="int"> select * from user where id = #{id} </select> <update id="updateUser" parameterType="domain.User"> update user set name=#{name},pwd=#{pwd} where id=#{id} </update> <delete id="deleteUser" parameterType="domain.User"> delete from user where id=#{id} </delete> </mapper> |
domain dao dao.impl service service.impl action
domain public interface UserDao { public List<User> getAll(); public int add(User user); public User getUserById(int id); public int update(User user); public int delete(User user); } |
dao.impl package dao.imp; import java.util.List; import org.mybatis.spring.support.SqlSessionDaoSupport; import dao.UserDao; import domain.User; public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao{ /*在spring配置文件中注入的是sqlSessionFactory,它继承了sqlSessionDaoSupport可以直接使用getSqlSession()方法得到sqlSession*/ @Override public List<User> getAll() { String statement ="domain.userMapper.getAll";//映射的是user的命名空间和ID return this.getSqlSession().selectList(statement); } @Override public int add(User user) { String statement ="domain.userMapper.addUser"; return this.getSqlSession().insert(statement, user); } @Override public User getUserById(int id) { String statement = "domain.userMapper.getUserById"; return this.getSqlSession().selectOne(statement, id); } @Override public int update(User user) { String statement ="domain.userMapper.updateUser"; return this.getSqlSession().update(statement, user); } public int delete(User user){ String statement="domain.userMapper.deleteUser"; return this.getSqlSession().delete(statement,user); } } |
package service; import java.util.List; import domain.User; public interface UserService { /*UserService接口,与UserDao接口保持一致*/ public List<User> getAll(); public int add(User user); public User getUserById(int id); public int update(User user); public int delete(User user); } |
package service.imp; import java.util.List; import service.UserService; import dao.UserDao; import domain.User; public class UserServiceImpl implements UserService{ private UserDao userDao;//通过Spring的Bean注入,需要set方法 @Override public List<User> getAll(){ return userDao.getAll(); } public UserDao getUserDao() { return userDao; } public void setUserDao(UserDao userDao) { this.userDao = userDao; } @Override public int add(User user) { return userDao.add(user); } @Override public User getUserById(int id) { return userDao.getUserById(id); } @Override public int update(User user) { return userDao.update(user); } @Override public int delete(User user) { return userDao.delete(user); } } |
8.添加记录 首先在list.jsp页面中添加一个超链接,跳转至toAdd.action请求,struts2根据请求对应的方法转发至add.jsp,在账户和密码上写记录。记录提交至add.aciton,Action中调用service的方法。service调用userDao。userDao里继承的是SqlSessionDaoSupport,注入sqlSessionFactory。this.getSqlSession().insert(statement,参数)。statement指向的是mybatis命名空间的类名加标签ID。 9.查询记录,修改记录之前必须先查询到个别user。在userDao中根据迭代器中提交的参数ID查询到相关的user。在执行超链接中的action的时候它的参数把全局的user的id改为此行记录的id <td><a href="toUpdate.action?user.id=<s:property value="id" />">修改</a></td> 10.更新记录 在list.jsp页面中添加超链接,跳转是toUpdate.action请求,struts2根据请求对应的方法转发至update.jsp,必须先获取要修改对象的<a href="toUpdate.action?user.id=<s:property value="id" />">修改</a>ID,通过添加参数的方法提交。 在update.jsp中修改完成后向update.action提交请求,在Action中调用service方法。修改完成后跳转list.action至list.jsp 11.删除 在list.jsp页面中添加超链接,执行delete.action,同上,根据此行的ID,将全局的user的id改为它,执行userService的删除方法。 Action:UserAction package action; import java.util.List; import service.UserService; import com.opensymphony.xwork2.Action; import domain.User; userAction public class UserAction implements Action{ private List<User> list;//需要set和get方法,用于OGNL表达式在页面展示数据,需要set和get方法 private UserService userService;//通过Spring的Bean注入userService,需要set方法 private User user;//属性驱动,用于接收页面提交的一些参数,需要set,get方法 @Override public String execute() throws Exception { System.out.println("默认的action的execute方法执行"); return Action.SUCCESS; } public String list(){ list = userService.getAll(); return Action.SUCCESS; } public String toAdd(){ return Action.SUCCESS; } public String add(){ System.out.println("add function run"); int i =userService.add(user); return i>0?Action.SUCCESS:Action.ERROR; } public String toUpdate(){ user = userService.getUserById(user.getId());//修改,先根据页面提交的更改后的全局ID,拿到查询的user对象 System.out.println("接受到的User的ID是:"+user.getId()); return Action.SUCCESS; } public String update(){ int i =userService.update(user); return i>0?Action.SUCCESS:Action.ERROR; } public String delete(){ user = userService.getUserById(user.getId()); //删除,先根据全局ID查询到user对象 System.out.println("即将删除的ID是:"+user.getId()); int i = userService.delete(user); return i>0?Action.SUCCESS:Action.ERROR; //三目运算符 } public List<User> getList() { return list; } public void setList(List<User> list) { this.list = list; } public UserService getUserService() { return userService; } public void setUserService(UserService userService) { this.userService = userService; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } } |
str <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <include file="config/struts/user.xml"></include> </struts> -------------------------------------------------------------------------------------------------------------- user.xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> user模块的Spring配置文件在为Action注入userService的时候,bean的id是userAction,class="action.UserAction"所以这里也可以这么写 <package name="user" namespace="/" extends="struts-default"> <action name="list" class="userAction" method="list"> <result>/list.jsp</result> </action> 添加就要跳转至添加页面 <action name="toAdd" class="userAction" method="toAdd"> <result type="redirect">/add.jsp</result> </action> 添加成功跳转list.action重新加载list.jsp <action name="add" class="userAction" method="add"> <result name="success" type="redirectAction">list</result> <result name="error">/index.jsp</result> </action> 更新先要查询,先获取迭代器中的要被修改的User的ID,根据此ID修改全局User。成功后跳转更新页面,填写相应的更新信息,这个时候是通过属性驱动修改User的信息,ID跟Action要。下面的蓝色代码 <action name="toUpdate" class="userAction" method="toUpdate"> <result>/update.jsp</result> </action> 修改页面通过属性驱动向Action提交,成功后重新加载list.jsp <action name="update" class="userAction" method="update"> <result name="success" type="redirectAction">list</result> <result name="error">/index.jsp</result> </action> <action name="delete" class="userAction" method="delete"> <result name="success" type="redirect">list.action</result> <result name="error">/index.jsp</result> </action> </package> </struts> |
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags"%> <!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 background="images/bgPic"> <table width="80%" border="2" bordercolor="0f0f0f"> <tr> <td>编号</td> <td>姓名</td> <td>密码</td> <td>操作</td> </tr> <s:iterator value="list"> <tr> <td><s:property value="id" /></td> <td><s:property value="name" /></td> <td><s:property value="pwd" /></td> <td> <a href="toUpdate.action?user.id=<s:property value="id" />">修改</a> <a href="delete.action?user.id=<s:property value="id" />" >删除</a> </td> </tr> </s:iterator> </table> <h3><a href="toAdd.action" >添加一条记录</a></h3> </body> </html> |
update.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags"%> <!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> <form action="update.action" method="post"> <input type="hidden" name="user.id" value="<s:property value="user.id"/>"> 账户名<input type="text" name="user.name" value="<s:property value="user.name"/>"> 密码 <input type="text" name="user.pwd" value="<s:property value="user.pwd"/>"> <input type="submit" value="提交"> </form> </body> </html> |
<?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.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> <!-- 配置数据源 --> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/test"/> <property name="username" value="root"/> <property name="password" value="3333"/> </bean> <!-- 声明式事务配置 开始 --> <!-- 配置事务管理器 --> <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> <!-- 配置事务通知 --> <tx:advice id="txAdvice" transaction-manager="txManager"> <tx:attributes> <!-- 配置哪些方法使用什么样的事务,配置事务的传播特性 --> <tx:method name="add" propagation="REQUIRED"/> <tx:method name="insert" propagation="REQUIRED"/> <tx:method name="update" propagation="REQUIRED"/> <tx:method name="delete" propagation="REQUIRED"/> <tx:method name="remove*" propagation="REQUIRED"/> <tx:method name="get" read-only="true"/> <tx:method name="*" propagation="REQUIRED"/> </tx:attributes> </tx:advice> <aop:config> <aop:pointcut expression="execution(* service.impl.*.*(..))" id="pointcut"/> <aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut"/> </aop:config> <!-- 声明式事务配置 结束 --> sqlSessionFactory需要两个核心参数,一个是数据源ref,另一个是mybatis的配置文件value <!-- 配置sqlSessionFactory --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource"ref="dataSource"/> <property name="configLocation"value="classpath:mybatis.cfg.xml"></property> 这里我看到还有别人用了mapperLoactions参数 </bean> <import resource="config/spring/user.xml"/>添加user模块的Spring配置文件 </beans> ---------------------------------------------------------------------------- user.xml User模块的Spring配置文件 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd "> <bean id="userDao"class="dao.imp.UserDaoImpl"> <property name="sqlSessionFactory"ref="sqlSessionFactory"/> </bean> <bean id="userService" class="service.imp.UserServiceImpl"> <property name="userDao"ref="userDao"></property> </bean> <bean id="userAction"class="action.UserAction" scope="prototype"> struts的配置文件中可以引用这个ID作为class,并且设置这个的范围是prototype, 每次创建都产生新的对象,跟struts的Action保持一致 <property name="userService"ref="userService"></property> </bean> </beans> |
add.jsp 属性驱动
<body>
<form action="add.action" method="post">
账户名<input type="text" name="user.name">
密码 <input type="text" name="user.pwd">
<input type="submit" value="提交">
</form>
</body>
相关文章推荐
- SSH学习笔记之关于struts-spring-hibernate整合配置问
- OA学习笔记-005-Spring2.5与struts2.1整合
- Spring学习笔记之整合struts
- MyEclipse — Maven+Spring+Struts+Hibernate 整合 [学习笔记-5]
- spring学习笔记15--Spring2.x+Hibernate3.x +Struts1.x整合开发(3)struts再次尾随sh
- struts与spring整合学习笔记
- spring整合struts---个人笔记
- 学习Struts+spring+hibernate的笔记(1)
- spring整合hessian学习笔记
- Spring.NET学习笔记26——整合NVelocity(应用篇)
- 学习笔记-----------------struts2 hibernate3 spring2.5整合
- Struts 2 + Spring 2.0 + Hibernate 3.0整合笔记
- Spring.NET学习笔记20——整合Remoting(应用篇) Level 200
- Struts+Spring+Hibernate 整合笔记
- Struts 2 + Spring 2.0 + Hibernate 3.0整合笔记
- Struts 2 + Spring 2.0 + Hibernate 3.0整合笔记