配置方式--三大框架整合
使用的工具是j2ee开发工具,使用域maven,web项目,简单项目整合
以登录为例:
1.jsp页面
<form action="User_login.action" >
<table>
<tr>
<td>账户</td>
<td><input type="text" name="uname"></td>
</tr>
<tr>
<td>密码</td>
<td><input type="password" name="upass"></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="登录"></td>
</tr>
</table>
</form>
2.建立一个User的实例
public class User {
private int id;
private String uname;
private String upass;
public User() {
}
public User(String uname, String upass) {
this.uname = uname;
this.upass = upass;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public String getUpass() {
return upass;
}
public void setUpass(String upass) {
this.upass = upass;
}
@Override
public String toString() {
return "User [id=" + id + ", uname=" + uname + ", upass=" + upass + "]";
}
}
3.创建action类
public class UserAction implements ModelDriven<User> {
private UserService userService;
private User user;
//这里的构造函数,将会验证spring容器是否创建成功
public UserAction() {System.out.println("UserAction创建了......");
}
//通过spring容器进行创建
public void setUserService(UserService userService) {
this.userService = userService;
}
public void setUser(User user) {
this.user = user;
}
public String login(){
if(userService.Login(user) ){
return "success";
}
return "fail";
}
@Override
public User getModel() {
user=new User();
return user;
}
}
4.userService处理接口
public interface UserService {
boolean Login(User user);
}
5.userServiceimpl实例化
public class UserSeriveImpl implements UserService {
private UserMapper userMapper;
public void setUserMapper(UserMapper userMapper) {
this.userMapper = userMapper;
}
@Override
public boolean Login(User user) {
return userMapper.getUser(user)!=null;
}
}
6.UserMapper接口
public interface UserMapper {
User getUser(User user);
}
7.UserMapper.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.yc.spring.mapper.UserMapper">
<select id="getUser" parameterType="User" resultType="User">
select * from users where uname=#{uname} and upass=#{upass}
</select>
</mapper>
8.数据库
drop table users;
create table users(
id int primary key,
uname varchar2(10),
upass varchar2(20)
);
insert into users values(1,'admin','a');
commit;
select * from users;
准备工作就绪
1.struts2-spring融合
a.在pom.xml中加载所需包
<!--struts包框架 -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.5-BETA3</version>
</dependency>
<!-- spring框架核心 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.1.6.RELEASE</version>
</dependency>
<!-- 日志 -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j</artifactId>
<version>2.5</version>
<type>pom</type>
</dependency>
<!-- 日志适配器 -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.5</version>
</dependency>
<!-- spring在web端 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.1.6.RELEASE</version>
</dependency>
<!-- spring持久化 支持包-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.1.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-spring-plugin</artifactId>
<version>2.5-BETA3</version>
</dependency>
b.在spring中加入struts2中的action以及业务处理类
<?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:p="http://www.springframework.org/schema/p"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
<bean id="userService" class="com.yc.spring.serviceImpl.UserSeriveImpl"/>
<!-- 配置struts2中action -->
<bean id="userAction" class="com.yc.spring.action.UserAction" p:userService-ref="userService"/>
</beans>
c.struts.xml 中配置所需action,配置struts.objectFactory常量
<?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>
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="true" />
<constant name="struts.objectFactory" value="spring" /> //把struts框架交给spring容器处理
<package name="default" namespace="/" extends="struts-default">
<action name="User_login" class="userAction" method="login">
<result>/login.jsp</result>
<result name="fail">/index.jsp</result>
</action>
</package>
</struts>
测试
2.Struts2-spring-mybatis三大框架融合
a.mybatis是数据处理部分,所以在pom.xml中加载所需包
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.3.1</version>
</dependency>
<!-- mybatis-spring整合包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.0</version>
</dependency>
b.在spring.xml中融合dataSource,SqlSessionFactory,映射接口实现dailibean
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
<!-- 配置struts2中action -->
<bean id="userAction" class="com.yc.spring.action.UserAction" p:userService-ref="userService"/>
<!-- oracle配置数据源 -->
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource"
p:driverClassName="oracle.jdbc.driver.OracleDriver" p:url="jdbc:oracle:thin:@localhost:1521:orcl"
p:username="ssm" p:password="a"/>
<!-- sqlSessionFactory对象
p:dataSource-ref:数据源
p:typeAliasesPackage:mybatis实体类型指定别名的包
p:mapperLocations:mybatis的配置文件所在的位置
p:configLocation:配置路径
-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"
p:dataSource-ref="dataSource"
p:typeAliasesPackage="com.yc.spring.entity"
p:mapperLocations="classpath:Mapper/*Mapper.xml"
/>
<!-- 没有配置p:configLocation="classpath:mybatis.xml" 因为没有mybatis.xml -->
<!-- 配置映射接口代理实现类的bean,bean id默认为映射接口的首字母小写 如:UserMapper bean名为userMapper -->
<!--class="org.mybatis.spring.mapper.ClassPathMapperScanner" -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"
p:sqlSessionFactoryBeanName="sqlSessionFactory"
p:basePackage="com.yc.spring.mapper"/>
</beans>
junit测试部分,测试数据源和sql工厂
c.把struts2部分和mybatis部分放在一起终归是不好的,因为struts2是处于表现层和业务处理层,而mybatis处于
业务处理和数据访问层,所以就把spring.xml分为spring-common.xml和spring-mybatis.xml
spring-mybatis.xml
spring-common.xml
在这里我们引入了命名空间context,我们就可以只保留橙黄色部分,如果没有引入命名空间,而我们要保留红色部分
junit测试也要发生相应的变化,在测试数据源时,容器只要改成mybatis的容器,但是
在测试业务处理时,就要写入两个容器作为一个容器
注解方式--struts2,mybatis,spring三大框架整合
橙黄色的部分就是要使用注解方式构建三大框架
在这里先了解几种注解
base-package:扫描指定的bean包
如果发现
@Controller:表示控制层的bean
@Repository:表示是持久层的bean
@Service:表示业务层的bean
@Component:表示普通bean
目前来说作用一样都是标识指定类这是一个bean
就像下面这张图片一样,
@Controller(userAction')
就好比如在spring-common.xml中配置了一个bean
<!-- 配置struts2中action -->
<bean id="userAction" class="com.yc.spring.action.UserAction" p:userService-ref="userService"/>
@Autowried在UserActionlei中给userService注值
@Serivce("userService")
就好比如在spring-common.xml配置了
<bean id="userService" class="com.yc.spring.serviceImpl.UserSeriveImpl" p:userMapper-ref="userMapper"/>
@Autowried :就是给userMappper注值
这样三大框架就融合在一起了