引:想着怎么教一个人快速入门SSM,讲原理是真的太费时间,还是以搭建具体流程加上源码比较好吧,先模仿,后创新嘛!
项目架构
我们先把文件夹创建好,当然也可以先直接从我仓库地址把它克隆下来,删除其中部分的代码文件。
配置文件解析
配置文件里面都有注释,大家可以对照着看:
pom.xml文件
pom文件作为Maven工程的核心,主要是用来引入jar包的,在我的pom文件中也详细列出了我们需要哪些包,以及哪些包是用来干什么的。
web.xml文件
web.xml作为Web功能的核心,主要是设置了如何接受请求,这里会结合SpringMVC的前端控制器类DispatcherServlet作为请求分发的核心Servlet,以及在第一次加载过程中,后台服务需要加载哪些配置文件。
ssm配置文件(依靠Spring整合)
我们看到spring文件夹下有三个文件,分别对应了dao,service,web三层的Bean配置。
spring-dao-config.xml文件
这里主要是配置数据库连接池(数据源),以及注入SqlSessionFactory和所有在com.todorex.dao下得所有Dao接口。
spring-service-config.xml文件
这里主要配置扫描并注入com.todorex.service包下所有Service注解类,以及配置事务管理器。
spring-web-config.xml文件
这里主要配置扫描并注入com.todorex.controller包下所有Controller注解类,以及配置视图解析器。这里还有一个超级重要的就是配置处理静态资源的方式。
mybatis-config.xml文件
这里主要是设置mybatis的全局属性。
jdbc.properties文件
这里主要配置数据库连接的相关信息。
log4j.properties文件
这里主要配置日志记录的相关信息。
配置文件都配置完了,我们终于可以开始写代码了!
SSM代码
需求
实现用户的登录与注销。
上帝视角开发(我需要什么就造什么)
我需要一个能处理我的请求(URL)的Controller
知道要controller,我们就造一个,我们在com.todorex.controller包下新建一个LoginController类。
Controller的作用主要是根据你请求的URL来做不同的事(对应的方法),结果是返回一个ModelAndView(当然View和Model也可以分开),如果方法的逻辑只是页面间的跳转和简单数据处理,我们就用不到Service了,如过我们需要进行业务处理以及操作数据库,那么我们就需要用到Service了。
PS:这里需要注意请求转发和请求重定向的区别(注释中有)
我需要一个能处理业务的Service
在service层设计一个好的接口是至关重要的(我们还是HelloWorld,以后有经验了自然能设计得好一些),如果实现类有多个的话 ,可以用@Service(“userService1”)来注入,@Resource(name=”userService1”) 来对应获取。在处理业务逻辑的时候,一般都会涉及到数据库操作,这个时候我们就需要用到Dao了。
我需要一个能处理数据的Dao
这里我们要明确一点:一个Dao接口对应一个Mapper文件,Dao定义接口方法,Mapper文件实现该方法的sql语句。
日志
这里我们举一个例子,就是记录登录用户的名字和时间,看下面的代码:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17public class LoginController {
// 获得日志对象
Logger logger = Logger.getLogger(LoginController.class);
"/checkLogin",method = RequestMethod.POST) (value =
public String checkLogin(User user, Model model) {
user = userService.checkLogin(user.getUsername(),user.getPassword());
if (user != null) {
// 日志记录用户登录
logger.info(user.getUsername()+"在"+new Date() + "登录过!");
model.addAttribute("user",user);
return "redirect:/success";
} else {
return "redirect:/fail";
}
}
}
单元测试
配置一个基类(用于加载配置文件)
1
2
3
4
5
6//使用junit4进行测试 (SpringJUnit4ClassRunner.class)
// 导入多个配置文件
"classpath:spring/spring-*.xml","classpath:mybatis-config.xml"}) //加载配置文件 (locations={
//所有继承该类的测试类都会遵循该配置
public class BaseJunit4Test {
}在各个对应的包下建立单元测试,如;
1
2
3
4
5
6
7
8
9
10public class UserDaoTest extends BaseJunit4Test {
private UserDao userDao;
public void TestFindByUsername() {
User user = userDao.findByUsername("rex");
System.out.println(user);
}
}
页面编写
这里只举一个例子(其实主要就是jsp的用法),success.jsp:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%--引入jstl标签库,很重要--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
"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="image/success.jpg">
<div style="margin: auto">
<div>
<%--利用jstl标签获取session中的user的值--%>
<strong style="font-size: 100px;color: red"> ${sessionScope.user.username}!</strong>
<strong style="font-size: 100px;color: blue"> ,你他妈登录成功了</strong>
</div>
<form action="/LoginDemo/outLogin" >
<button type="submit" class="btn btn-success col-lg-12" style="font-size: 100px;text-align: center">退出登录</button>
</form>
</div>
</body>
</html>
终于大功告成!!!