目前企业中主流的框架就是ssm框架,搭建框架是最基础的步骤,遂写一篇文章记录一下搭建框架并且整合SSM框架的过程
1. 准备Maven
1.1 解压一个Maven-windows的安装包
1.2 解压后修改conf/settings.xml
配置文件内容
- 复制
settings.xml
配置文件的53行标签,并把中间的地址修改为自己的本地仓库地址
- 在
mirrors
标签中配置阿里云的国内镜像地址,复制以下内容
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
- 粘贴到标签内即可
1.3 IDEA中配置Maven
2. 使用IDEA创建Maven项目
- 创建最外层文件
ssm_parent
名字随便写就行 - 在
ssm_parent
文件夹内创建三个Maven模块,ssm_dao,ssm_service,ssm_web
2.1 在ssm_parent下的pom.xml
配置文件中添加坐标依赖
- 这里都是一些常用的jar包,mysql我用的8.0.18版本
<properties>
<spring.version>5.0.2.RELEASE</spring.version>
<slf4j.version>1.6.6</slf4j.version>
<log4j.version>1.2.12</log4j.version>
<shiro.version>1.2.3</shiro.version>
<mybatis.version>3.4.5</mybatis.version>
<spring.security.version>5.0.1.RELEASE</spring.security.version>
</properties>
<dependencies>
<!-- spring -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.6.8</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.18</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- log start -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j.version}</version>
</dependency>
<!-- log end -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.0</version>
</dependency>
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.2</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>${spring.security.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>${spring.security.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
<version>${spring.security.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-taglibs</artifactId>
<version>${spring.security.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.9</version>
</dependency>
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>jsr250-api</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
</plugin>
</plugins>
</build>
2.2 建立三个模块中的依赖关系
- ssm_web依赖ssm_service ,并把ssm_web打包方式更改为war
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>ssm_parent</artifactId>
<groupId>com.ljn</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>ssm_web</artifactId>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>com.ljn</groupId>
<artifactId>ssm_service</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
- ssm_service 依赖 ssm_dao
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>ssm_parent</artifactId>
<groupId>com.ljn</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>ssm_service</artifactId>
<dependencies>
<dependency>
<groupId>com.ljn</groupId>
<artifactId>ssm_dao</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
3. ssm整合
- 在
ssm_web/src/main/
文件夹下创建webapp
文件夹 - 在
ssm_web/src/main/webapp
文件夹下创建WEB-INF
文件夹
3.1 编写 web.xml配置文件内容
- 复制如下代码即可
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<display-name>Archetype Created Web Application</display-name>
<!--编码过滤器-->
<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>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--前端控制器-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!--spring的核心监听器-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
</web-app>
3.2 编写 resources目录下配置文件
- 在
ssm_web/src/main/resources
目录下创建配置文件 - 创建
jdbc.properties
配置文件并添加如下内容
# 数据库驱动
jdbc.driver=com.mysql.cj.jdbc.Driver
# 数据库连接地址 ssm位置是数据库名称
jdbc.url=jdbc:mysql://localhost:3306/ssm?characterEncoding=utf8&useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai
#数据库的用户名
jdbc.username=root
#数据库的密码
jdbc.password=root
#定义初始连接数
initialSize=0
#定义最大连接数
maxActive=20
#定义最大空闲
maxIdle=20
#定义最小空闲
minIdle=1
#定义最长等待时间
maxWait=60000
- 创建
applicationContext.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:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.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
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!--dao配置开始-->
<!--导入外部jdbc配置文件-->
<context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder>
<!--数据库连接池-->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<!--SqlSessionFactroyBean对象-->
<bean id="sqlSessionFactory"
class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
</bean>
<!--扫描dao接口包 在ssm_dao/src/main/java下创建value中一致的包即可-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.ljn.dao"/>
</bean>
<!--dao配置结束-->
<!--service配置开始-->
<!--组件扫描 在ssm_service/src/main/java下创建value中一致的包即可-->
<context:component-scan base-package="com.ljn.service"/>
<!--提供事务管理器-->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!--开启事务注解支持-->
<tx:annotation-driven/>
<!--service配置结束-->
</beans>
- 创建
springmvc.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:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.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
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!--开启组件扫描 在ssm_web/src/main/java下创建value中一致的包即可-->
<context:component-scan base-package="com.ljn.controller"/>
<!--开启mvc注解支持:开启控制器映射器和控制器适配器-->
<mvc:annotation-driven/>
<!--视图解析器-->
<bean id="internalResourceViewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/pages/"/>
<property name="suffix" value=".jsp"/>
</bean>
<!--释放静态资源-->
<mvc:default-servlet-handler/>
</beans>
3.3 注意事项
- Controller层添加注解
@Controller
- Service实现类添加注解
@Service @Transactional
- Dao使用注解开发
@Select @Insert @Update @Delete
4. 编写测试用例
4.1 创建jsp文件
-
在
ssm_web/src/main/webapp
下创建pages文件夹 -
在
ssm_web/src/main/webapp/WEB-INF/web.xml
下添加欢迎页面
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
- 在
ssm_web/src/main/webapp
下创建 index.jsp,并添加如下内容
<%--
Created by IntelliJ IDEA.
User: jinsa
Date: 2020/11/2
Time: 11:33
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>欢迎登陆</title>
</head>
<body>
<h1>欢迎页面!!请登陆</h1>
<form method="post" action="login">
用户名: <input type="text" name="userName"><br>
密码: <input type="text" name="passWord"><br>
<button type="submit">提交</button>
</form>
<br>
没有账号?<a href="./pages/register.jsp">去注册</a>
</body>
</html>
- 在pages目录下创建
fail.jsp
,并添加如下内容
<%--
Created by IntelliJ IDEA.
User: jinsa
Date: 2020/11/2
Time: 14:01
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登陆失败</title>
</head>
<body>
<h1>用户名或密码错误!</h1>
</body>
</html>
- 在pages目录下创建
register.jsp
,并添加如下内容
<%--
Created by IntelliJ IDEA.
User: jinsa
Date: 2020/11/2
Time: 11:33
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>注册页面</title>
</head>
<body>
<h1>注册页面!!</h1>
<form method="post" action="../register">
用户名: <input type="text" name="userName"><br>
密码: <input type="text" name="passWord"><br>
<button type="submit">提交</button>
</form>
</body>
</html>
- 在pages目录下创建
register_success.jsp
,并添加如下内容
<%--
Created by IntelliJ IDEA.
User: jinsa
Date: 2020/11/2
Time: 11:33
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>注册成功</title>
</head>
<body>
<h1>注册成功,请登陆!!!</h1>
<form method="post" action="login">
用户名: <input type="text" name="userName"><br>
密码: <input type="text" name="passWord"><br>
<button type="submit">提交</button>
</form>
</body>
</html>
- 在pages目录下创建
success.jsp
,并添加如下内容
<%--
Created by IntelliJ IDEA.
User: jinsa
Date: 2020/11/2
Time: 14:00
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登陆成功</title>
</head>
<body>
<h1>登陆成功,欢迎用户 ${userName}</h1>
</body>
</html>
4.2 编写Controller处理器代码
添加如下代码
package com.ljn.controller;
import com.ljn.pojo.User;
import com.ljn.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class UserController {
@Autowired
private UserService userService;
@RequestMapping("/login")
public String login(Model model, User user) {
User user1 = userService.findById(user);
if (user1 != null) {
model.addAttribute("userName", user1.getUserName());
return "success";
} else {
return "fail";
}
}
@RequestMapping("/register")
public String register(User user) {
try {
userService.save(user);
return "register_success";
} catch (Exception e) {
e.printStackTrace();
return "fail";
}
}
}
4.3 编写Service代码
UserService中添加如下代码
package com.ljn.service;
import com.ljn.pojo.User;
public interface UserService {
User findById(User user);
void save(User user);
}
UserServiceImpl添加如下代码
package com.ljn.service.impl;
import com.ljn.dao.UserDao;
import com.ljn.pojo.User;
import com.ljn.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
@Transactional
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
public User findById(User user) {
User res = userDao.findById(user);
return res;
}
public void save(User user) {
userDao.save(user);
}
}
4.4 编写dao代码
pojo/User
代码如下
package com.ljn.pojo;
public class User {
private int id;
private String userName;
private String passWord;
// 下面是get set方法 省略了
}
UserDao代码如下
package com.ljn.dao;
import com.ljn.pojo.User;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
public interface UserDao {
@Select("select * from user where userName = #{userName} and passWord = #{passWord}")
User findById(User user);
@Insert("insert into user (userName, passWord) values (#{userName}, #{passWord})")
void save(User user);
}
5. 启动tomcat服务
- 使用tomcat启动服务,在Deployment中添加war包
5.1 测试成功显示如下页面
首页
登陆成功显示页面
注册页面
注册成功页面
—至此结束—